Bläddra i källkod

refact user interaction

Bastien Sevajol 6 år sedan
förälder
incheckning
9d18412136
3 ändrade filer med 65 tillägg och 37 borttagningar
  1. 15 13
      sandbox/tile/gui/base.py
  2. 12 24
      sandbox/tile/gui/move.py
  3. 38 0
      synergine2_cocos2d/interaction.py

+ 15 - 13
sandbox/tile/gui/base.py Visa fil

@@ -1,26 +1,23 @@
1 1
 # coding: utf-8
2
+
2 3
 from pyglet.window import key
3
-from cocos.actions import MoveTo as BaseMoveTo
4
-from sandbox.tile.gui.move import MoveActorInteraction
5
-from sandbox.tile.gui.move import MoveFastActorInteraction
6
-from sandbox.tile.gui.move import MoveCrawlActorInteraction
7
-from synergine2_cocos2d.layer import LayerManager
8
-from synergine2_xyz.move.simulation import FinishMoveEvent
9
-from synergine2_xyz.move.simulation import StartMoveEvent
10 4
 
11
-from synergine2_xyz.utils import get_angle
5
+from cocos.actions import MoveTo as BaseMoveTo
6
+from sandbox.tile.user_action import UserAction
12 7
 from synergine2.config import Config
13 8
 from synergine2.log import SynergineLogger
14 9
 from synergine2.terminals import Terminal
15
-from synergine2_cocos2d.gui import TMXGui
16
-from synergine2_cocos2d.gui import EditLayer as BaseEditLayer
17 10
 from synergine2_cocos2d.actions import MoveTo
18
-from synergine2_cocos2d.animation import Animate
19 11
 # TODO NOW: MOVE
20 12
 from synergine2_cocos2d.animation import ANIMATION_CRAWL
21 13
 from synergine2_cocos2d.animation import ANIMATION_WALK
22
-
23
-from sandbox.tile.user_action import UserAction
14
+from synergine2_cocos2d.animation import Animate
15
+from synergine2_cocos2d.gui import EditLayer as BaseEditLayer
16
+from synergine2_cocos2d.gui import TMXGui
17
+from synergine2_cocos2d.layer import LayerManager
18
+from synergine2_xyz.move.simulation import FinishMoveEvent
19
+from synergine2_xyz.move.simulation import StartMoveEvent
20
+from synergine2_xyz.utils import get_angle
24 21
 
25 22
 
26 23
 class EditLayer(BaseEditLayer):
@@ -73,6 +70,11 @@ class Game(TMXGui):
73 70
         self.move_crawl_duration_ref = float(self.config.resolve('game.move.crawl_ref_time'))
74 71
 
75 72
     def before_run(self) -> None:
73
+        from sandbox.tile.gui.move import MoveActorInteraction
74
+        from sandbox.tile.gui.move import MoveFastActorInteraction
75
+        from sandbox.tile.gui.move import MoveCrawlActorInteraction
76
+        from sandbox.tile.gui.fire import FireActorInteraction
77
+
76 78
         self.layer_manager.interaction_manager.register(MoveActorInteraction, self.layer_manager)
77 79
         self.layer_manager.interaction_manager.register(MoveFastActorInteraction, self.layer_manager)
78 80
         self.layer_manager.interaction_manager.register(MoveCrawlActorInteraction, self.layer_manager)

+ 12 - 24
sandbox/tile/gui/move.py Visa fil

@@ -1,12 +1,15 @@
1 1
 # coding: utf-8
2
+import typing
3
+
4
+from synergine2_cocos2d.interaction import BaseActorInteraction
2 5
 from sandbox.tile.user_action import UserAction
3
-from synergine2.terminals import TerminalPackage
6
+from synergine2.simulation import SimulationBehaviour
7
+from synergine2_cocos2d.actor import Actor
4 8
 from synergine2_cocos2d.gl import draw_line
5
-from synergine2_cocos2d.interaction import Interaction
6 9
 from synergine2_xyz.move.simulation import RequestMoveBehaviour
7 10
 
8 11
 
