X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;f=plomrogue%2Fthings.py;h=e1a9bd3a2d18b0d8b1b64943b6f055dfd11508e6;hb=856b68988876a63409737dac77b4d4921b9a466b;hp=116ad696338ffea4fae46fc579426f8e6489048f;hpb=04230c463dc78b92adfe0f1a432117e349aa771e;p=plomrogue2 diff --git a/plomrogue/things.py b/plomrogue/things.py index 116ad69..e1a9bd3 100644 --- a/plomrogue/things.py +++ b/plomrogue/things.py @@ -96,9 +96,7 @@ class ThingSpawner(Thing): for t in [t for t in self.game.things if t != self and t.position == self.position]: return - t = self.game.thing_types[self.child_type](self.game, - position=self.position) - self.game.things += [t] + self.game.add_thing(self.child_type, self.position) self.game.changed = True @@ -255,6 +253,7 @@ class Thing_MusicPlayer(Thing): self.playlist_index -= 1 if self.playlist_index < -1: self.playlist_index = -1 + self.game.changed = True return ['removed song'] elif command == 'REWIND': self.playlist_index = -1 @@ -300,8 +299,7 @@ class Thing_BottleDeposit(Thing): if self.bottle_counter >= 3: self.bottle_counter = 0 choice = random.choice(['MusicPlayer', 'Hat']) - t = self.game.thing_types[choice](self.game, position=self.position) - self.game.things += [t] + self.game.add_thing(choice, self.position) msg = 'here is a gift as a reward for ecological consciousness –' if choice == 'MusicPlayer': msg += 'pick it up and then use "command thing" on it!' @@ -327,7 +325,12 @@ class ThingAnimate(Thing): super().__init__(*args, **kwargs) self.next_task = [None] self.task = None + self.invalidate_map_view() + + def invalidate_map_view(self): self._fov = None + self._visible_terrain = None + self._visible_control = None def set_next_task(self, task_name, args=()): task_class = self.game.tasks[task_name] @@ -345,11 +348,12 @@ class ThingAnimate(Thing): if self.drunk == 0: for c_id in self.game.sessions: if self.game.sessions[c_id]['thing_id'] == self.id_: + # TODO: refactor with self.send_msg self.game.io.send('DEFAULT_COLORS', c_id) self.game.io.send('CHAT "You sober up."', c_id) + self.game.changed_fovs = True break self.game.changed = True - self._fov = None if self.task is None: self.task = self.get_next_task() return @@ -393,7 +397,7 @@ class ThingAnimate(Thing): return True return False - def fov_stencil_map(self, map_type='normal'): + def fov_stencil_map(self, map_type): visible_terrain = '' for yx in self.fov_stencil: if self.fov_stencil[yx] == '.': @@ -404,6 +408,20 @@ class ThingAnimate(Thing): visible_terrain += ' ' return visible_terrain + @property + def visible_terrain(self): + if self._visible_terrain: + return self._visible_terrain + self._visible_terrain = self.fov_stencil_map('normal') + return self._visible_terrain + + @property + def visible_control(self): + if self._visible_control: + return self._visible_control + self._visible_control = self.fov_stencil_map('control') + return self._visible_control + class Thing_Player(ThingAnimate):