X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=new%2Fplomrogue%2Fthings.py;h=f4cc2aeeae689d788223d648407bb9c2215985d0;hb=073618f45f297b21e90390be06cafcd430cd4d62;hp=a631b174f9292dde5ab047b98836bd2820939137;hpb=65e83c99b95a619afc79e8984e6f5027bc7aac1b;p=plomrogue2-experiments diff --git a/new/plomrogue/things.py b/new/plomrogue/things.py index a631b17..f4cc2ae 100644 --- a/new/plomrogue/things.py +++ b/new/plomrogue/things.py @@ -29,7 +29,12 @@ class Thing(ThingBase): class ThingItem(Thing): - type_ = 'item' + pass + + + +class ThingFood(ThingItem): + type_ = 'food' @@ -94,18 +99,27 @@ class ThingAnimate(Thing): self.task.check() # will throw GameError if necessary def proceed(self, is_AI=True): - """Further the thing in its tasks. - - Decrements .task.todo; if it thus falls to <= 0, enacts method - whose name is 'task_' + self.task.name and sets .task = - None. If is_AI, calls .decide_task to decide a self.task. + """Further the thing in its tasks, decrease its health. - Before doing anything, ensures an empty map visibility stencil - and checks that task is still possible, and aborts it + First, ensures an empty map, decrements .health and kills + thing if crossing zero (removes from self.world.things for AI + thing, or unsets self.world.player_is_alive for player thing); + then checks that self.task is still possible and aborts if otherwise (for AI things, decides a new task). + Then decrements .task.todo; if it thus falls to <= 0, enacts + method whose name is 'task_' + self.task.name and sets .task = + None. If is_AI, calls .decide_task to decide a self.task. + """ self._stencil = None + self.health -= 1 + if self.health <= 0: + if self is self.world.player: + self.world.player_is_alive = False + else: + del self.world.things[self.world.things.index(self)] + return try: self.task.check() except GameError as e: @@ -149,12 +163,24 @@ class ThingAnimate(Thing): visible_things += [thing] return visible_things + def get_pickable_items(self): + pickable_ids = [] + for t in [t for t in self.get_visible_things() if + isinstance(t, ThingItem) and + (t.position == self.position or + t.position in + self.world.map_.get_neighbors(self.position).values())]: + pickable_ids += [t.id_] + return pickable_ids + class ThingHuman(ThingAnimate): type_ = 'human' + health = 100 class ThingMonster(ThingAnimate): type_ = 'monster' + health = 50