Bastien Sevajol 6 vuotta sitten
vanhempi
commit
6d74043327

+ 3 - 2
sandbox/engulf/gui.py Näytä tiedosto

@@ -6,7 +6,7 @@ from cocos.actions import MoveTo, Repeat, ScaleBy, Reverse, RotateTo
6 6
 from cocos.sprite import Sprite
7 7
 from sandbox.engulf.behaviour import GrassGrownUp, GrassSpawn, MoveTo as MoveToEvent, EatEvent, AttackEvent, EatenEvent
8 8
 from sandbox.engulf.subject import Cell, Grass, PreyCell, PredatorCell
9
-from synergine2.terminals import TerminalPackage
9
+from synergine2.terminals import TerminalPackage, Terminal
10 10
 from synergine2_cocos2d.gui import Gui, GridLayerMixin
11 11
 from synergine2_cocos2d.gui import MainLayer as BaseMainLayer
12 12
 
@@ -85,9 +85,10 @@ class GrassLayer(GridLayerMixin, BaseMainLayer):
85 85
 
86 86
 
87 87
 class MainLayer(GridLayerMixin, BaseMainLayer):
88
-    def __init__(self, game: 'Game', terminal, *args, **kwargs):
88
+    def __init__(self, game: 'Game', terminal: Terminal, *args, **kwargs):
89 89
         super().__init__(terminal, *args, **kwargs)
90 90
         self.game = game
91
+        self.terminal = terminal
91 92
 
92 93
         self.cells = CellsLayer(game=game, terminal=terminal)
93 94
         self.add(self.cells)

+ 9 - 26
sandbox/tiledstrategy/gui/base.py Näytä tiedosto

@@ -1,30 +1,13 @@
1 1
 # coding: utf-8
2 2
 import cocos
3
-import pyglet
3
+from synergine2_cocos2d.gui import TMXGui
4 4
 
5
-from synergine2_cocos2d.gui import Gui
6
-from synergine2_cocos2d.gui import MainLayer
7
-from synergine2_cocos2d.layer import LayerManager
8
-from synergine2_cocos2d.middleware import TMXMiddleware
9 5
 
10
-
11
-class Game(Gui):
12
-    def __init__(self, *args, map_dir_path: str, **kwargs):
13
-        super().__init__(*args, **kwargs)
14
-        self.map_dir_path = map_dir_path
15
-        self.layer_manager = LayerManager(
16
-            self.config,
17
-            self.logger,
18
-            middleware=TMXMiddleware(
19
-                self.config,
20
-                self.logger,
21
-                self.map_dir_path,
22
-            ),
23
-        )
24
-        self.layer_manager.init()
25
-
26
-        pyglet.clock.schedule_interval(
27
-            lambda *_, **__: self.terminal.read(),
28
-            1 / 60.0,
29
-        )
30
-        cocos.director.director.run(self.layer_manager.main_scene)
6
+class Game(TMXGui):
7
+    def before_run(self) -> None:
8
+        # Test
9
+        man = cocos.sprite.Sprite('man.png')
10
+        self.layer_manager.subject_layer.add(man)
11
+        man.position = 0, 0
12
+        move = cocos.actions.MoveTo((80, 80), 2)
13
+        man.do(move)

File diff suppressed because it is too large
+ 2 - 2
sandbox/tiledstrategy/maps/003/003.tmx


+ 4 - 2
sandbox/tiledstrategy/run.py Näytä tiedosto

@@ -17,7 +17,7 @@ from synergine2.cycle import CycleManager
17 17
 from synergine2.terminals import TerminalManager
18 18
 
19 19
 
20
-def main(seed_value: int=42):
20
+def main(map_dir_path: str, seed_value: int=42):
21 21
     seed(seed_value)
22 22
 
23 23
     config = Config()
@@ -45,6 +45,7 @@ def main(seed_value: int=42):
45 45
                 config,
46 46
                 logger,
47 47
                 asynchronous=False,
48
+                map_dir_path=map_dir_path,
48 49
             )]
49 50
         ),
50 51
         cycles_per_seconds=1 / config.core.cycle_duration,
@@ -53,8 +54,9 @@ def main(seed_value: int=42):
53 54
 
54 55
 if __name__ == '__main__':
55 56
     parser = argparse.ArgumentParser(description='Run TiledStrategy')
57
+    parser.add_argument('map_dir_path', help='map directory path')
56 58
     parser.add_argument('--seed', dest='seed', default=42)
57 59
 
58 60
     args = parser.parse_args()
59 61
 
60
-    main(seed_value=args.seed)
62
+    main(args.map_dir_path, seed_value=args.seed)

+ 41 - 4
synergine2_cocos2d/gui.py Näytä tiedosto

@@ -10,6 +10,8 @@ from synergine2.config import Config
10 10
 from synergine2.log import SynergineLogger
