def resolve_collision()

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)