PutableAction.py 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from synergine.synergy.event.exception.ActionAborted import ActionAborted
  2. from intelligine.synergy.event.move.MoveAction import MoveAction
  3. from intelligine.synergy.object.Food import Food
  4. from synergine.synergy.event.Action import Action
  5. from intelligine.synergy.event.transport.PutableEvent import PutableEvent
  6. from intelligine.cst import CANT_CARRY_STILL, BRAIN_PART_PUT
  7. class PutableAction(Action):
  8. _listen = PutableEvent
  9. _depend = [MoveAction]
  10. def run(self, obj, context, synergy_manager):
  11. obj_transported = obj.get_carried()
  12. if not self._parameters[PutableEvent.PARAM_PUT_TO]:
  13. if self._parameters[PutableEvent.PARAM_HOME_FAIL]:
  14. obj.increment_put_fail_count()
  15. raise ActionAborted()
  16. for position_to_put in self._parameters[PutableEvent.PARAM_PUT_TO]:
  17. #  TODO: re controle de si posable ? La position a été calculé
  18. # dans le process. Ce qui fait que la situation peut avoir changer.
  19. # Soit: Recalculer d'office BrainPut.cant_put_at.. Soit le recalculer que si le hash
  20. # de ce qu'il y a la a changer ?
  21. obj_transported.set_carried_by(None)
  22. obj.put_carry(obj_transported, position_to_put)
  23. context.metas.value.set(CANT_CARRY_STILL, obj.get_id(), 5)
  24. obj.reinit_put_fail_count()
  25. obj.get_brain().get_part(BRAIN_PART_PUT).done(obj_transported)
  26. # TODO: DEV
  27. if isinstance(obj_transported, Food):
  28. #obj_transported.set_position((-1, 0, 0))
  29. obj_transported.transform_to_stocked()