move.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # coding: utf-8
  2. import typing
  3. from synergine2_cocos2d.interaction import BaseActorInteraction
  4. from opencombat.user_action import UserAction
  5. from synergine2.simulation import SimulationBehaviour
  6. from synergine2_cocos2d.actor import Actor
  7. from synergine2_cocos2d.gl import draw_line
  8. from synergine2_xyz.move.simulation import RequestMoveBehaviour
  9. class BaseMoveActorInteraction(BaseActorInteraction):
  10. gui_action = None
  11. color = None
  12. request_move_behaviour_class = RequestMoveBehaviour
  13. def draw_pending(self) -> None:
  14. for actor in self.layer_manager.edit_layer.selection:
  15. grid_position = self.layer_manager\
  16. .grid_manager\
  17. .get_grid_position(actor.position)
  18. pixel_position = self.layer_manager\
  19. .grid_manager\
  20. .get_world_position_of_grid_position(grid_position)
  21. draw_line(
  22. self.layer_manager.scrolling_manager.world_to_screen(*pixel_position),
  23. self.layer_manager.edit_layer.screen_mouse,
  24. self.color,
  25. )
  26. def get_behaviour(
  27. self,
  28. actor: Actor,
  29. mouse_grid_position,
  30. ) -> typing.Tuple[typing.Type[SimulationBehaviour], dict]:
  31. return self.request_move_behaviour_class, {
  32. 'subject_id': actor.subject.id,
  33. 'move_to': mouse_grid_position,
  34. 'gui_action': self.gui_action,
  35. }
  36. class MoveActorInteraction(BaseMoveActorInteraction):
  37. gui_action = UserAction.ORDER_MOVE
  38. color = (0, 0, 255)
  39. class MoveFastActorInteraction(BaseMoveActorInteraction):
  40. gui_action = UserAction.ORDER_MOVE_FAST
  41. color = (72, 244, 66)
  42. class MoveCrawlActorInteraction(BaseMoveActorInteraction):
  43. gui_action = UserAction.ORDER_MOVE_CRAWL
  44. color = (235, 244, 66)