Browse Source

thirst version of working gui of life game

Bastien Sevajol 8 years ago
parent
commit
c2a2488194

+ 63 - 32
sandbox/life_game/gui.py View File

@@ -1,8 +1,9 @@
1 1
 import cocos
2
-import pyglet
3
-from cocos.actions import Repeat, ScaleBy, Reverse
2
+from cocos.layer import ScrollableLayer, Layer
3
+from cocos.sprite import Sprite
4
+from pyglet.window import key as wkey
4 5
 
5
-from sandbox.life_game.simulation import CellDieEvent
6
+from sandbox.life_game.simulation import CellDieEvent, Cell
6 7
 from sandbox.life_game.simulation import CellBornEvent
7 8
 from synergine2.gui import Gui
8 9
 from synergine2.simulation import Event
@@ -10,20 +11,51 @@ from synergine2.terminals import TerminalPackage
10 11
 from synergine2.terminals import Terminal
11 12
 
12 13
 
13
-class HelloWorld(cocos.layer.Layer):
14
+class Cells(Layer):
14 15
     def __init__(self):
15 16
         super().__init__()
17
+        self.cells = {}
16 18
 
17
-        self.label = cocos.text.Label(
18
-            '...',
19
-            font_name='Times New Roman',
20
-            font_size=21,
21
-            anchor_x='center', anchor_y='center'
22
-        )
23
-        self.label.position = 320, 240
24
-        scale = ScaleBy(3, duration=5)
25
-        self.label.do(Repeat(scale + Reverse(scale)))
26
-        self.add(self.label)
19
+    def born(self, grid_position):
20
+        cell = Sprite('resources/cells_l.png')
21
+        cell.position = grid_position[0] * 30 + 300, grid_position[1] * 30 + 300
22
+        cell.scale = 0.50
23
+        self.cells[grid_position] = cell
24
+        self.add(cell)
25
+
26
+    def die(self, grid_position):
27
+        self.remove(self.cells[grid_position])
28
+        del self.cells[grid_position]
29
+
30
+
31
+class MainScene(ScrollableLayer):
32
+    is_event_handler = True
33
+
34
+    def __init__(self):
35
+        super().__init__()
36
+
37
+        self.scroll_step = 20
38
+
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)
43
+
44
+        self.cells = Cells()
45
+        self.add(self.cells)
46
+
47
+    def on_key_press(self, key, modifiers):
48
+        if key == wkey.LEFT:
49
+            self.position = (self.position[0] + self.scroll_step, self.position[1])
50
+
51
+        if key == wkey.RIGHT:
52
+            self.position = (self.position[0] - self.scroll_step, self.position[1])
53
+
54
+        if key == wkey.UP:
55
+            self.position = (self.position[0], self.position[1] - self.scroll_step)
56
+
57
+        if key == wkey.DOWN:
58
+            self.position = (self.position[0], self.position[1] + self.scroll_step)
27 59
 
28 60
 
29 61
 class LifeGameGui(Gui):
@@ -34,30 +66,29 @@ class LifeGameGui(Gui):
34 66
     ):
35 67
         super().__init__(terminal, read_queue_interval)
36 68
 
37
-        self.hello_layer = HelloWorld()
38
-        self.main_scene = cocos.scene.Scene(self.hello_layer)
69
+        self.background = MainScene()
70
+        self.main_scene = cocos.scene.Scene(self.background)
71
+        self.positions = {}
39 72
 
40 73
         self.terminal.register_event_handler(CellDieEvent, self.on_cell_die)
41 74
         self.terminal.register_event_handler(CellBornEvent, self.on_cell_born)
42 75
 
43
-        self.born = 0
44
-        self.die = 0
45
-
46
-    def get_main_scene(self) -> HelloWorld:
76
+    def get_main_scene(self):
47 77
         return self.main_scene
48 78
 
49 79
     def before_received(self, package: TerminalPackage):
50
-        self.born = 0
51
-        self.die = 0
52
-
53
-    def after_received(self, package: TerminalPackage):
54
-        self.hello_layer.label.element.text = 'This cycle: {0} born, {1} dead'.format(
55
-            self.born,
56
-            self.die,
57
-        )
80
+        if package.subjects:  # It's thirst package
81
+            for subject in package.subjects:
82
+                if isinstance(subject, Cell):
83
+                    self.positions[subject.id] = subject.position
84
+                    self.background.cells.born(subject.position)
58 85
 
59
-    def on_cell_die(self, event: Event):
60
-        self.die += 1
86
+    def on_cell_die(self, event: CellDieEvent):
87
+        self.background.cells.die(self.positions[event.subject_id])
61 88
 
62
-    def on_cell_born(self, event: Event):
63
-        self.born += 1
89
+    def on_cell_born(self, event: CellBornEvent):
90
+        # TODO: La position peut evoluer dans un autre programme
91
+        # resoudre cette problematique de données subjects qui évolue
92
+        subject = self.terminal.subjects.get(event.subject_id)
93
+        self.positions[event.subject_id] = subject.position
94
+        self.background.cells.born(subject.position)

BIN
sandbox/life_game/resources/banner-1711735_640.jpg View File


BIN
sandbox/life_game/resources/cells_l.png View File


+ 7 - 0
synergine2/gui.py View File

@@ -2,6 +2,7 @@ import cocos
2 2
 import pyglet
3 3
 
4 4
 from synergine2.terminals import Terminal
5
+from synergine2.terminals import TerminalPackage
5 6
 
6 7
 
7 8
 class Gui(object):
@@ -23,3 +24,9 @@ class Gui(object):
23 24
 
24 25
     def get_main_scene(self) -> cocos.cocosnode.CocosNode:
25 26
         raise NotImplementedError()
27
+
28
+    def before_received(self, package: TerminalPackage):
29
+        pass
30
+
31
+    def after_received(self, package: TerminalPackage):
32
+        pass