| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | # coding: utf-8
import typing
from opencc.simulation.fire import RequestFireBehaviour
from synergine2_cocos2d.interaction import BaseActorInteraction
from opencc.user_action import UserAction
from synergine2.simulation import SimulationBehaviour
from synergine2_cocos2d.actor import Actor
from synergine2_cocos2d.gl import draw_line
class BaseFireActorInteraction(BaseActorInteraction):
    gui_action = None
    color = None
    not_visible_color = (0, 0, 0)
    request_move_behaviour_class = RequestFireBehaviour
    def draw_pending(self) -> None:
        for actor in self.layer_manager.edit_layer.selection:
            actor_grid_position = self.layer_manager.grid_manager.get_grid_position(actor.position)
            actor_pixel_position = self.layer_manager.grid_manager.get_world_position_of_grid_position(
                actor_grid_position,
            )
            mouse_grid_position = self.layer_manager.grid_manager.get_grid_position(
                self.layer_manager.scrolling_manager.screen_to_world(
                    *self.layer_manager.edit_layer.screen_mouse,
                )
            )
            draw_to_pixel = self.layer_manager.edit_layer.screen_mouse
            obstacle_grid_position = self.layer_manager.gui.physics.get_visibility_obstacle(
                subject=actor.subject,
                to_position=mouse_grid_position,
                matrix_name='visibility',
                opacity_property_name='opacity',
            )
            # DEBUG
            if self.layer_manager.debug:
                grid_paths = self.layer_manager.gui.physics.matrixes.get_path_positions(
                    from_=actor_grid_position,
                    to=mouse_grid_position,
                )
                previous_grid_path = None
                for grid_path in grid_paths:
                    if previous_grid_path:
                        previous_grid_path_pixel = self.layer_manager.grid_manager.get_world_position_of_grid_position(
                            previous_grid_path,
                        )
                        current_grid_pixel = self.layer_manager.grid_manager.get_world_position_of_grid_position(
                            grid_path,
                        )
                        draw_line(
                            self.layer_manager.scrolling_manager.world_to_screen(*previous_grid_path_pixel),
                            self.layer_manager.scrolling_manager.world_to_screen(*current_grid_pixel),
                            (25, 125, 25),
                        )
                    previous_grid_path = grid_path
            if obstacle_grid_position:
                obstacle_pixel = self.layer_manager.grid_manager.get_world_position_of_grid_position(
                    obstacle_grid_position,
                )
                draw_to_pixel = self.layer_manager.scrolling_manager.world_to_screen(*obstacle_pixel)
                draw_line(
                    self.layer_manager.scrolling_manager.world_to_screen(*obstacle_pixel),
                    self.layer_manager.edit_layer.screen_mouse,
                    self.not_visible_color,
                )
            draw_line(
                self.layer_manager.scrolling_manager.world_to_screen(*actor_pixel_position),
                draw_to_pixel,
                self.color,
            )
    def get_behaviour(self, actor: Actor, mouse_grid_position) -> typing.Tuple[typing.Type[SimulationBehaviour], dict]:
        raise NotImplementedError()
        return self.request_move_behaviour_class, {
            'subject_id': actor.subject.id,
            'move_to': mouse_grid_position,
            'gui_action': self.gui_action,
        }
class FireActorInteraction(BaseFireActorInteraction):
    gui_action = UserAction.ORDER_FIRE
    color = (255, 0, 0)
 |