Bastien Sevajol 7 years ago
parent
commit
6d74043327

+ 3 - 2
sandbox/engulf/gui.py View File

6
 from cocos.sprite import Sprite
6
 from cocos.sprite import Sprite
7
 from sandbox.engulf.behaviour import GrassGrownUp, GrassSpawn, MoveTo as MoveToEvent, EatEvent, AttackEvent, EatenEvent
7
 from sandbox.engulf.behaviour import GrassGrownUp, GrassSpawn, MoveTo as MoveToEvent, EatEvent, AttackEvent, EatenEvent
8
 from sandbox.engulf.subject import Cell, Grass, PreyCell, PredatorCell
8
 from sandbox.engulf.subject import Cell, Grass, PreyCell, PredatorCell
9
-from synergine2.terminals import TerminalPackage
9
+from synergine2.terminals import TerminalPackage, Terminal
10
 from synergine2_cocos2d.gui import Gui, GridLayerMixin
10
 from synergine2_cocos2d.gui import Gui, GridLayerMixin
11
 from synergine2_cocos2d.gui import MainLayer as BaseMainLayer
11
 from synergine2_cocos2d.gui import MainLayer as BaseMainLayer
12
 
12
 
85
 
85
 
86
 
86
 
87
 class MainLayer(GridLayerMixin, BaseMainLayer):
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
         super().__init__(terminal, *args, **kwargs)
89
         super().__init__(terminal, *args, **kwargs)
90
         self.game = game
90
         self.game = game
91
+        self.terminal = terminal
91
 
92
 
92
         self.cells = CellsLayer(game=game, terminal=terminal)
93
         self.cells = CellsLayer(game=game, terminal=terminal)
93
         self.add(self.cells)
94
         self.add(self.cells)

+ 9 - 26
sandbox/tiledstrategy/gui/base.py View File

1
 # coding: utf-8
1
 # coding: utf-8
2
 import cocos
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 View File

17
 from synergine2.terminals import TerminalManager
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
     seed(seed_value)
21
     seed(seed_value)
22
 
22
 
23
     config = Config()
23
     config = Config()
45
                 config,
45
                 config,
46
                 logger,
46
                 logger,
47
                 asynchronous=False,
47
                 asynchronous=False,
48
+                map_dir_path=map_dir_path,
48
             )]
49
             )]
49
         ),
50
         ),
50
         cycles_per_seconds=1 / config.core.cycle_duration,
51
         cycles_per_seconds=1 / config.core.cycle_duration,
53
 
54
 
54
 if __name__ == '__main__':
55
 if __name__ == '__main__':
55
     parser = argparse.ArgumentParser(description='Run TiledStrategy')
56
     parser = argparse.ArgumentParser(description='Run TiledStrategy')
57
+    parser.add_argument('map_dir_path', help='map directory path')
56
     parser.add_argument('--seed', dest='seed', default=42)
58
     parser.add_argument('--seed', dest='seed', default=42)
57
 
59
 
58
     args = parser.parse_args()
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 View File

10
 from synergine2.log import SynergineLogger
10
 from synergine2.log import SynergineLogger
11
 from synergine2.terminals import Terminal
11
 from synergine2.terminals import Terminal
12
 from synergine2.terminals import TerminalPackage
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
 class GridManager(object):
17
 class GridManager(object):
72
 class MainLayer(ScrollableLayer):
74
 class MainLayer(ScrollableLayer):
73
     is_event_handler = True
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
         super().__init__()
78
         super().__init__()
77
-
78
-        self.terminal = terminal
79
         self.scroll_step = scroll_step
79
         self.scroll_step = scroll_step
80
         self.grid_manager = GridManager(self, 32, border=2)
80
         self.grid_manager = GridManager(self, 32, border=2)
81
 
81
 
114
             read_queue_interval: float= 1/60.0,
114
             read_queue_interval: float= 1/60.0,
115
     ):
115
     ):
116
         self.config = config
116
         self.config = config
117
-        self.logger = logger,
117
+        self.logger = logger
118
         self._read_queue_interval = read_queue_interval
118
         self._read_queue_interval = read_queue_interval
119
         self.terminal = terminal
119
         self.terminal = terminal
120
         self.cycle_duration = self.config.core.cycle_duration
120
         self.cycle_duration = self.config.core.cycle_duration
121
         cocos.director.director.init()
121
         cocos.director.director.init()
122
 
122
 
123
     def run(self):
123
     def run(self):
124
+        self.before_run()
124
         pyglet.clock.schedule_interval(
125
         pyglet.clock.schedule_interval(
125
             lambda *_, **__: self.terminal.read(),
126
             lambda *_, **__: self.terminal.read(),
126
             self._read_queue_interval,
127
             self._read_queue_interval,
127
         )
128
         )
128
         cocos.director.director.run(self.get_main_scene())
129
         cocos.director.director.run(self.get_main_scene())
129
 
130
 
131
+    def before_run(self) -> None:
132
+        pass
133
+
130
     def get_main_scene(self) -> cocos.cocosnode.CocosNode:
134
     def get_main_scene(self) -> cocos.cocosnode.CocosNode:
131
         raise NotImplementedError()
135
         raise NotImplementedError()
132
 
136
 
135
 
139
 
136
     def after_received(self, package: TerminalPackage):
140
     def after_received(self, package: TerminalPackage):
137
         pass
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 View File

4
 import cocos
4
 import cocos
5
 from synergine2.config import Config
5
 from synergine2.config import Config
6
 from synergine2.log import SynergineLogger
6
 from synergine2.log import SynergineLogger
7
-from synergine2_cocos2d.gui import MainLayer
8
 from synergine2_cocos2d.middleware import MapMiddleware
7
 from synergine2_cocos2d.middleware import MapMiddleware
9
 
8
 
10
 
9
 
21
 
20
 
22
         self.main_scene = None  # type: cocos.scene.Scene
21
         self.main_scene = None  # type: cocos.scene.Scene
23
         self.main_layer = None  # type: cocos.layer.Layer
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
     def init(self) -> None:
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 View File

1
 # coding: utf-8
1
 # coding: utf-8
2
+import os
3
+
4
+import cocos
2
 from synergine2.config import Config
5
 from synergine2.config import Config
3
 from synergine2.log import SynergineLogger
6
 from synergine2.log import SynergineLogger
4
 
7
 
13
         self.config = config
16
         self.config = config
14
         self.logger = logger
17
         self.logger = logger
15
         self.map_dir_path = map_dir_path
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']