home · contact · privacy
Multi-process FOV generation on send_gamestate.
[plomrogue2] / plomrogue / things.py
index a5d38897205282e51fb29ba23333c72fded7b02a..9edfa68ca85871557aeb396075c37ed68475011d 100644 (file)
@@ -329,16 +329,28 @@ class ThingAnimate(Thing):
             self.game.changed = True
             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
+        self._fov = fov_map_class(self.game.things, self.game.maps,
+                                  self.position, fov_radius, self.game.get_map)
+
+    def multiprocessible_fov_stencil(self):
+        self._fov.init_terrain()
+
     @property
     def fov_stencil(self):
         if self._fov:
             return self._fov
-        fov_map_class = self.game.map_geometry.fov_map_class
-        fov_radius = 3 if self.drunk > 0 else 12
-        self._fov = fov_map_class(self.game.things, self.game.maps, self.position,
-                                  fov_radius, self.game.get_map)
+        # due to the pre-multiprocessing in game.send_gamestate,
+        # the following should actually never be called
+        self.prepare_multiprocessible_fov_stencil()
+        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):