batframework 1.0.8a3__py3-none-any.whl → 1.0.8a4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -181,6 +181,6 @@ class InteractiveWidget(Widget):
181
181
  pygame.draw.rect(
182
182
  camera.surface,
183
183
  "white",
184
- self.rect.move(-camera.rect.x, -camera.rect.y).inflate(delta, delta),
184
+ self.rect.move(-camera.rect.x, -camera.rect.y),#.inflate(delta, delta),
185
185
  1,
186
186
  )
batFramework/gui/label.py CHANGED
@@ -101,6 +101,12 @@ class Label(Shape):
101
101
  self.dirty_surface = True
102
102
  return self
103
103
 
104
+ def set_text_outline_mask_size(self,size:tuple[int,int])->Self:
105
+ old_size = self._text_outline_mask.get_size()
106
+ m = [[self._text_outline_mask.get_at((x,y)) for x in range(min(old_size[0],size[0]))] for y in range(min(old_size[1],size[1]))]
107
+ self._text_outline_mask = pygame.Mask(size, fill=True)
108
+ self.set_text_outline_matrix(m)
109
+
104
110
  def set_text_outline_matrix(self, matrix: list[list[0 | 1]]) -> Self:
105
111
  if matrix is None:
106
112
  matrix = [[0 for _ in range(3)] for _ in range(3)]
@@ -125,12 +131,12 @@ class Label(Shape):
125
131
  self.dirty_surface = True
126
132
  return self
127
133
 
128
- def set_alignment(self, alignment: bf.alignment) -> "Label":
134
+ def set_alignment(self, alignment: bf.alignment) -> Self:
129
135
  self.alignment = alignment
130
136
  self.dirty_surface = True
131
137
  return self
132
138
 
133
- def set_auto_wraplength(self, val: bool) -> "Label":
139
+ def set_auto_wraplength(self, val: bool) -> Self:
134
140
  self.auto_wraplength = val
135
141
  if self.autoresize_h or self.autoresize_w:
136
142
  self.dirty_shape = True
@@ -186,18 +192,7 @@ class Label(Shape):
186
192
  if not (self.autoresize_w or self.autoresize_h):
187
193
  return self.rect.size
188
194
  if not self.text_rect:
189
- params = {
190
- "font_name": self.font_object.name,
191
- "text": self.text,
192
- "antialias": False,
193
- "color": "white",
194
- "bgcolor": "black", # if (self.has_alpha_color() or self.draw_mode == bf.drawMode.TEXTURED) else self.color,
195
- "wraplength": (
196
- int(self.get_padded_width()) if self.auto_wraplength else 0
197
- ),
198
- }
199
-
200
- self.text_rect.size = self._render_font(params).get_size()
195
+ self.text_rect.size = self._get_text_rect_required_size()
201
196
  res = self.inflate_rect_by_padding((0, 0, *self.text_rect.size)).size
202
197
  # return res
203
198
  return res[0] if self.autoresize_w else self.rect.w, (
@@ -242,9 +237,7 @@ class Label(Shape):
242
237
  surf = self.font_object.render(**params)
243
238
 
244
239
  return surf
245
-
246
- def _build_layout(self) -> None:
247
-
240
+ def _get_text_rect_required_size(self):
248
241
  params = {
249
242
  "font_name": self.font_object.name,
250
243
  "text": self.text,
@@ -254,7 +247,13 @@ class Label(Shape):
254
247
  "wraplength": int(self.get_padded_width()) if self.auto_wraplength else 0,
255
248
  }
256
249
 
257
- self.text_rect.size = self._render_font(params).get_size()
250
+ size = self._render_font(params).get_size()
251
+ s = self._text_outline_mask.get_size()
252
+ return size[0] + s[0]//2, size[1] + s[1]//2
253
+ def _build_layout(self) -> None:
254
+
255
+ self.text_rect.size = self._get_text_rect_required_size()
256
+
258
257
  if self.autoresize_h or self.autoresize_w:
259
258
  target_rect = self.inflate_rect_by_padding((0, 0, *self.text_rect.size))
260
259
  if not self.autoresize_w:
@@ -268,6 +267,10 @@ class Label(Shape):
268
267
  padded = self.get_padded_rect().move(-self.rect.x, -self.rect.y)
269
268
  self.align_text(self.text_rect, padded, self.alignment)
270
269
 
270
+ def _get_outline_offset(self)->tuple[int,int]:
271
+ mask_size = self._text_outline_mask.get_size()
272
+ return mask_size[0]//2,mask_size[1]//2
273
+
271
274
  def _paint_text(self) -> None:
272
275
  if self.font_object is None:
273
276
  print(f"No font for widget with text : '{self}' :(")
@@ -291,15 +294,16 @@ class Label(Shape):
291
294
  )
