|
@@ -1,15 +1,20 @@
|
1
|
1
|
import cocos
|
|
2
|
+from cocos.actions import ScaleBy, Repeat, Reverse, RotateBy
|
|
3
|
+from cocos.director import director
|
2
|
4
|
from cocos.layer import ScrollableLayer, Layer
|
3
|
5
|
from cocos.sprite import Sprite
|
4
|
6
|
from pyglet.window import key as wkey
|
|
7
|
+from random import randint
|
5
|
8
|
|
6
|
9
|
from sandbox.life_game.simulation import CellDieEvent, Cell
|
7
|
10
|
from sandbox.life_game.simulation import CellBornEvent
|
8
|
11
|
from synergine2.gui import Gui
|
9
|
|
-from synergine2.simulation import Event
|
10
|
12
|
from synergine2.terminals import TerminalPackage
|
11
|
13
|
from synergine2.terminals import Terminal
|
12
|
14
|
|
|
15
|
+cell_scale = ScaleBy(1.1, duration=0.25)
|
|
16
|
+cell_rotate = RotateBy(360, duration=30)
|
|
17
|
+
|
13
|
18
|
|
14
|
19
|
class Cells(Layer):
|
15
|
20
|
def __init__(self):
|
|
@@ -18,8 +23,10 @@ class Cells(Layer):
|
18
|
23
|
|
19
|
24
|
def born(self, grid_position):
|
20
|
25
|
cell = Sprite('resources/cells_l.png')
|
21
|
|
- cell.position = grid_position[0] * 30 + 300, grid_position[1] * 30 + 300
|
|
26
|
+ cell.position = grid_position[0] * 30, grid_position[1] * 30
|
22
|
27
|
cell.scale = 0.50
|
|
28
|
+ cell.do(Repeat(cell_scale + Reverse(cell_scale)))
|
|
29
|
+ cell.do(Repeat(cell_rotate + Reverse(cell_rotate)))
|
23
|
30
|
self.cells[grid_position] = cell
|
24
|
31
|
self.add(cell)
|
25
|
32
|
|
|
@@ -28,7 +35,7 @@ class Cells(Layer):
|
28
|
35
|
del self.cells[grid_position]
|
29
|
36
|
|
30
|
37
|
|
31
|
|
-class MainScene(ScrollableLayer):
|
|
38
|
+class MainLayer(ScrollableLayer):
|
32
|
39
|
is_event_handler = True
|
33
|
40
|
|
34
|
41
|
def __init__(self):
|
|
@@ -36,14 +43,24 @@ class MainScene(ScrollableLayer):
|
36
|
43
|
|
37
|
44
|
self.scroll_step = 20
|
38
|
45
|
|
39
|
|
- self.sprite = Sprite('resources/banner-1711735_640.jpg')
|
40
|
|
- self.sprite.position = 320, 240
|
41
|
|
- self.sprite.opacity = 70
|
42
|
|
- self.add(self.sprite, z=1)
|
|
46
|
+ self.background = Sprite('resources/banner-1711735_640.jpg')
|
|
47
|
+ self.background.position = 0, 0
|
|
48
|
+ self.background.opacity = 70
|
|
49
|
+ self.background.scale = 5
|
|
50
|
+ self.add(self.background, z=1)
|
43
|
51
|
|
44
|
52
|
self.cells = Cells()
|
45
|
53
|
self.add(self.cells)
|
46
|
54
|
|
|
55
|
+ self.cross = Sprite('resources/cross31x31.png')
|
|
56
|
+ self.cross.position = 0, 0
|
|
57
|
+ self.cross.opacity = 50
|
|
58
|
+ self.add(self.cross)
|
|
59
|
+
|
|
60
|
+ # Set scene center on center of screen
|
|
61
|
+ window_size = director.get_window_size()
|
|
62
|
+ self.position = window_size[0] // 2, window_size[1] // 2
|
|
63
|
+
|
47
|
64
|
def on_key_press(self, key, modifiers):
|
48
|
65
|
if key == wkey.LEFT:
|
49
|
66
|
self.position = (self.position[0] + self.scroll_step, self.position[1])
|
|
@@ -66,8 +83,8 @@ class LifeGameGui(Gui):
|
66
|
83
|
):
|
67
|
84
|
super().__init__(terminal, read_queue_interval)
|
68
|
85
|
|
69
|
|
- self.background = MainScene()
|
70
|
|
- self.main_scene = cocos.scene.Scene(self.background)
|
|
86
|
+ self.main_layer = MainLayer()
|
|
87
|
+ self.main_scene = cocos.scene.Scene(self.main_layer)
|
71
|
88
|
self.positions = {}
|
72
|
89
|
|
73
|
90
|
self.terminal.register_event_handler(CellDieEvent, self.on_cell_die)
|
|
@@ -81,14 +98,14 @@ class LifeGameGui(Gui):
|
81
|
98
|
for subject in package.subjects:
|
82
|
99
|
if isinstance(subject, Cell):
|
83
|
100
|
self.positions[subject.id] = subject.position
|
84
|
|
- self.background.cells.born(subject.position)
|
|
101
|
+ self.main_layer.cells.born(subject.position)
|
85
|
102
|
|
86
|
103
|
def on_cell_die(self, event: CellDieEvent):
|
87
|
|
- self.background.cells.die(self.positions[event.subject_id])
|
|
104
|
+ self.main_layer.cells.die(self.positions[event.subject_id])
|
88
|
105
|
|
89
|
106
|
def on_cell_born(self, event: CellBornEvent):
|
90
|
107
|
# TODO: La position peut evoluer dans un autre programme
|
91
|
108
|
# resoudre cette problematique de données subjects qui évolue
|
92
|
109
|
subject = self.terminal.subjects.get(event.subject_id)
|
93
|
110
|
self.positions[event.subject_id] = subject.position
|
94
|
|
- self.background.cells.born(subject.position)
|
|
111
|
+ self.main_layer.cells.born(subject.position)
|