X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/copy_structured?a=blobdiff_plain;f=plomrogue%2Fthings.py;h=2146c1a222f48a78b4e3abe9187e09aa86909ba2;hb=0329d62bfc40ef8d54d9df8f5d9119515a871cf6;hp=98dff00dbb40868e2af8d2beb35e85fdfda2d23c;hpb=170cd49bfc99569f4bf004ec48ff60a04786d918;p=plomrogue2 diff --git a/plomrogue/things.py b/plomrogue/things.py index 98dff00..2146c1a 100644 --- a/plomrogue/things.py +++ b/plomrogue/things.py @@ -43,21 +43,73 @@ class Thing_Item(Thing): -class Thing_ItemSpawner(Thing): +class ThingSpawner(Thing): symbol_hint = 'S' def proceed(self): for t in [t for t in self.game.things if t != self and t.position == self.position]: return - t = self.game.thing_types['Item'](self.game, position=self.position) + t = self.game.thing_types[self.child_type](self.game, + position=self.position) self.game.things += [t] self.game.changed = True +class Thing_ItemSpawner(ThingSpawner): + child_type = 'Item' + + + +class Thing_SpawnPointSpawner(ThingSpawner): + child_type = 'SpawnPoint' + + + +class Thing_SpawnPoint(Thing): + symbol_hint = 's' + portable = True + name = 'username' + + + +class Thing_DoorSpawner(ThingSpawner): + child_type = 'Door' + + + +class Thing_Door(Thing): + symbol_hint = 'D' + blocking = False + portable = True + + def open(self): + self.blocking = False + self.portable = True + del self.thing_char + + def close(self): + self.blocking = True + self.portable = False + self.thing_char = '#' + + + +class Thing_Consumable(Thing): + symbol_hint = 'B' + portable = True + + + +class Thing_ConsumableSpawner(ThingSpawner): + child_type = 'Consumable' + + + class ThingAnimate(Thing): blocking = True + drunk = 0 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -83,11 +135,17 @@ class ThingAnimate(Thing): return None def proceed(self): + self.drunk -= 1 + if self.drunk == 0: + for c_id in self.game.sessions: + if self.game.sessions[c_id]['thing_id'] == self.id_: + self.game.io.send('DEFAULT_COLORS', c_id) + self.game.io.send('CHAT "You sober up."', c_id) + self.game.changed = True self._fov = None if self.task is None: self.task = self.get_next_task() return - try: self.task.check() except GameError as e: @@ -104,8 +162,8 @@ class ThingAnimate(Thing): if self._fov: return self._fov fov_map_class = self.game.map_geometry.fov_map_class - self._fov = fov_map_class(self.game.maps, self.position, 12, - self.game.get_map) + self._fov = fov_map_class(self.game.things, self.game.maps, self.position, + 12, self.game.get_map) return self._fov def fov_test(self, big_yx, little_yx):