292
295
 
293
296
  l = []
297
+ outline_offset = self._get_outline_offset()
294
298
  if self.show_text_outline:
295
299
  l.append(
296
300
  (
297
301
  self.text_outline_surface,
298
- self.text_rect.move(-1, self.relief - self.get_relief() - 1),
302
+ self.text_rect.move(0, self.relief - self.get_relief()),
299
303
  )
300
304
  )
301
305
  l.append(
302
- (self.text_surface, self.text_rect.move(0, self.relief - self.get_relief()))
306
+ (self.text_surface, self.text_rect.move(outline_offset[0], self.relief - self.get_relief() + outline_offset[1]))
303
307
  )
304
308
  self.surface.fblits(l)
305
309
 
batFramework/gui/root.py CHANGED
@@ -95,6 +95,8 @@ class Root(InteractiveWidget):
95
95
  return self
96
96
 
97
97
  def do_handle_event(self, event):
98
+ if not self.parent_scene.get_sharedVar("player_has_control"):
99
+ return
98
100
  if self.focused:
99
101
  if event.type == pygame.KEYDOWN:
100
102
  if self.focused.on_key_down(event.key):
@@ -128,6 +130,8 @@ class Root(InteractiveWidget):
128
130
 
129
131
  def update(self, dt: float) -> None:
130
132
  super().update(dt)
133
+ if not self.parent_scene.get_sharedVar("player_has_control",True):
134
+ return
131
135
  old = self.hovered
132
136
  transposed = self.drawing_camera.screen_to_world(pygame.mouse.get_pos())
133
137
  self.hovered = self.top_at(*transposed) if self.top_at(*transposed) else None
@@ -139,8 +143,10 @@ class Root(InteractiveWidget):
139
143
  if self.hovered and isinstance(self.hovered, InteractiveWidget):
140
144
  self.hovered.on_enter()
141
145
 
142
- def draw(self, camera: bf.Camera) -> int:
146
+ def draw(self, camera: bf.Camera) -> None:
143
147
  super().draw(camera)
148
+ if not self.parent_scene.get_sharedVar("player_has_control"):
149
+ return
144
150
  if (
145
151
  self.parent_scene
146
152
  and self.parent_scene.active
batFramework/gui/shape.py CHANGED
@@ -10,7 +10,7 @@ class Shape(Widget):
10
10
  super().__init__(size=size, convert_alpha=True)
11
11
  self.color = (0, 0, 0, 0)
12
12
  self.border_radius: list[int] = [0]
13
- self.outline: int = 0
13
+ self.outline_width: int = 0
14
14
  self.outline_color: tuple[int, int, int] | str = (0, 0, 0, 255)
15
15
  self.texture_surface = None
16
16
  self.texture_subsize = (0, 0)
@@ -97,7 +97,7 @@ class Shape(Widget):
97
97
  return self
98
98
 
99
99
  def set_outline_width(self, value: int) -> Self:
100
- self.outline = value
100
+ self.outline_width = value
101
101
  self.dirty_surface = True
102
102
  return self
103
103
 
@@ -107,11 +107,11 @@ class Shape(Widget):
107
107
  return
108
108
  if self.border_radius == [0]:
109
109
  self._paint_shape()
110
- if self.outline:
110
+ if self.outline_width:
111
111
  self._paint_outline()
112
112
  else:
113
113
  self._paint_rounded_shape()
114
- if self.outline:
114
+ if self.outline_width:
115
115
  self._paint_rounded_outline()
116
116
 
117
117
  def _paint_textured(self) -> None:
@@ -223,17 +223,23 @@ class Shape(Widget):
223
223
  return pygame.FRect(0, self.rect.h - self.relief, self.rect.w, self.relief)
224
224
 
225
225
  def _paint_shape(self) -> None:
226
- self.surface.fill((0, 0, 0, 0))
227
- self.surface.fill(self.shadow_color, self._get_base_rect())
228
- self.surface.fill(self.color, self._get_elevated_rect())
226
+ if self.relief!=0:
227
+ self.surface.fill((0, 0, 0, 0))
228
+ self.surface.fill(self.shadow_color, self._get_base_rect())
229
+ self.surface.fill(self.color, self._get_elevated_rect())
230
+ else:
231
+ self.surface.fill(self.color, self._get_elevated_rect())
229
232
 
230
233
  def _paint_rounded_shape(self) -> None:
231
234
  self.surface.fill((0, 0, 0, 0))
232
235
  e = self._get_elevated_rect()
233
- b = e.copy()
234
- b.bottom = self.rect.h
235
- pygame.draw.rect(self.surface, self.shadow_color, b, 0, *self.border_radius)
236
- pygame.draw.rect(self.surface, self.color, e, 0, *self.border_radius)
236
+ if self.relief != 0:
237
+ b = e.copy()
238
+ b.bottom = self.rect.h
239
+ pygame.draw.rect(self.surface, self.shadow_color, b, 0, *self.border_radius)
240
+ pygame.draw.rect(self.surface, self.color, e, 0, *self.border_radius)
241
+ else:
242
+ pygame.draw.rect(self.surface, self.color, e, 0, *self.border_radius)
237
243
 
238
244
  def _paint_outline(self) -> None:
239
245
  if self.relief:
@@ -246,7 +252,7 @@ class Shape(Widget):
246
252
  self.rect.w,
247
253
  self.rect.h - self.relief,
248
254
  ),
