class ThingBase:
type_ = '?'
- def __init__(self, game, id_=None, position=(YX(0,0))):
+ def __init__(self, game, id_=0, position=(YX(0, 0), YX(0, 0))):
self.game = game
- if id_ is None:
+ if id_ == 0:
self.id_ = self.game.new_thing_id()
else:
self.id_ = id_
class Thing(ThingBase):
+ blocking = False
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def proceed(self):
pass
+ @property
+ def type_(self):
+ return self.__class__.get_type()
+
+ @classmethod
+ def get_type(cls):
+ return cls.__name__[len('Thing_'):]
+
+
+
+class Thing_Item(Thing):
+ symbol_hint = 'i'
+
class ThingAnimate(Thing):
+ blocking = True
def __init__(self, *args, **kwargs):
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]
return None
def proceed(self):
+ self._fov = None
if self.task is None:
self.task = self.get_next_task()
return
self.task.check()
except GameError as e:
self.task = None
- raise GameError
- return
+ raise e
self.task.todo -= 1
if self.task.todo <= 0:
self._last_task_result = self.task.do()
self.game.changed = True
self.task = self.get_next_task()
-
-
-class ThingPlayer(ThingAnimate):
- type_ = 'player'
+ @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 = '@'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.nickname = 'undefined'
-
+ self.carrying = None