diff --git a/survival/camera.py b/survival/camera.py index a43fe73..bc6348b 100644 --- a/survival/camera.py +++ b/survival/camera.py @@ -17,7 +17,8 @@ class Camera: return pos[0] + self.camera.left, pos[1] + self.camera.top def get_visible_area(self): - pass + return Rect(-self.camera.left, -self.camera.top, + SCREEN_WIDTH - self.camera.left, SCREEN_HEIGHT - self.camera.top) def update(self, target): x = -target.pos[0] + int(SCREEN_WIDTH / 2) diff --git a/survival/game_map.py b/survival/game_map.py index 505767a..3fc9937 100644 --- a/survival/game_map.py +++ b/survival/game_map.py @@ -11,8 +11,9 @@ class GameMap: self.layers.append(TileLayer(width, height)) def draw(self, camera): + visible_area = camera.get_visible_area() for layer in self.layers: - layer.draw(camera) + layer.draw(camera, visible_area) self.player.draw(camera) def update(self, camera, delta, pressed_keys): diff --git a/survival/tile_layer.py b/survival/tile_layer.py index 5c66e33..b07465a 100644 --- a/survival/tile_layer.py +++ b/survival/tile_layer.py @@ -9,9 +9,9 @@ class TileLayer: self.tiles = [[Tile() for x in range(self.width)] for y in range(self.height)] self.image = Image('atlas.png') - def draw(self, camera): - for y in range(self.height): - for x in range(self.width): - self.image.pos = (x*32, y*32) + def draw(self, camera, visible_area): + for y in range(int(visible_area.top/32), int(visible_area.height/32) + 1): + for x in range(int(visible_area.left/32), int(visible_area.width/32) + 1): + self.image.pos = (x * 32, y * 32) self.image.origin = self.tiles[y][x].origin camera.draw(self.image)