249
- self.outline,
255
+ self.outline_width,
250
256
  )
251
257
  pygame.draw.rect(
252
258
  self.surface,
@@ -257,7 +263,7 @@ class Shape(Widget):
257
263
  self.rect.w,
258
264
  self.rect.h - (self.relief - self.get_relief()),
259
265
  ),
260
- self.outline,
266
+ self.outline_width,
261
267
  )
262
268
 
263
269
  def _paint_rounded_outline(self) -> None:
@@ -269,7 +275,7 @@ class Shape(Widget):
269
275
  self.surface,
270
276
  self.outline_color,
271
277
  e,
272
- self.outline,
278
+ self.outline_width,
273
279
  *self.border_radius,
274
280
  )
275
281
  if self.relief:
@@ -277,6 +283,6 @@ class Shape(Widget):
277
283
  self.surface,
278
284
  self.outline_color,
279
285
  b,
280
- self.outline,
286
+ self.outline_width,
281
287
  *self.border_radius,
282
288
  )
@@ -11,6 +11,7 @@ class SliderHandle(Indicator, DraggableWidget):
11
11
  def __init__(self):
12
12
  super().__init__()
13
13
  self.set_color(bf.color.CLOUD_SHADE)
14
+ self.old_key_repeat: tuple = (0, 0)
14
15
 
15
16
  def __str__(self) -> str:
16
17
  return "SliderHandle"
@@ -68,8 +69,6 @@ class Slider(Button):
68
69
  self.add(self.meter, self.handle)
69
70
  self.meter.set_debug_color(bf.color.RED)
70
71
  self.set_value(default_value, True)
71
- # print(self.handle.rect)
72
- # self.handle.set_visible(False)
73
72
 
74
73
  def set_visible(self, value: bool) -> Self:
75
74
  self.handle.set_visible(value)
@@ -84,20 +83,19 @@ class Slider(Button):
84
83
  self.gap = value
85
84
  return self
86
85
 
86
+ def do_on_get_focus(self) -> None:
87
+ super().do_on_get_focus()
88
+ self.old_key_repeat = pygame.key.get_repeat()
89
+ pygame.key.set_repeat(200, 50)
90
+
91
+ def do_on_lose_focus(self) -> None:
92
+ super().do_on_lose_focus()
93
+ pygame.key.set_repeat(*self.old_key_repeat)
94
+
87
95
  def get_min_required_size(self) -> tuple[float, float]:
88
96
  gap = self.gap if self.text else 0
89
97
  if not self.text_rect:
90
- params = {
91
- "font_name": self.font_object.name,
92
- "text": self.text,
93
- "antialias": False,
94
- "color": "white",
95
- "bgcolor": "black", # if (self.has_alpha_color() or self.draw_mode == bf.drawMode.TEXTURED) else self.color,
96
- "wraplength": (
97
- int(self.get_padded_width()) if self.auto_wraplength else 0
98
- ),
99
- }
100
- self.text_rect.size = self._render_font(params).get_size()
98
+ self.text_rect.size = self._get_text_rect_required_size()
101
99
  w, h = self.text_rect.size
102
100
  return self.inflate_rect_by_padding((0, 0, w + gap + self.meter.rect.w, h)).size
103
101
 
