Browse Source

move interior management in background layer

Bastien Sevajol 6 years ago
parent
commit
d029b1746e
1 changed files with 37 additions and 20 deletions
  1. 37 20
      opencombat/gui/base.py

+ 37 - 20
opencombat/gui/base.py View File

@@ -41,14 +41,6 @@ from opencombat.simulation.event import DieEvent
41 41
 
42 42
 
43 43
 class EditLayer(BaseEditLayer):
44
-    def __init__(self, *args, **kwargs) -> None:
45
-        super().__init__(*args, **kwargs)
46
-
47
-        # TODO BS 20171213: Into other layer !
48
-        self.last_interior_draw = 0
49
-        # FIXME BS: hardcoded (move into other layer)
50
-        self.interior_manager = InteriorManager(TileMap('opencombat/maps/003/003.tmx'))
51
-
52 44
     def _on_key_press(self, k, m):
53 45
         if self.selection:
54 46
             if k == key.M:
@@ -62,19 +54,35 @@ class EditLayer(BaseEditLayer):
62 54
 
63 55
     def draw(self) -> None:
64 56
         super().draw()
57
+
58
+
59
+class BackgroundLayer(cocos.layer.Layer):
60
+    def __init__(
61
+        self,
62
+        layer_manager: LayerManager,
63
+        background_sprite: cocos.sprite.Sprite,
64
+    ) -> None:
65
+        super().__init__()
66
+        self.layer_manager = layer_manager
67
+        self.background_sprite = background_sprite
68
+        self.last_interior_draw_timestamp = 0
69
+        self.interior_manager = InteriorManager(TileMap('opencombat/maps/003/003.tmx'))
70
+
71
+    def draw(self, *args, **kwargs):
72
+        super().draw(*args, **kwargs)
65 73
         self.draw_interiors()
66 74
 
67 75
     def draw_interiors(self):
68
-        # TODO BS 20171213: Into other layer !
69 76
         now = time.time()
70 77
         # FIXME: config
71
-        if now - self.last_interior_draw > 2:
72
-            self.last_interior_draw = now
78
+        if now - self.last_interior_draw_timestamp > 2:
79
+            self.last_interior_draw_timestamp = now
73 80
             subject_grid_positions = [
74 81
                 a.subject.position for a
75 82
                 in self.layer_manager.subject_layer.subjects_index.values()
76 83
             ]
77
-            interiors = self.interior_manager.get_interiors(where_positions=subject_grid_positions)
84
+            interiors = self.interior_manager.get_interiors(
85
+                where_positions=subject_grid_positions)
78 86
 
79 87
             if interiors:
80 88
                 # FIXME: hardcoded
@@ -83,7 +91,7 @@ class EditLayer(BaseEditLayer):
83 91
                 # FIXME: tile height/width !
84 92
                 self.interior_manager.update_image_for_interiors(image, interiors, 8, 8)
85 93
                 image.save(image_fake_file, format='PNG')
86
-                self.layer_manager.background_sprite.image = pyglet.image.load(
94
+                self.background_sprite.image = pyglet.image.load(
87 95
                     'new_background.png',
88 96
                     file=image_fake_file,
89 97
                 )
@@ -105,7 +113,7 @@ class TileLayerManager(LayerManager):
105 113
             interaction_manager,
106 114
             gui,
107 115
         )
108
-        self.background_sprite = None  # type: cocos.sprite.Sprite
116
+        self.background_layer = None  # type: BackgroundLayer
109 117
         self.interior_sprite = None  # type: cocos.sprite.Sprite
110 118
         self.ground_layer = None  # type: cocos.tiles.RectMapLayer
111 119
         self.top_layer = None  # type: cocos.tiles.RectMapLayer
@@ -113,23 +121,32 @@ class TileLayerManager(LayerManager):
113 121
     def init(self) -> None:
114 122
         super().init()
115 123
         self.interior_sprite = self.middleware.get_interior_sprite()
116
-        self.background_sprite = self.middleware.get_background_sprite()
124
+        background_sprite = self.middleware.get_background_sprite()
125
+        self.background_layer = BackgroundLayer(self, background_sprite)
126
+        self.background_layer.add(background_sprite)
117 127
         self.ground_layer = self.middleware.get_ground_layer()
118 128
         self.top_layer = self.middleware.get_top_layer()
119 129
 
120 130
     def connect_layers(self) -> None:
121 131
         self.main_layer.add(self.interior_sprite)
122
-        self.main_layer.add(self.background_sprite)
132
+        self.main_layer.add(self.background_layer)
123 133
         self.main_layer.add(self.ground_layer)
124 134
         super().connect_layers()
125 135
         self.main_layer.add(self.top_layer)
126 136
 
127 137
     def center(self) -> None:
128 138
         super().center()
129
-        self.interior_sprite.position = 0 + (self.interior_sprite.width / 2), 0 + (self.interior_sprite.height / 2)  # nopep8
130
-        self.background_sprite.position = 0 + (self.background_sprite.width / 2), 0 + (self.background_sprite.height/2)  # nopep8
131
-        self.ground_layer.set_view(0, 0, self.ground_layer.px_width, self.ground_layer.px_height,)  # nopep8
132
-        self.top_layer.set_view(0, 0, self.top_layer.px_width, self.top_layer.px_height)
139
+        self.interior_sprite.position = \
140
+            0 + (self.interior_sprite.width / 2), 0 + (self.interior_sprite.height / 2)
141
+        self.background_layer.background_sprite.position = \
142
+            0 + (self.background_layer.background_sprite.width / 2), 0 +\
143
+            (self.background_layer.background_sprite.height/2)
144
+        self.ground_layer.set_view(
145
+            0, 0, self.ground_layer.px_width, self.ground_layer.px_height,
146
+        )
147
+        self.top_layer.set_view(
148
+            0, 0, self.top_layer.px_width, self.top_layer.px_height,
149
+        )
133 150
 
134 151
 
135 152
 # TODO: Move into synergine2cocos2d