11 11
 from synergine2.terminals import Terminal
12 12
 from synergine2.terminals import TerminalPackage
13
+from synergine2_cocos2d.layer import LayerManager
14
+from synergine2_cocos2d.middleware import TMXMiddleware
13 15
 
14 16
 
15 17
 class GridManager(object):
@@ -72,10 +74,8 @@ class GridLayerMixin(object):
72 74
 class MainLayer(ScrollableLayer):
73 75
     is_event_handler = True
74 76
 
75
-    def __init__(self, terminal: Terminal, scroll_step: int=100):
77
+    def __init__(self, scroll_step: int=100):
76 78
         super().__init__()
77
-
78
-        self.terminal = terminal
79 79
         self.scroll_step = scroll_step
80 80
         self.grid_manager = GridManager(self, 32, border=2)
81 81
 
@@ -114,19 +114,23 @@ class Gui(object):
114 114
             read_queue_interval: float= 1/60.0,
115 115
     ):
116 116
         self.config = config
117
-        self.logger = logger,
117
+        self.logger = logger
118 118
         self._read_queue_interval = read_queue_interval
119 119
         self.terminal = terminal
120 120
         self.cycle_duration = self.config.core.cycle_duration
121 121
         cocos.director.director.init()
122 122
 
123 123
     def run(self):
124
+        self.before_run()
124 125
         pyglet.clock.schedule_interval(
125 126
             lambda *_, **__: self.terminal.read(),
126 127
             self._read_queue_interval,
127 128
         )
128 129
         cocos.director.director.run(self.get_main_scene())
129 130
 
131
+    def before_run(self) -> None:
132
+        pass
133
+
130 134
     def get_main_scene(self) -> cocos.cocosnode.CocosNode:
131 135
         raise NotImplementedError()
132 136
 
@@ -135,3 +139,36 @@ class Gui(object):
135 139
 
136 140
     def after_received(self, package: TerminalPackage):
137 141
         pass
142
+
143
+
144
+class TMXGui(Gui):
145
+    def __init__(
146
+        self,
147
+        config: Config,
148
+        logger: SynergineLogger,
149
+        terminal: Terminal,
150
+        read_queue_interval: float = 1 / 60.0,
151
+        map_dir_path: str=None,
152
+    ):
153
+        assert map_dir_path
154
+        super(TMXGui, self).__init__(
155
+            config,
156
+            logger,
157
+            terminal,
158
+            read_queue_interval,
159
+        )
160
+        self.map_dir_path = map_dir_path
161
+        self.layer_manager = LayerManager(
162
+            self.config,
163
+            self.logger,
164
+            middleware=TMXMiddleware(
165
+                self.config,
166
+                self.logger,
167
+                self.map_dir_path,
168
+            ),
169
+        )
170
+        self.layer_manager.init()
171
+        self.layer_manager.center()
172
+
173
+    def get_main_scene(self) -> cocos.cocosnode.CocosNode:
174
+        return self.layer_manager.main_scene

+ 30 - 29
synergine2_cocos2d/layer.py Näytä tiedosto

@@ -4,7 +4,6 @@ import typing
4 4
 import cocos
5 5
 from synergine2.config import Config
6 6
 from synergine2.log import SynergineLogger
7
-from synergine2_cocos2d.gui import MainLayer
8 7
 from synergine2_cocos2d.middleware import MapMiddleware
9 8
 
10 9
 
@@ -21,34 +20,36 @@ class LayerManager(object):
21 20
 
22 21
         self.main_scene = None  # type: cocos.scene.Scene
23 22
         self.main_layer = None  # type: cocos.layer.Layer
24
-        self.background_layers = []  # type: typing.List[cocos.layer.Layer]
25
-        self.subject_layers = []  # type: typing.List[cocos.layer.Layer]
26
-        self.decoration_layers = []  # type: typing.List[cocos.layer.Layer]
27 23
 
28
-    @property
29
-    def background(self) -> cocos.layer.Layer:
30
-        return self.background_layers[0]
31
-
32
-    @property
33
-    def subject(self) -> cocos.layer.Layer:
34
-        return self.background_layers[0]
35
-
36
-    @property
37
-    def decoration(self) -> cocos.layer.Layer:
38
-        return self.background_layers[0]
24
+        self.background_sprite = None  # type: cocos.sprite.Sprite
25
+        self.ground_layer = None  # type: cocos.tiles.RectMapLayer
26
+        self.subject_layer = None  # type: cocos.layer.Layer
27
+        self.top_layer = None  # type: cocos.tiles.RectMapLayer
39 28
 
40 29
     def init(self) -> None:
