else:
self.id_ = id_
+ @property
+ def position(self):
+ return self._position
+
+ def _position_set(self, pos):
+ """Set self._position to pos.
+
+ We use this setter as core to the @position.setter property
+ method due to property setter subclassing not yet working
+ properly, see <https://bugs.python.org/issue14965>. We will
+ therefore super() _position_set instead of @position.setter in
+ subclasses.
+
+ """
+ self._position = pos
+
+ @position.setter
+ def position(self, pos):
+ self._position_set(pos)
+
class Thing(ThingBase):
in_inventory = False
def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
self.inventory = []
+ super().__init__(*args, **kwargs)
def proceed(self):
pass
+ def _position_set(self, pos):
+ super()._position_set(pos)
+ for t_id in self.inventory:
+ t = self.world.get_thing(t_id)
+ t.position = self.position
+
class ThingItem(Thing):
return target_direction
def hunt_player(self):
- visible_things, offset = self.get_visible_things()
+ visible_things = self.get_visible_things()
+ offset = self.get_surroundings_offset()
target = None
for t in visible_things:
if t.type_ == 'human':
if t.type_ == 'food':
self.set_task('PICKUP', (id_,))
return True
- visible_things, offset = self.get_visible_things()
+ visible_things = self.get_visible_things()
+ offset = self.get_surroundings_offset()
food_targets = []
for t in visible_things:
if t.type_ == 'food':
self._surrounding_map = self.world.game.\
map_type(size=(self._radius*2+1+int(add_line),
self._radius*2+1))
- size = self.world.maps[(0,0)].size
+ size = self.world.map_size
offset = self.get_surroundings_offset()
for pos in self._surrounding_map:
big_y, small_y = pan_and_scan(size[0], pos[0], offset[0])
stencil = self.get_stencil()
offset = self.get_surroundings_offset()
visible_things = []
- size = self.world.maps[(0,0)].size
+ size = self.world.map_size
fov_size = self.get_surrounding_map().size
for thing in self.world.things:
big_pos = thing.position[0]
small_pos = thing.position[1]
pos_y = calc_pos_in_fov(big_pos[0], small_pos[0], offset[0], size[0])
pos_x = calc_pos_in_fov(big_pos[1], small_pos[1], offset[1], size[1])
- if pos_y < 0 or pos_x < 0 or pos_y >= fov_size[0] or pos_x >= fov_size[1]:
+ if pos_y < 0 or pos_x < 0 or\
+ pos_y >= fov_size[0] or pos_x >= fov_size[1]:
continue
if (not thing.in_inventory) and stencil[(pos_y, pos_x)] == '.':
visible_things += [thing]
- return visible_things, offset
+ return visible_things
def get_pickable_items(self):
pickable_ids = []
- visible_things, _ = self.get_visible_things()
+ visible_things = self.get_visible_things()
for t in [t for t in visible_things if
isinstance(t, ThingItem) and
(t.position == self.position or