diff --git a/squirrelbattle/game.py b/squirrelbattle/game.py index ba8493f..837e753 100644 --- a/squirrelbattle/game.py +++ b/squirrelbattle/game.py @@ -335,14 +335,16 @@ class Game: """ Saves the game to a dictionary. """ - return self.map.save_state() + return dict(map_index=self.map_index, + maps=[m.save_state() for m in self.maps]) def load_state(self, d: dict) -> None: """ Loads the game from a dictionary. """ try: - self.map.load_state(d) + self.map_index = d["map_index"] + self.maps = [Map().load_state(map_dict) for map_dict in d["maps"]] except KeyError: self.message = _("Some keys are missing in your save file.\n" "Your save seems to be corrupt. It got deleted.") @@ -359,6 +361,8 @@ class Game: return self.player = players[0] + self.map.compute_visibility(self.player.y, self.player.x, + self.player.vision) self.display_actions(DisplayActions.UPDATE) def load_game(self) -> None: diff --git a/squirrelbattle/interfaces.py b/squirrelbattle/interfaces.py index fa43c73..19ee25c 100644 --- a/squirrelbattle/interfaces.py +++ b/squirrelbattle/interfaces.py @@ -80,18 +80,18 @@ class Map: currentx: int currenty: int - def __init__(self, width: int, height: int, tiles: list, - start_y: int, start_x: int): + def __init__(self, width: int = 0, height: int = 0, tiles: list = None, + start_y: int = 0, start_x: int = 0): self.floor = 0 self.width = width self.height = height self.start_y = start_y self.start_x = start_x - self.tiles = tiles - self.visibility = [[False for _ in range(len(tiles[0]))] - for _ in range(len(tiles))] + self.tiles = tiles or [] + self.visibility = [[False for _ in range(len(self.tiles[0]))] + for _ in range(len(self.tiles))] self.seen_tiles = [[False for _ in range(len(tiles[0]))] - for _ in range(len(tiles))] + for _ in range(len(self.tiles))] self.entities = [] self.logs = Logs() @@ -338,9 +338,10 @@ class Map: for enti in self.entities: d["entities"].append(enti.save_state()) d["map"] = self.draw_string(TexturePack.ASCII_PACK) + d["seen_tiles"] = self.seen_tiles return d - def load_state(self, d: dict) -> None: + def load_state(self, d: dict) -> "Map": """ Loads the map's attributes from a dictionary. """ @@ -351,11 +352,16 @@ class Map: self.currentx = d["currentx"] self.currenty = d["currenty"] self.tiles = self.load_dungeon_from_string(d["map"]) + self.seen_tiles = d["seen_tiles"] + self.visibility = [[False for _ in range(len(self.tiles[0]))] + for _ in range(len(self.tiles))] self.entities = [] dictclasses = Entity.get_all_entity_classes_in_a_dict() for entisave in d["entities"]: self.add_entity(dictclasses[entisave["type"]](**entisave)) + return self + class Tile(Enum): """