@@ -134,10 +132,8 @@ class Slider(Button):
134
132
  def do_on_key_down(self, key):
135
133
  if key == pygame.K_RIGHT:
136
134
  self.set_value(self.meter.get_value() + self.meter.step)
137
- bf.AudioManager().play_sound(self.click_down_sound)
138
135
  elif key == pygame.K_LEFT:
139
136
  self.set_value(self.meter.get_value() - self.meter.step)
140
- bf.AudioManager().play_sound(self.click_down_sound)
141
137
 
142
138
  def do_on_click_down(self, button) -> None:
143
139
  if button == 1:
@@ -151,8 +147,6 @@ class Slider(Button):
151
147
  value_range = self.meter.get_range()
152
148
  value = round(value / self.meter.step) * self.meter.step
153
149
  position_ratio = (value - self.meter.min_value) / value_range
154
- # print(self.handle.rect)
155
- # print(rect.left + (self.handle.rect.w/2) + position_ratio * (rect.width - self.handle.rect.w),self.handle.rect.w,self.rect.right)
156
150
  return (
157
151
  rect.left
158
152
  + (self.handle.rect.w / 2)
@@ -178,16 +172,7 @@ class Slider(Button):
178
172
 
179
173
  gap = self.gap if self.text else 0
180
174
 
181
- params = {
182
- "font_name": self.font_object.name,
183
- "text": self.text,
184
- "antialias": False,
185
- "color": "white",
186
- "bgcolor": "black", # if (self.has_alpha_color() or self.draw_mode == bf.drawMode.TEXTURED) else self.color,
187
- "wraplength": int(self.get_padded_width()) if self.auto_wraplength else 0,
188
- }
189
-
190
- self.text_rect.size = self._render_font(params).get_size()
175
+ self.text_rect.size = self._get_text_rect_required_size()
191
176
 
192
177
  meter_size = [self.text_rect.h * 10, self.font_object.point_size]
193
178
  if not self.autoresize_w:
@@ -209,20 +194,19 @@ class Slider(Button):
209
194
  return
210
195
 
211
196
  # ------------------------------------ size is ok
212
- padded = self.get_padded_rect().move(-self.rect.x, -self.rect.y)
197
+ padded_rect = self.get_padded_rect()
198
+ padded_relative = padded_rect.move(-self.rect.x, -self.rect.y)
213
199
 
214
- self.meter.set_size_if_autoresize(meter_size)
215
- handle_size = 2 * [self.meter.get_padded_height()]
216
200
 
217
- self.handle.set_size_if_autoresize(handle_size)
201
+ self.meter.set_size_if_autoresize(meter_size)
218
202
 
219
- self.align_text(tmp_rect, padded, self.alignment)
203
+ self.align_text(tmp_rect, padded_relative, self.alignment)
220
204
  self.text_rect.midleft = tmp_rect.midleft
221
205
 
222
206
  if self.text:
223
207
  match self.spacing:
224
208
  case bf.spacing.MAX:
225
- gap = padded.w - self.text_rect.w - self.meter.rect.w
209
+ gap = padded_relative.right - self.text_rect.right - self.meter.rect.w
226
210
  case bf.spacing.MIN:
227
211
  gap = 0
228
212
 
@@ -42,10 +42,10 @@ class TextInput(Label, InteractiveWidget):
42
42
  pygame.mouse.set_cursor(bf.const.DEFAULT_CURSOR)
43
43
 
44
44
  def do_on_get_focus(self):
45
- self.old_key_repeat = pygame.key.get_repeat()
46
45
  self.cursor_timer.resume()
47
46
  self._cursor_toggle(True)
48
47
  self.set_cursor_position(len(self.get_text()))
48
+ self.old_key_repeat = pygame.key.get_repeat()
49
49
  pygame.key.set_repeat(200, 50)
50
50
 
51
51
  def do_on_lose_focus(self):
@@ -13,6 +13,7 @@ class Toggle(Button):
13
13
  self.spacing: bf.spacing = bf.spacing.MANUAL
14
14
  super().__init__(text, callback)
15
15
  self.add(self.indicator)
16
+ self.set_clip_children(False)
16
17
  # self.set_gap(int(max(4, self.get_padded_width() / 3)))
17
18
 
18
19
  def set_visible(self, value: bool) -> Self:
@@ -53,24 +54,16 @@ class Toggle(Button):
53
54
 
54
55
  def get_min_required_size(self) -> tuple[float, float]:
55
56
  if not self.text_rect:
56
- params = {
57
- "font_name": self.font_object.name,
58
- "text": self.text,
59
- "antialias": False,
60
- "color": "white",
61
- "bgcolor": "black", # if (self.has_alpha_color() or self.draw_mode == bf.drawMode.TEXTURED) else self.color,
62
- "wraplength": (
63
- int(self.get_padded_width()) if self.auto_wraplength else 0
64
- ),
65
- }
66
- self.text_rect.size = self._render_font(params).get_size()
57
+ self.text_rect.size = self._get_text_rect_required_size()
67
58
  w, h = self.text_rect.size
59
+ outline_offset = self._get_outline_offset()
60
+
68
61
  size = (
69
62
  max(
70
63
  self.indicator.rect.w,
71
64
  w + self.font_object.point_size + (self.gap if self.text else 0),
72
65
  ),
73
- self.text_rect.h,
66
+ self.text_rect.h + outline_offset[1],
74
67
  )
75
68
  return self.inflate_rect_by_padding((0, 0, *size)).size
76
69
 
@@ -78,24 +71,19 @@ class Toggle(Button):
78
71
 
79
72
  gap = self.gap if self.text else 0
80
73
 
81
- params = {
82
- "font_name": self.font_object.name,
83
- "text": self.text,
84
- "antialias": False,
85
- "color": "white",
86
- "bgcolor": "black", # if (self.has_alpha_color() or self.draw_mode == bf.drawMode.TEXTURED) else self.color,
87
- "wraplength": int(self.get_padded_width()) if self.auto_wraplength else 0,
88
- }
89
- self.text_rect.size = self._render_font(params).get_size()
90
-
91
- indicator_height = self.font_object.point_size
74
+ self.text_rect.size = self._get_text_rect_required_size()
92
75
 
93
- self.indicator.set_size((indicator_height, indicator_height))
76
+ outline_offset = self._get_outline_offset()
94
77
 
95
78
  tmp_rect = pygame.FRect(
96
- 0, 0, self.text_rect.w + gap + indicator_height, self.text_rect.h
79
+ 0, 0,
80
+ self.text_rect.w + gap + self.indicator.rect.w + outline_offset[0],
81
+ self.text_rect.h + outline_offset[1]
97
82
  )
98
83
 
84
+ point_size = min(tmp_rect.h, self.font_object.point_size)
85
+ self.indicator.set_size_if_autoresize((point_size,point_size))
86
+
99
87
  if self.autoresize_h or self.autoresize_w:
100
88
  target_rect = self.inflate_rect_by_padding(tmp_rect)
101
89
  if not self.autoresize_w:
@@ -107,20 +95,20 @@ class Toggle(Button):
107
95
  self.build()
108
96
  return
109
97
 
110
- padded = self.get_padded_rect().move(-self.rect.x, -self.rect.y)
111
98
 
112
- self.align_text(tmp_rect, padded, self.alignment)
99
+ padded_rect = self.get_padded_rect()
100
+ padded_relative = padded_rect.move(-self.rect.x, -self.rect.y)
101
+
102
+
103
+
104
+ self.align_text(tmp_rect, padded_relative, self.alignment)
113
105
  self.text_rect.midleft = tmp_rect.midleft
114
106
  if self.text:
115
107
  match self.spacing:
116
108
  case bf.spacing.MAX:
117
- gap = padded.w - self.text_rect.w - self.indicator.rect.w
109
+ gap = padded_relative.right - self.text_rect.right - self.indicator.rect.w
118
110
  case bf.spacing.MIN:
119
111
  gap = 0
120
112
 
121
- self.indicator.set_position(
122
- *self.text_rect.move(
123
- self.rect.x + gap,
124
- self.rect.y + (self.text_rect.h / 2) - self.indicator.rect.h / 2,
125
- ).topright
126
- )
113
+ self.indicator.rect.x = self.rect.x + self.text_rect.right + gap
114
+ self.indicator.rect.centery = self.rect.y + padded_relative.top + self.text_rect.h // 2
@@ -188,7 +188,7 @@ class Widget(bf.Entity, metaclass=WidgetMeta):
188
188
  seen = set()
189
189
  result = []
190
190
  for c in self.constraints:
191
- if c.name not in seen:
191
+ if not any(c == o for o in seen):
192
192
  result.append(c)
193
193
  seen.add(c.name)
194
194
  self.constraints = result
@@ -271,9 +271,7 @@ class Widget(bf.Entity, metaclass=WidgetMeta):
271
271
  size = list(size)
272
272
  size[0] = size[0] if self.autoresize_w else None
273
273
  size[1] = size[1] if self.autoresize_h else None
274
-
275
274
  self.set_size(size)
276
-
277
275
  return self
278
276
 
279
277
  def set_size(self, size: tuple) -> Self:
@@ -305,10 +303,12 @@ class Widget(bf.Entity, metaclass=WidgetMeta):
305
303
  def build(self) -> None:
306
304
  new_size = tuple(map(int, self.rect.size))
307
305
  if self.surface.get_size() != new_size:
306
+ old_alpha = self.surface.get_alpha()
308
307
  new_size = [max(0, i) for i in new_size]
309
308
  self.surface = pygame.Surface(new_size, self.surface_flags)
310
309
  if self.convert_alpha:
311
310
  self.surface = self.surface.convert_alpha()
311
+ self.surface.set_alpha(old_alpha)
312
312
 
313
313
  def paint(self) -> None:
314
314
  self.surface.fill((0, 0, 0, 0))
batFramework/particle.py CHANGED
@@ -36,8 +36,9 @@ class BasicParticle(TimedParticle):
36
36
  **kwargs,
37
37
  ):
