home · contact · privacy
Fix bug of server not sending map data to player due to sound processing.
[plomrogue2] / plomrogue / things.py
index a677f5015c6e08f15a7ed3e1a7bfb6708c98b548..a3d622a0d1f73a99be1ea29dbb95370ac1c6fe4a 100644 (file)
@@ -92,7 +92,17 @@ class Thing(ThingBase):
             lowered_nick = lower_msg_by_volume(name, volume,
                                                largest_audible_distance)
             symbol = ''
-            if listener.fov_test(self.position[0], self.position[1]):
+            # if listener.fov_test(self.position[0], self.position[1]):
+            # TODO: We might want to only show chat faces of players that are
+            # in the listener's FOV.  However, if we do a fov_test here,
+            # this might set up a listener._fov where previously there was None,
+            # with ._fov = None serving to Game.send_gamestate() as an indicator
+            # that map view data for listener might be subject to change and
+            # therefore needs to be re-sent.  If we generate an un-set ._fov
+            # here, this inhibits send_gamestate() from sending new map view
+            # data to listener.  We need to re-structure this whole process
+            # if we want to use a FOV test on listener here.
+            if listener_distance < largest_audible_distance / 2:
                 self.game.io.send('CHATFACE %s' % self.id_, c_id)
                 if self.type_ == 'Player' and hasattr(self, 'thing_char'):
                     symbol = '/@' + self.thing_char
@@ -490,9 +500,6 @@ class ThingAnimate(Thing):
         self.multiprocessible_fov_stencil()
         return self._fov
 
-    def fov_stencil_make(self):
-        self._fov.make()
-
     def fov_test(self, big_yx, little_yx):
         test_position = self.fov_stencil.target_yx(big_yx, little_yx)
         if self.fov_stencil.inside(test_position):
@@ -564,7 +571,7 @@ class Thing_Player(ThingAnimate):
     drunk = 0
     tripping = 0
     need_for_toilet = 0
-    last_pee_need_test = datetime.datetime.now()
+    standing = True
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
@@ -577,18 +584,18 @@ class Thing_Player(ThingAnimate):
         if self.tripping >= 0:
             self.tripping -= 1
         if self.need_for_toilet > 0:
-            self.need_for_toilet *= 1.0001
+            self.need_for_toilet += 1
             terrain = self.game.maps[self.position[0]][self.position[1]]
             if terrain in self.game.terrains:
                 terrain_type = self.game.terrains[terrain]
                 if 'toilet' in terrain_type.tags:
                     self.send_msg('CHAT "You use the toilet. What a relief!"')
                     self.need_for_toilet = 0
-            if self.last_pee_need_test + datetime.timedelta(seconds=1) <\
-               datetime.datetime.now() and\
-               10000 * random.random() < self.need_for_toilet / 100000:
-                self.send_msg('CHAT "You need to use a toilet."')
-                self.last_pee_need_test = datetime.datetime.now()
+            if 10000 * random.random() < self.need_for_toilet / 100000:
+                self.send_msg('CHAT "You need to go to a toilet."')
+            if self.need_for_toilet > 1000000:
+                self.send_msg('CHAT "You pee into your pants. Eww!"')
+                self.need_for_toilet = 0
         if self.drunk == 0:
             self.send_msg('CHAT "You sober up."')
             self.invalidate('fov')