+ @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.maps, self.position, 12,
+ self.game.get_map)
+ return self._fov
+
+ 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):
+ if self.fov_stencil[test_position] == '.':
+ return True
+ return False
+
+ def fov_stencil_map(self, map_type='normal'):
+ visible_terrain = ''
+ for yx in self.fov_stencil:
+ if self.fov_stencil[yx] == '.':
+ big_yx, little_yx = self.fov_stencil.source_yxyx(yx)
+ map_ = self.game.get_map(big_yx, map_type)
+ visible_terrain += map_[little_yx]
+ else:
+ visible_terrain += ' '
+ return visible_terrain
+
+
+
+class Thing_Player(ThingAnimate):
+ symbol_hint = '@'