TakeableAction.py 1.6KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from intelligine.synergy.event.move.MoveAction import MoveAction
  2. from synergine.synergy.event.Action import Action
  3. from intelligine.synergy.event.transport.TakeableEvent import TakeableEvent
  4. from intelligine.cst import CANT_PUT_STILL, BRAIN_SCHEMA, BRAIN_PART_TAKE
  5. from synergine.synergy.event.exception.ActionAborted import ActionAborted
  6. class TakeableAction(Action):
  7. """
  8. TODO: Prendre le premier prenable, interrompre la recherche si trouve
  9. si au run de l'action objet non prenable, tant pis. ActionAborted.
  10. """
  11. _listen = TakeableEvent
  12. _depend = [MoveAction]
  13. def __init__(self, object_id, parameters):
  14. super().__init__(object_id, parameters)
  15. def prepare(self, context):
  16. # TODO: C l'event qui doit preparer les donnees
  17. pass
  18. def run(self, obj, context, synergy_manager):
  19. obj_id_transportable = self._parameters[TakeableEvent.PARAM_TAKE]
  20. obj_transportable = synergy_manager.get_map().get_object(obj_id_transportable)
  21. if obj_transportable.is_carried(): # TODO: is_takable
  22. raise ActionAborted()
  23. try:
  24. obj_carried = obj_transportable.get_what_carry()
  25. obj_carried.set_carried_by(obj)
  26. obj.carry(obj_carried)
  27. context.metas.value.set(CANT_PUT_STILL, obj.get_id(), 5)
  28. obj.get_brain().get_part(BRAIN_PART_TAKE).done(obj, obj_carried, context)
  29. except ValueError: # Une NotCarriableError serais pus approprie
  30. # TODO: tmp? Si on as pas pu le porter c'est qu'il vient d'etre porte par une autre.
  31. pass