+ @property
+ def visible_terrain(self):
+ if self._visible_terrain:
+ return self._visible_terrain
+ self._visible_terrain = self.fov_stencil_map('normal')
+ return self._visible_terrain
+
+ @property
+ def visible_control(self):
+ if self._visible_control:
+ return self._visible_control
+ self._visible_control = self.fov_stencil_map('control')
+ return self._visible_control
+
+ @property
+ def seen_things(self):
+ if self._seen_things is not None:
+ return self._seen_things
+ self._seen_things = [t for t in self.game.things
+ if self.fov_test(*t.position)]
+ return self._seen_things
+
+ @property
+ def seen_annotation_positions(self):
+ if self._seen_annotation_positions is not None:
+ return self._seen_annotation_positions
+ self._seen_annotation_positions = []
+ for big_yx in self.game.annotations:
+ for little_yx in [little_yx for little_yx
+ in self.game.annotations[big_yx]
+ if self.fov_test(big_yx, little_yx)]:
+ self._seen_annotation_positions += [(big_yx, little_yx)]
+ return self._seen_annotation_positions
+
+ @property
+ def seen_portal_positions(self):
+ if self._seen_portal_positions is not None:
+ return self._seen_portal_positions
+ self._seen_portal_positions = []
+ for big_yx in self.game.portals:
+ for little_yx in [little_yx for little_yx
+ in self.game.portals[big_yx]
+ if self.fov_test(big_yx, little_yx)]:
+ self._seen_portal_positions += [(big_yx, little_yx)]
+ return self._seen_portal_positions
+