TakeableAction.py 1.3KB

1234567891011121314151617181920212223242526272829303132
  1. from synergine.synergy.event.Action import Action
  2. from intelligine.synergy.event.transport.TakeableEvent import TakeableEvent
  3. from intelligine.cst import CANT_PUT_STILL
  4. from synergine.synergy.event.exception.ActionAborted import ActionAborted
  5. class TakeableAction(Action):
  6. _listen = TakeableEvent
  7. def __init__(self, object_id, parameters):
  8. super().__init__(object_id, parameters)
  9. def prepare(self, context):
  10. pass
  11. def run(self, obj, collection, context, synergy_manager):
  12. # TODO: TEST
  13. # TODO: Enlever le state de transportable a ce qui est transporte
  14. # ?! Comment gerer lorsque deux obj vont vouloir transporter le meme objet ? process !
  15. obj_id_transportable = self._parameters['objects_ids_transportable'][0]
  16. obj_transportable = synergy_manager.get_map().get_object(obj_id_transportable)
  17. if obj_transportable.is_carried():
  18. raise ActionAborted()
  19. try:
  20. obj_transportable.set_carried_by(obj)
  21. obj.carry(obj_transportable)
  22. context.metas.value.set(CANT_PUT_STILL, obj.get_id(), 5)
  23. except ValueError: # Une NotCarriableError serais pus approprie
  24. # TODO: tmp? Si on as pas pu le porter c'est qu'il vient d'etre porte par une autre.
  25. pass