X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=new%2Fplomrogue%2Fgame.py;h=74502cac48bfd8997b019aa7daf30372111d2548;hb=7cf9821ef5b430ac64d5c663ca67b2f1a887d8a4;hp=a2421ad6417b9b195930c947d1eb44c5c0e6eb6f;hpb=aa8d5029e32783fa1a56cedb4c0b8aa8e79885e4;p=plomrogue2-experiments diff --git a/new/plomrogue/game.py b/new/plomrogue/game.py index a2421ad..74502ca 100755 --- a/new/plomrogue/game.py +++ b/new/plomrogue/game.py @@ -8,7 +8,7 @@ from plomrogue.commands import (cmd_GEN_WORLD, cmd_GET_GAMESTATE, cmd_GET_PICKABLE_ITEMS, cmd_MAP_SIZE, cmd_TERRAIN_LINE, cmd_PLAYER_ID, cmd_TURN, cmd_SWITCH_PLAYER, cmd_SAVE) -from plomrogue.mapping import MapGeometryHex, Map, YX +from plomrogue.mapping import MapGeometryHex, MapChunk, YX from plomrogue.parser import Parser from plomrogue.io import GameIO from plomrogue.misc import quote @@ -204,13 +204,17 @@ class Game(GameBase): def new_thing_id(self): if len(self.things) == 0: return 0 + # DANGEROUS – if anywhere we append a thing to the list of lower + # ID than the highest-value ID, this might lead to re-using an + # already active ID. This should not happen anywhere in the + # code, but a break here might be more visible. return self.things[-1].id_ + 1 def get_map(self, map_pos): if not (map_pos in self.maps and self.maps[map_pos].size == self.map_size): - self.maps[map_pos] = Map(self.map_size, - awakeness=self.max_map_awakeness) + self.maps[map_pos] = MapChunk(self.map_size) + self.maps[map_pos].awake = self.max_map_awakeness for pos in self.maps[map_pos]: self.maps[map_pos][pos] = '.' return self.maps[map_pos] @@ -270,6 +274,8 @@ class Game(GameBase): t = self.add_thing_at_random(map_pos, t_type) if average_health: t.health = average_health + #if hasattr(t, 'health'): + # print('DEBUG create', t.type_, t.health) for map_pos in self.maps: m = self.maps[map_pos] @@ -277,6 +283,7 @@ class Game(GameBase): # Newly inside chunks are regenerated from .stats. if not m.awake: + #print('DEBUG regen stats', map_pos, m.stats) regenerate_chunk_from_map_stats(m) # Inside chunks are set to max .awake and don't collect @@ -289,7 +296,9 @@ class Game(GameBase): # inside are disappeared. elif m.awake > 0: m.awake -= 1 - for t in self.things: + # We iterate over a list comprehension of self.things, + # since we might delete elements of self.things. + for t in [t for t in self.things]: if t.position[0] == map_pos: if not t.type_ in m.stats: m.stats[t.type_] = {'population': 0, @@ -298,7 +307,10 @@ class Game(GameBase): if isinstance(t, ThingAnimate): m.stats[t.type_]['health'] += t.health if not m.awake: + # TODO: Handle inventory. del self.things[self.things.index(t)] + #if not m.awake: + # print('DEBUG sleep stats', map_pos, m.stats) while True: player_i = self.things.index(self.player)