38
38
  super().__init__(duration)
39
- self.rect = pygame.FRect(*start_pos, *size)
40
- self.surface = pygame.Surface(size).convert()
39
+ self.rect = pygame.FRect(0,0, *size)
40
+ self.rect.center = start_pos
41
+ self.surface = pygame.Surface(size)
41
42
  self.velocity = Vector2(start_vel)
42
43
  if color:
43
44
  self.surface.fill(color)
@@ -57,7 +58,6 @@ class BasicParticle(TimedParticle):
57
58
 
58
59
  class DirectionalParticle(BasicParticle):
59
60
  def start(self):
60
- self.surface = self.surface.convert_alpha()
61
61
  self.original_surface = self.surface.copy()
62
62
 
63
63
  def update_surface(self):
@@ -96,6 +96,6 @@ class ParticleGenerator(bf.Entity):
96
96
 
97
97
  def draw(self, camera) -> bool:
98
98
  camera.surface.fblits(
99
- [(p.surface, camera.world_to_screen(p.rect).center) for p in self.particles]
99
+ [(p.surface, camera.world_to_screen(p.rect)) for p in self.particles]
100
100
  )
101
101
  return len(self.particles)
@@ -3,6 +3,7 @@ import os
3
3
  import pygame
4
4
  import sys
