home · contact · privacy
Return cookie chars sorted.
[plomrogue2] / plomrogue / things.py
index a3d622a0d1f73a99be1ea29dbb95370ac1c6fe4a..4cc3512cf82cc952f85e80ae9c35d00cd04538c5 100644 (file)
@@ -1,5 +1,5 @@
 from plomrogue.errors import GameError, PlayError
-from plomrogue.mapping import YX
+from plomrogue.mapping import YX, FovMap
 from plomrogue.misc import quote
 import random
 
@@ -70,10 +70,11 @@ class Thing(ThingBase):
 
         largest_audible_distance = 20
         obstacles = [t.position for t in self.game.things if t.blocks_sound]
+        targets = [t.position for t in self.game.things if t.type_ == 'Player']
         sound_blockers = self.game.get_sound_blockers()
-        dijkstra_map = DijkstraMap(sound_blockers, obstacles, self.game.maps,
-                                   self.position, largest_audible_distance,
-                                   self.game.get_map)
+        dijkstra_map = DijkstraMap(targets, sound_blockers, obstacles,
+                                   self.game.maps, self.position,
+                                   largest_audible_distance, self.game.get_map)
         url_limits = []
         for m in re.finditer('https?://[^\s]+', msg):
             url_limits += [m.start(), m.end()]
@@ -210,12 +211,11 @@ class Thing_Bottle(Thing):
         all_players = [t for t in self.game.things if t.type_ == 'Player']
         # TODO: refactor with ThingPlayer.prepare_multiprocessible_fov_stencil
         # and ThingPlayer.fov_test
-        fov_map_class = self.game.map_geometry.fov_map_class
         fov_radius = 12
         light_blockers = self.game.get_light_blockers()
         obstacles = [t.position for t in self.game.things if t.blocks_light]
-        fov = fov_map_class(light_blockers, obstacles, self.game.maps,
-                            self.position, fov_radius, self.game.get_map)
+        fov = FovMap(light_blockers, obstacles, self.game.maps,
+                     self.position, fov_radius, self.game.get_map)
         fov.init_terrain()
         visible_players = []
         for p in all_players:
@@ -480,12 +480,11 @@ class ThingAnimate(Thing):
             self.task = self.get_next_task()
 
     def prepare_multiprocessible_fov_stencil(self):
-        fov_map_class = self.game.map_geometry.fov_map_class
         fov_radius = 3 if self.drunk > 0 else 12
         light_blockers = self.game.get_light_blockers()
         obstacles = [t.position for t in self.game.things if t.blocks_light]
-        self._fov = fov_map_class(light_blockers, obstacles, self.game.maps,
-                                  self.position, fov_radius, self.game.get_map)
+        self._fov = FovMap(light_blockers, obstacles, self.game.maps,
+                           self.position, fov_radius, self.game.get_map)
 
     def multiprocessible_fov_stencil(self):
         self._fov.init_terrain()
@@ -627,6 +626,9 @@ class Thing_Player(ThingAnimate):
             self.game.players_hat_chars[self.name] += c
 
     def get_cookie_chars(self):
+        chars = ' #'  # default
         if self.name in self.game.players_hat_chars:
-            return self.game.players_hat_chars[self.name]
-        return ' #'  # default
+            chars = self.game.players_hat_chars[self.name]
+        chars_split = list(chars)
+        chars_split.sort()
+        return ''.join(chars_split)