X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=plomrogue%2Fthings.py;h=18cdf4c78069e9273e411c38223f4baae080a38f;hb=3484a01e592bafc9d573b878ff94ef5e64755476;hp=53837e36194b9479454500381153e67cff8f5248;hpb=88c8acab582aeb25735d86b78defe28441439cba;p=plomrogue2 diff --git a/plomrogue/things.py b/plomrogue/things.py index 53837e3..18cdf4c 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 @@ -182,6 +180,7 @@ class Thing_HatRemixer(Thing): new_design += random.choice(list(legal_chars)) hat.design = new_design self.sound('HAT REMIXER', 'remixing a hat …') + self.game.changed = True @@ -254,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 @@ -299,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!' @@ -326,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] @@ -344,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.invalidate_map_view() break self.game.changed = True - self._fov = None if self.task is None: self.task = self.get_next_task() return @@ -392,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] == '.': @@ -403,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):