Save floors and visibility, fixes #61
This commit is contained in:
parent
073e3d3740
commit
f48377e055
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue