in rtfm/dynamics/world.py [0:0]
def resolve_collision(self, position, engine):
objs = self.get_objects_at_pos(position)
if len(objs) > 1:
# there is collision here
monsters, items = [], []
for o in objs:
if isinstance(o, M.BaseMonster):
monsters.append(o)
if isinstance(o, I.BaseItem):
items.append(o)
monsters.sort(key=lambda m: m.speed, reverse=True)
for m in monsters:
if items and m.target_is_portable(items[0]):
m.pickup(items.pop(0), self, engine)
for a, b in combinations(monsters, 2):
if a.is_alive() and b.is_alive() and a.target_is_attackable(b):
a.attack(b, self, engine)
if a.is_alive() and b.is_alive() and b.target_is_attackable(a):
b.attack(a, self, engine)