X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=plomrogue%2Fthings.py;h=23f66ad4a5bb25b5fe297554992116a338879556;hb=54d8db95b3bb690b712ec09179922829d0c68a54;hp=116ad696338ffea4fae46fc579426f8e6489048f;hpb=22d0a54ba1131600ad5cab77318cc51896c951f0;p=plomrogue2 diff --git a/plomrogue/things.py b/plomrogue/things.py index 116ad69..23f66ad 100644 --- a/plomrogue/things.py +++ b/plomrogue/things.py @@ -100,6 +100,7 @@ class ThingSpawner(Thing): position=self.position) self.game.things += [t] self.game.changed = True + self.game.changed_fovs = True @@ -255,6 +256,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 @@ -309,6 +311,7 @@ class Thing_BottleDeposit(Thing): msg += 'pick it up and then use "(un-)wear" on it!' self.sound('BOTTLE DEPOSITOR', msg) self.game.changed = True + self.game.changed_fovs = True def accept(self): self.bottle_counter += 1 @@ -327,7 +330,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 +353,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 +402,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 +413,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):