41
-        self.main_layer = MainLayer()  # self.terminal) TODO: Ne plus donner le terminal
42
-
43
-        self.background_layers.extend(self.middleware.get_background_layers())
44
-        self.subject_layers.append(cocos.layer.Layer())
45
-        self.decoration_layers.extend(self.middleware.get_decoration_layers())
46
-
47
-        for layer in self.background_layers:
48
-            self.main_layer.add(layer)
49
-
50
-        for layer in self.subject_layers:
51
-            self.main_layer.add(layer)
52
-
53
-        for layer in self.decoration_layers:
54
-            self.main_layer.add(layer)
30
+        from synergine2_cocos2d.gui import MainLayer
31
+
32
+        self.middleware.init()
33
+        self.main_layer = MainLayer()
34
+        self.main_scene = cocos.scene.Scene(self.main_layer)
35
+
36
+        self.background_sprite = self.middleware.get_background_sprite()
37
+        self.ground_layer = self.middleware.get_ground_layer()
38
+        self.subject_layer = cocos.layer.Layer()  # TODO: RectMapLayer
39
+        self.top_layer = self.middleware.get_top_layer()
40
+
41
+        self.main_layer.add(self.background_sprite)
42
+        self.main_layer.add(self.ground_layer)
43
+        self.main_layer.add(self.subject_layer)
44
+        self.main_layer.add(self.top_layer)
45
+
46
+    def center(self):
47
+        self.background_sprite.set_position(
48
+            0 + (self.background_sprite.width / 2),
49
+            0 + (self.background_sprite.height / 2),
50
+        )
51
+        self.ground_layer.set_view(0, 0, self.ground_layer.px_width, self.ground_layer.px_height)
52
+        # self.subject_layer.set_view(0, 0, self.decoration_layers[0].px_width, self.decoration_layers[0].px_height)
53
+        self.top_layer.set_view(0, 0, self.top_layer.px_width, self.top_layer.px_height)
54
+
55
+        self.main_scene.position = - self.ground_layer.px_width / 2, - self.ground_layer.px_height / 2

+ 29 - 23
synergine2_cocos2d/middleware.py Näytä tiedosto

@@ -1,4 +1,7 @@
1 1
 # coding: utf-8
2
+import os
3
+
4
+import cocos
2 5
 from synergine2.config import Config
3 6
 from synergine2.log import SynergineLogger
4 7
 
@@ -13,32 +16,35 @@ class MapMiddleware(object):
13 16
         self.config = config
14 17
         self.logger = logger
15 18
         self.map_dir_path = map_dir_path
19
+        self.tmx = None
16 20
 
21
+    def init(self) -> None:
22
+        self.tmx = cocos.tiles.load(os.path.join(
23
+            self.map_dir_path,
24
+            '{}.tmx'.format(os.path.basename(self.map_dir_path)),
25
+        ))
17 26
 
18
-class TMXMiddleware(MapMiddleware):
19
-    pass  # TODO
20
-
21
-tmx = cocos.tiles.load('maps/003/003.tmx')
22
-
23
-background = cocos.sprite.Sprite('background.png')
24
-level0 = tmx['level0']
25
-level1 = tmx['level1']
26
-
27
-layer = MainLayer(self.terminal)
28
-layer.add(background, 0)
29
-layer.add(level0, 1)
30
-layer.add(level1, 2)
27
+    def get_background_sprite(self) -> cocos.sprite.Sprite:
28
+        raise NotImplementedError()
31 29
 
32
-main_scene = cocos.scene.Scene(layer)
30
+    def get_ground_layer(self) -> cocos.tiles.RectMapLayer:
31
+        raise NotImplementedError()
33 32
 
34
-background.set_position(0 + (background.width / 2), 0 + (background.height / 2))
35
-level0.set_view(0, 0, level0.px_width, level0.px_height)
36
-level1.set_view(0, 0, level1.px_width, level1.px_height)
33
+    def get_top_layer(self) -> cocos.tiles.RectMapLayer:
34
+        raise NotImplementedError()
37 35
 
38
-main_scene.position = 0, 0
39 36
 
40
-man = cocos.sprite.Sprite('man.png')
41
-level0.add(man)
42
-man.position = 0, 0
43
-move = cocos.actions.MoveTo((80, 80), 2)
44
-man.do(move)
37
+class TMXMiddleware(MapMiddleware):
38
+    def get_background_sprite(self) -> cocos.sprite.Sprite:
39
+        return cocos.sprite.Sprite(os.path.join(
40
+            self.map_dir_path,
41
+            'background.png',
42
+        ))
43
+
44
+    def get_ground_layer(self) -> cocos.tiles.RectMapLayer:
45
+        assert self.tmx
46
+        return self.tmx['ground']
47
+
48
+    def get_top_layer(self) -> cocos.tiles.RectMapLayer:
49
+        assert self.tmx
50
+        return self.tmx['top']