fire.py 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # coding: utf-8
  2. import typing
  3. from sandbox.tile.simulation.fire import RequestFireBehaviour
  4. from synergine2_cocos2d.interaction import BaseActorInteraction
  5. from sandbox.tile.user_action import UserAction
  6. from synergine2.simulation import SimulationBehaviour
  7. from synergine2_cocos2d.actor import Actor
  8. from synergine2_cocos2d.gl import draw_line
  9. class BaseFireActorInteraction(BaseActorInteraction):
  10. gui_action = None
  11. color = None
  12. not_visible_color = (0, 0, 0)
  13. request_move_behaviour_class = RequestFireBehaviour
  14. def draw_pending(self) -> None:
  15. for actor in self.layer_manager.edit_layer.selection:
  16. actor_grid_position = self.layer_manager.grid_manager.get_grid_position(actor.position)
  17. actor_pixel_position = self.layer_manager.grid_manager.get_pixel_position_of_grid_position(
  18. actor_grid_position,
  19. )
  20. mouse_grid_position = self.layer_manager.grid_manager.get_grid_position(
  21. self.layer_manager.scrolling_manager.screen_to_world(
  22. *self.layer_manager.edit_layer.screen_mouse,
  23. )
  24. )
  25. draw_to_pixel = self.layer_manager.edit_layer.screen_mouse
  26. obstacle_grid_position = self.layer_manager.edit_layer.physics.get_visibility_obstacle(
  27. subject=actor.subject,
  28. to_position=mouse_grid_position,
  29. matrixes=self.layer_manager.edit_layer.matrixes,
  30. matrix_name='visibility',
  31. opacity_property_name='opacity',
  32. )
  33. if obstacle_grid_position:
  34. obstacle_pixel = self.layer_manager.grid_manager.get_pixel_position_of_grid_position(
  35. obstacle_grid_position,
  36. )
  37. draw_to_pixel = obstacle_pixel
  38. draw_line(
  39. obstacle_pixel,
  40. self.layer_manager.edit_layer.screen_mouse,
  41. self.not_visible_color,
  42. )
  43. draw_line(
  44. self.layer_manager.scrolling_manager.world_to_screen(*actor_pixel_position),
  45. draw_to_pixel,
  46. self.color,
  47. )
  48. def get_behaviour(self, actor: Actor, mouse_grid_position) -> typing.Tuple[typing.Type[SimulationBehaviour], dict]:
  49. raise NotImplementedError()
  50. return self.request_move_behaviour_class, {
  51. 'subject_id': actor.subject.id,
  52. 'move_to': mouse_grid_position,
  53. 'gui_action': self.gui_action,
  54. }
  55. class FireActorInteraction(BaseFireActorInteraction):
  56. gui_action = UserAction.ORDER_FIRE
  57. color = (255, 0, 0)