class ThingBase:
type_ = '?'
- def __init__(self, world, id_, position=[0,0]):
+ def __init__(self, world, id_=None, position=(0,0)):
self.world = world
- self.id_ = id_
self.position = position
+ if id_ is None:
+ self.id_ = self.world.new_thing_id()
+ else:
+ self.id_ = id_
class Thing(ThingBase):
+ blocking = False
+ in_inventory = False
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.inventory = []
+
+ def proceed(self):
+ pass
+
+
+
+class ThingItem(Thing):
+ type_ = 'item'
+
+
+
+class ThingAnimate(Thing):
+ blocking = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
neighbors = dijkstra_map.get_neighbors(tuple(self.position))
n = n_max
target_direction = None
- for direction in neighbors:
+ for direction in sorted(neighbors.keys()):
yx = neighbors[direction]
if yx is not None:
n_new = dijkstra_map[yx]
stencil = self.get_stencil()
visible_things = []
for thing in self.world.things:
- if stencil[thing.position] == '.':
+ if (not thing.in_inventory) and stencil[thing.position] == '.':
visible_things += [thing]
return visible_things
+ def get_pickable_items(self):
+ pickable_ids = []
+ for t in [t for t in self.get_visible_things() if
+ isinstance(t, ThingItem) and
+ (t.position == self.position or
+ t.position in
+ self.world.map_.get_neighbors(self.position).values())]:
+ pickable_ids += [t.id_]
+ return pickable_ids
+
-class ThingHuman(Thing):
+class ThingHuman(ThingAnimate):
type_ = 'human'
-class ThingMonster(Thing):
+class ThingMonster(ThingAnimate):
type_ = 'monster'