5
5
  import json
6
+ from typing import Any
6
7
  from .utils import Singleton
7
8
 
8
9
  if getattr(sys, "frozen", False):
@@ -16,6 +17,7 @@ else:
16
17
 
17
18
  class ResourceManager(metaclass=Singleton):
18
19
  def __init__(self):
20
+ self.shared_variables: dict[str,Any] = {}
19
21
  self.convert_image_cache = {}
20
22
  self.convert_alpha_image_cache = {}
21
23
  self.sound_cache = {}
@@ -33,11 +35,11 @@ class ResourceManager(metaclass=Singleton):
33
35
  # print(f"Loaded image : '{file_path}'")
34
36
 
35
37
  elif file.lower().endswith((".mp3", ".wav")):
36
- bf.AudioManager().load_sound(file.lower().split(".")[0], file_path)
38
+ bf.AudioManager().load_sound(file.split(".")[0], file_path)
37
39
  # print(f"Loaded sound : '{file_path}'")
38
40
 
39
41
  elif file.lower().endswith((".ttf", ".otf")):
40
- bf.FontManager().load_font(file_path, file.lower().split(".")[0])
42
+ bf.FontManager().load_font(file_path, file.split(".")[0])
41
43
  # print(f"Loaded font : '{file_path}'")
42
44
 
43
45
  print(f"Loaded resources in directory : '{path}'")
@@ -82,3 +84,17 @@ class ResourceManager(metaclass=Singleton):
82
84
  return True
83
85
  except FileNotFoundError:
84
86
  return False
87
+
88
+
89
+ def set_sharedVar(self, name, value) -> bool:
90
+ """
91
+ Set a shared variable of any type. This will be accessible (read/write) from any scene
92
+ """
93
+ self.shared_variables[name] = value
94
+ return True
95
+
96
+ def get_sharedVar(self, name, error_value=None):
97
+ """
98
+ Get a shared variable
99
+ """
100
+ return self.shared_variables.get(name, error_value)