home · contact · privacy
Add field of view.
[plomrogue2] / plomrogue / things.py
index f066ae660f685a0a8ba05503b1c75e6b4eb25de4..ee0d501be22258e69d287da986f8c1bf4d65e978 100644 (file)
@@ -32,6 +32,7 @@ class ThingAnimate(Thing):
         super().__init__(*args, **kwargs)
         self.next_tasks = []
         self.set_task('WAIT')
+        self._fov = None
 
     def set_task(self, task_name, args=()):
         task_class = self.game.tasks[task_name]
@@ -51,6 +52,7 @@ class ThingAnimate(Thing):
             return None
 
     def proceed(self):
+        self._fov = None
         if self.task is None:
             self.task = self.get_next_task()
             return
@@ -67,6 +69,23 @@ class ThingAnimate(Thing):
             self.game.changed = True
             self.task = self.get_next_task()
 
+    @property
+    def fov_stencil(self):
+        if self._fov:
+            return self._fov
+        fov_map_class = self.game.map_geometry.fov_map_class
+        self._fov = fov_map_class(self.game.map, self.position)
+        return self._fov
+
+    def fov_stencil_map(self, map):
+        visible_terrain = ''
+        for i in range(self.fov_stencil.size_i):
+            if self.fov_stencil.terrain[i] == '.':
+                visible_terrain += map.terrain[i]
+            else:
+                visible_terrain += ' '
+        return visible_terrain
+
 
 
 class ThingPlayer(ThingAnimate):
@@ -75,4 +94,3 @@ class ThingPlayer(ThingAnimate):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.nickname = 'undefined'
-