9
-class BaseMoveActorInteraction(Interaction):
12
+class BaseMoveActorInteraction(BaseActorInteraction):
10 13
     gui_action = None
11 14
     color = None
12 15
     request_move_behaviour_class = RequestMoveBehaviour
@@ -22,27 +25,12 @@ class BaseMoveActorInteraction(Interaction):
22 25
                 self.color,
23 26
             )
24 27
 
25
-    def get_package_for_terminal(self) -> TerminalPackage:
26
-        # TODO: FinishMoveEvent ?
27
-        actions = []
28
-        mouse_grid_position = self.layer_manager.grid_manager.get_grid_position(
29
-            self.layer_manager.scrolling_manager.screen_to_world(
30
-                *self.layer_manager.edit_layer.screen_mouse,
31
-            )
32
-        )
33
-
34
-        for actor in self.layer_manager.edit_layer.selection:
35
-            actions.append((
36
-                self.request_move_behaviour_class, {
37
-                    'subject_id': actor.subject.id,
38
-                    'move_to': mouse_grid_position,
39
-                    'gui_action': self.gui_action,
40
-                }
41
-            ))
42
-
43
-        return TerminalPackage(
44
-            simulation_actions=actions,
45
-        )
28
+    def get_behaviour(self, actor: Actor, mouse_grid_position) -> typing.Tuple[typing.Type[SimulationBehaviour], dict]:
29
+        return self.request_move_behaviour_class, {
30
+            'subject_id': actor.subject.id,
31
+            'move_to': mouse_grid_position,
32
+            'gui_action': self.gui_action,
33
+        }
46 34
 
47 35
 
48 36
 class MoveActorInteraction(BaseMoveActorInteraction):

+ 38 - 0
synergine2_cocos2d/interaction.py Visa fil

@@ -3,9 +3,12 @@ import typing
3 3
 
4 4
 from synergine2.config import Config
5 5
 from synergine2.log import SynergineLogger
6
+from synergine2.simulation import SimulationBehaviour
6 7
 from synergine2.terminals import Terminal
7 8
 from synergine2.terminals import TerminalPackage
9
+from synergine2_cocos2d.actor import Actor
8 10
 from synergine2_cocos2d.exception import InteractionNotFound
11
+from synergine2_cocos2d.gl import draw_line
9 12
 from synergine2_cocos2d.layer import LayerManager
10 13
 from synergine2_cocos2d.user_action import UserAction
11 14
 
@@ -65,3 +68,38 @@ class Interaction(object):
65 68
 
66 69
     def get_package_for_terminal(self) -> TerminalPackage:
67 70
         raise NotImplementedError()
71
+
72
+
73
+class BaseActorInteraction(Interaction):
74
+    gui_action = None
75
+    color = None
76
+
77
+    def draw_pending(self) -> None:
78
+        for actor in self.layer_manager.edit_layer.selection:
79
+            grid_position = self.layer_manager.grid_manager.get_grid_position(actor.position)
80
+            pixel_position = self.layer_manager.grid_manager.get_pixel_position_of_grid_position(grid_position)
81
+
82
+            draw_line(
83
+                self.layer_manager.scrolling_manager.world_to_screen(*pixel_position),
84
+                self.layer_manager.edit_layer.screen_mouse,
85
+                self.color,
86
+            )
87
+
88
+    def get_package_for_terminal(self) -> TerminalPackage:
89
+        actions = []
90
+        mouse_grid_position = self.layer_manager.grid_manager.get_grid_position(
91
+            self.layer_manager.scrolling_manager.screen_to_world(
92
+                *self.layer_manager.edit_layer.screen_mouse,
93
+            )
94
+        )
95
+
96
+        for actor in self.layer_manager.edit_layer.selection:
97
+            behaviour_class, behaviour_data = self.get_behaviour(actor, mouse_grid_position)
98
+            actions.append((behaviour_class, behaviour_data))
99
+
100
+        return TerminalPackage(
101
+            simulation_actions=actions,
102
+        )
103
+
104
+    def get_behaviour(self, actor: Actor, mouse_grid_position) -> typing.Tuple[typing.Type[SimulationBehaviour], dict]:
105
+        raise NotImplementedError()