X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/day?a=blobdiff_plain;f=plomrogue%2Fthings.py;h=23f66ad4a5bb25b5fe297554992116a338879556;hb=54d8db95b3bb690b712ec09179922829d0c68a54;hp=32d7854732029bd0fc2ef2946dae9ecaebf006d7;hpb=4d2cf315344ec4a376ffb3f49f02674e4b5facb6;p=plomrogue2 diff --git a/plomrogue/things.py b/plomrogue/things.py index 32d7854..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 @@ -167,7 +168,7 @@ class Thing_BottleSpawner(ThingSpawner): class Thing_Hat(Thing): symbol_hint = 'H' portable = True - design = ' X X ===' + design = ' +--+ ' + ' | | ' + '======' @@ -178,10 +179,11 @@ class Thing_HatRemixer(Thing): import string new_design = '' legal_chars = string.ascii_letters + string.digits + string.punctuation + ' ' - for i in range(9): + for i in range(18): new_design += random.choice(list(legal_chars)) hat.design = new_design self.sound('HAT REMIXER', 'remixing a hat …') + self.game.changed = True @@ -254,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 @@ -308,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 @@ -326,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] @@ -344,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 @@ -392,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] == '.': @@ -403,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):