소스 검색

refact user interaction

Bastien Sevajol 7 년 전
부모
커밋
9d18412136
3개의 변경된 파일65개의 추가작업 그리고 37개의 파일을 삭제
  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 파일 보기

1
 # coding: utf-8
1
 # coding: utf-8
2
+
2
 from pyglet.window import key
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
 from synergine2.config import Config
7
 from synergine2.config import Config
13
 from synergine2.log import SynergineLogger
8
 from synergine2.log import SynergineLogger
14
 from synergine2.terminals import Terminal
9
 from synergine2.terminals import Terminal
15
-from synergine2_cocos2d.gui import TMXGui
16
-from synergine2_cocos2d.gui import EditLayer as BaseEditLayer
17
 from synergine2_cocos2d.actions import MoveTo
10
 from synergine2_cocos2d.actions import MoveTo
18
-from synergine2_cocos2d.animation import Animate
19
 # TODO NOW: MOVE
11
 # TODO NOW: MOVE
20
 from synergine2_cocos2d.animation import ANIMATION_CRAWL
12
 from synergine2_cocos2d.animation import ANIMATION_CRAWL
21
 from synergine2_cocos2d.animation import ANIMATION_WALK
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
 class EditLayer(BaseEditLayer):
23
 class EditLayer(BaseEditLayer):
73
         self.move_crawl_duration_ref = float(self.config.resolve('game.move.crawl_ref_time'))
70
         self.move_crawl_duration_ref = float(self.config.resolve('game.move.crawl_ref_time'))
74
 
71
 
75
     def before_run(self) -> None:
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
         self.layer_manager.interaction_manager.register(MoveActorInteraction, self.layer_manager)
78
         self.layer_manager.interaction_manager.register(MoveActorInteraction, self.layer_manager)
77
         self.layer_manager.interaction_manager.register(MoveFastActorInteraction, self.layer_manager)
79
         self.layer_manager.interaction_manager.register(MoveFastActorInteraction, self.layer_manager)
78
         self.layer_manager.interaction_manager.register(MoveCrawlActorInteraction, self.layer_manager)
80
         self.layer_manager.interaction_manager.register(MoveCrawlActorInteraction, self.layer_manager)

+ 12 - 24
sandbox/tile/gui/move.py 파일 보기

1
 # coding: utf-8
1
 # coding: utf-8
2
+import typing
3
+
4
+from synergine2_cocos2d.interaction import BaseActorInteraction
2
 from sandbox.tile.user_action import UserAction
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
 from synergine2_cocos2d.gl import draw_line
8
 from synergine2_cocos2d.gl import draw_line
5
-from synergine2_cocos2d.interaction import Interaction
6
 from synergine2_xyz.move.simulation import RequestMoveBehaviour
9
 from synergine2_xyz.move.simulation import RequestMoveBehaviour
7
 
10
 
8
 
11
 
9
-class BaseMoveActorInteraction(Interaction):
12
+class BaseMoveActorInteraction(BaseActorInteraction):
10
     gui_action = None
13
     gui_action = None
11
     color = None
14
     color = None
12
     request_move_behaviour_class = RequestMoveBehaviour
15
     request_move_behaviour_class = RequestMoveBehaviour
22
                 self.color,
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
 class MoveActorInteraction(BaseMoveActorInteraction):
36
 class MoveActorInteraction(BaseMoveActorInteraction):

+ 38 - 0
synergine2_cocos2d/interaction.py 파일 보기

3
 
3
 
4
 from synergine2.config import Config
4
 from synergine2.config import Config
5
 from synergine2.log import SynergineLogger
5
 from synergine2.log import SynergineLogger
6
+from synergine2.simulation import SimulationBehaviour
6
 from synergine2.terminals import Terminal
7
 from synergine2.terminals import Terminal
7
 from synergine2.terminals import TerminalPackage
8
 from synergine2.terminals import TerminalPackage
9
+from synergine2_cocos2d.actor import Actor
8
 from synergine2_cocos2d.exception import InteractionNotFound
10
 from synergine2_cocos2d.exception import InteractionNotFound
11
+from synergine2_cocos2d.gl import draw_line
9
 from synergine2_cocos2d.layer import LayerManager
12
 from synergine2_cocos2d.layer import LayerManager
10
 from synergine2_cocos2d.user_action import UserAction
13
 from synergine2_cocos2d.user_action import UserAction
11
 
14
 
65
 
68
 
66
     def get_package_for_terminal(self) -> TerminalPackage:
69
     def get_package_for_terminal(self) -> TerminalPackage:
67
         raise NotImplementedError()
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()