NearAttackableEvent.py 995B

123456789101112131415161718192021222324
  1. from synergine.core.exceptions import NotConcernedEvent
  2. from intelligine.synergy.event.src.NearEvent import NearEvent
  3. from xyzworld.mechanism.ArroundMechanism import ArroundMechanism
  4. from intelligine.cst import ATTACKABLE, COLONY, COL_FIGHTER
  5. class NearAttackableEvent(NearEvent):
  6. concern = COL_FIGHTER
  7. _near_name = 'objects_ids_attackable'
  8. _near_map = lambda self, near_object_id, context: context.metas.states.have(near_object_id, ATTACKABLE)
  9. def __init__(self, actions):
  10. super().__init__(actions)
  11. self._mechanism = ArroundMechanism
  12. def _prepare(self, object_id, context, parameters={}):
  13. obj_colony_id = context.metas.value.get(COLONY, object_id)
  14. filter = lambda near_object_id, context: obj_colony_id != context.metas.value.get(COLONY, near_object_id)
  15. self.map(context, parameters, stop_at_first=True, filter=filter)
  16. if self._near_name not in parameters:
  17. raise NotConcernedEvent()
  18. return parameters