X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=new%2Fplomrogue%2Fgame.py;h=7275ce944ee7a7563d015b0b2adeb7c3ed6776b5;hb=f01848a97bb686e2b9c823cdf7fc6b59072dbd79;hp=d20713cd61fa219d387808ef3c2e9bdbd8ac4fff;hpb=8f2dc382612c0684fd9a75e60c23561a1859cb8f;p=plomrogue2-experiments diff --git a/new/plomrogue/game.py b/new/plomrogue/game.py index d20713c..7275ce9 100755 --- a/new/plomrogue/game.py +++ b/new/plomrogue/game.py @@ -41,7 +41,9 @@ class GameBase: self.turn = 0 self.things = [] - def get_thing(self, id_, create_unfound=True): + def get_thing(self, id_, create_unfound): + # No default for create_unfound because every call to get_thing + # should be accompanied by serious consideration whether to use it. for thing in self.things: if id_ == thing.id_: return thing @@ -133,7 +135,7 @@ class Game(GameBase): else: self.io.send('PLAYER_INVENTORY ,') for id_ in self.player.inventory: - thing = self.get_thing(id_) + thing = self.get_thing(id_, create_unfound=False) send_thing(thing) self.io.send('GAME_STATE_COMPLETE') @@ -173,7 +175,7 @@ class Game(GameBase): def task_prefixed(command_name, task_prefix, task_command, argtypes_prefix=None): - if command_name[:len(task_prefix)] == task_prefix: + if command_name.startswith(task_prefix): task_name = command_name[len(task_prefix):] if task_name in self.tasks: f = partial_with_attrs(task_command, task_name, self) @@ -199,11 +201,17 @@ class Game(GameBase): @property def player(self): - return self.get_thing(self.player_id) + return self.get_thing(self.player_id, create_unfound=False) 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 condition /should/ not be fulfilled + # anywhere in the code, but if it does, trouble here is one of + # the more obvious indicators that it does – that's why there's + # no safeguard here against this. return self.things[-1].id_ + 1 def get_map(self, map_pos): @@ -292,7 +300,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, @@ -301,6 +311,7 @@ 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)