move.py 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # coding: utf-8
  2. from sandbox.tile.user_action import UserAction
  3. from synergine2.terminals import TerminalPackage
  4. from synergine2_cocos2d.gl import draw_line
  5. from synergine2_cocos2d.interaction import Interaction
  6. from synergine2_xyz.move.simulation import RequestMoveBehaviour
  7. class BaseMoveActorInteraction(Interaction):
  8. gui_action = None
  9. color = None
  10. request_move_behaviour_class = RequestMoveBehaviour
  11. def draw_pending(self) -> None:
  12. for actor in self.layer_manager.edit_layer.selection:
  13. grid_position = self.layer_manager.grid_manager.get_grid_position(actor.position)
  14. pixel_position = self.layer_manager.grid_manager.get_pixel_position_of_grid_position(grid_position)
  15. draw_line(
  16. self.layer_manager.scrolling_manager.world_to_screen(*pixel_position),
  17. self.layer_manager.edit_layer.screen_mouse,
  18. self.color,
  19. )
  20. def get_package_for_terminal(self) -> TerminalPackage:
  21. # TODO: FinishMoveEvent ?
  22. actions = []
  23. mouse_grid_position = self.layer_manager.grid_manager.get_grid_position(
  24. self.layer_manager.scrolling_manager.screen_to_world(
  25. *self.layer_manager.edit_layer.screen_mouse,
  26. )
  27. )
  28. for actor in self.layer_manager.edit_layer.selection:
  29. actions.append((
  30. self.request_move_behaviour_class, {
  31. 'subject_id': actor.subject.id,
  32. 'move_to': mouse_grid_position,
  33. 'gui_action': self.gui_action,
  34. }
  35. ))
  36. return TerminalPackage(
  37. simulation_actions=actions,
  38. )
  39. class MoveActorInteraction(BaseMoveActorInteraction):
  40. gui_action = UserAction.ORDER_MOVE
  41. color = (0, 0, 255)
  42. class MoveFastActorInteraction(BaseMoveActorInteraction):
  43. gui_action = UserAction.ORDER_MOVE_FAST
  44. color = (72, 244, 66)
  45. class MoveCrawlActorInteraction(BaseMoveActorInteraction):
  46. gui_action = UserAction.ORDER_MOVE_CRAWL
  47. color = (235, 244, 66)