home · contact · privacy
Add door keys and door locking.
[plomrogue2] / plomrogue / things.py
index 950a777f0bc951defb35f0f32cefe912f1008e25..3686ab0c2a2b78f41e024a5f9c8ef14958fc285d 100644 (file)
@@ -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()]
@@ -126,8 +127,8 @@ class ThingSpawner(Thing):
     def proceed(self):
         for t in [t for t in self.game.things
                   if t != self and t.position == self.position]:
-            return
-        self.game.add_thing(self.child_type, self.position)
+            return None
+        return self.game.add_thing(self.child_type, self.position)
 
 
 
@@ -163,16 +164,31 @@ class ThingInstallable(Thing):
 class Thing_DoorSpawner(ThingSpawner):
     child_type = 'Door'
 
+    def proceed(self):
+        door = super().proceed()
+        if door:
+            key = self.game.add_thing('DoorKey', self.position)
+            key.door = door
+
+
+
+class Thing_DoorKey(Thing):
+    portable = True
+    symbol_hint = 'k'
+
+
 
 
 class Thing_Door(ThingInstallable):
     symbol_hint = 'D'
     blocks_movement = False
+    locked = False
 
     def open(self):
         self.blocks_movement = False
         self.blocks_light = False
         self.blocks_sound = False
+        self.locked = False
         del self.thing_char
 
     def close(self):
@@ -181,6 +197,10 @@ class Thing_Door(ThingInstallable):
         self.blocks_sound = True
         self.thing_char = '#'
 
+    def lock(self):
+        self.locked = True
+        self.thing_char = 'L'
+
 
 
 class Thing_Psychedelic(Thing):
@@ -432,7 +452,6 @@ class Thing_CookieSpawner(Thing):
 
 
 class ThingAnimate(Thing):
-    blocks_movement = True
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -625,6 +644,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)