batframework 1.0.9a11__py3-none-any.whl → 1.0.9a13__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.
- batFramework/__init__.py +3 -11
- batFramework/action.py +280 -279
- batFramework/actionContainer.py +105 -82
- batFramework/animatedSprite.py +80 -58
- batFramework/animation.py +91 -77
- batFramework/audioManager.py +156 -131
- batFramework/baseScene.py +249 -240
- batFramework/camera.py +245 -317
- batFramework/constants.py +57 -51
- batFramework/cutscene.py +239 -253
- batFramework/cutsceneManager.py +34 -34
- batFramework/drawable.py +107 -77
- batFramework/dynamicEntity.py +30 -30
- batFramework/easingController.py +58 -58
- batFramework/entity.py +130 -130
- batFramework/enums.py +171 -135
- batFramework/fontManager.py +65 -65
- batFramework/gui/__init__.py +28 -25
- batFramework/gui/animatedLabel.py +90 -89
- batFramework/gui/button.py +17 -17
- batFramework/gui/clickableWidget.py +244 -244
- batFramework/gui/collapseContainer.py +98 -0
- batFramework/gui/constraints/__init__.py +1 -1
- batFramework/gui/constraints/constraints.py +1066 -980
- batFramework/gui/container.py +220 -206
- batFramework/gui/debugger.py +140 -130
- batFramework/gui/draggableWidget.py +63 -44
- batFramework/gui/image.py +61 -58
- batFramework/gui/indicator.py +116 -113
- batFramework/gui/interactiveWidget.py +243 -239
- batFramework/gui/label.py +147 -344
- batFramework/gui/layout.py +442 -429
- batFramework/gui/meter.py +155 -96
- batFramework/gui/radioButton.py +43 -35
- batFramework/gui/root.py +228 -228
- batFramework/gui/scrollingContainer.py +282 -0
- batFramework/gui/selector.py +232 -250
- batFramework/gui/shape.py +286 -276
- batFramework/gui/slider.py +353 -397
- batFramework/gui/style.py +10 -10
- batFramework/gui/styleManager.py +49 -54
- batFramework/gui/syncedVar.py +43 -49
- batFramework/gui/textInput.py +331 -306
- batFramework/gui/textWidget.py +308 -0
- batFramework/gui/toggle.py +140 -128
- batFramework/gui/tooltip.py +35 -30
- batFramework/gui/widget.py +546 -521
- batFramework/manager.py +131 -134
- batFramework/particle.py +118 -118
- batFramework/propertyEaser.py +79 -79
- batFramework/renderGroup.py +34 -34
- batFramework/resourceManager.py +130 -130
- batFramework/scene.py +31 -31
- batFramework/sceneLayer.py +134 -138
- batFramework/sceneManager.py +200 -197
- batFramework/scrollingSprite.py +115 -115
- batFramework/sprite.py +46 -51
- batFramework/stateMachine.py +49 -54
- batFramework/templates/__init__.py +2 -1
- batFramework/templates/character.py +15 -0
- batFramework/templates/controller.py +158 -97
- batFramework/templates/stateMachine.py +39 -0
- batFramework/tileset.py +46 -46
- batFramework/timeManager.py +213 -213
- batFramework/transition.py +162 -162
- batFramework/triggerZone.py +22 -22
- batFramework/utils.py +306 -306
- {batframework-1.0.9a11.dist-info → batframework-1.0.9a13.dist-info}/LICENSE +20 -20
- {batframework-1.0.9a11.dist-info → batframework-1.0.9a13.dist-info}/METADATA +24 -17
- batframework-1.0.9a13.dist-info/RECORD +72 -0
- batframework-1.0.9a11.dist-info/RECORD +0 -67
- {batframework-1.0.9a11.dist-info → batframework-1.0.9a13.dist-info}/WHEEL +0 -0
- {batframework-1.0.9a11.dist-info → batframework-1.0.9a13.dist-info}/top_level.txt +0 -0
batFramework/gui/debugger.py
CHANGED
@@ -1,130 +1,140 @@
|
|
1
|
-
from .label import Label
|
2
|
-
from typing import Self,Callable,Any
|
3
|
-
import batFramework as bf
|
4
|
-
import pygame
|
5
|
-
import sys
|
6
|
-
|
7
|
-
|
8
|
-
def convert_to_int(*args):
|
9
|
-
return [int(arg) for arg in args]
|
10
|
-
|
11
|
-
|
12
|
-
class Debugger(Label):
|
13
|
-
def __init__(self) -> None:
|
14
|
-
super().__init__("")
|
15
|
-
self.
|
16
|
-
self.
|
17
|
-
self.
|
18
|
-
self.
|
19
|
-
self.
|
20
|
-
self.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
self.
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
self.
|
79
|
-
|
80
|
-
|
81
|
-
self.
|
82
|
-
|
83
|
-
|
84
|
-
if
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
1
|
+
from .label import Label
|
2
|
+
from typing import Self,Callable,Any
|
3
|
+
import batFramework as bf
|
4
|
+
import pygame
|
5
|
+
import sys
|
6
|
+
|
7
|
+
|
8
|
+
def convert_to_int(*args):
|
9
|
+
return [int(arg) for arg in args]
|
10
|
+
|
11
|
+
|
12
|
+
class Debugger(Label):
|
13
|
+
def __init__(self) -> None:
|
14
|
+
super().__init__("")
|
15
|
+
self.root_link = None
|
16
|
+
self.static_data: dict[str,Any] = {}
|
17
|
+
self.dynamic_data: dict[str,Callable[[],str]] = {}
|
18
|
+
self.refresh_interval :float = .01
|
19
|
+
self.refresh_counter: float = 0
|
20
|
+
self.add_tags("debugger")
|
21
|
+
self.set_visible(False)
|
22
|
+
|
23
|
+
|
24
|
+
def set_parent(self, parent):
|
25
|
+
super().set_parent(parent)
|
26
|
+
self.root_link = self.get_root()
|
27
|
+
|
28
|
+
def set_refresh_rate(self, value: float) -> Self:
|
29
|
+
"""
|
30
|
+
seet refresh interval, time in seconds between each refresh of the debugger
|
31
|
+
"""
|
32
|
+
self.refresh_interval = value
|
33
|
+
self.refresh_counter = 0
|
34
|
+
return self
|
35
|
+
|
36
|
+
def add_static(self, key: str, data):
|
37
|
+
self.static_data[key] = str(data)
|
38
|
+
self.update_text()
|
39
|
+
|
40
|
+
def add_dynamic(self, key: str, func:Callable[[],str]) -> None:
|
41
|
+
self.dynamic_data[key] = func
|
42
|
+
self.update_text()
|
43
|
+
|
44
|
+
def remove_static(self, key:str) -> bool:
|
45
|
+
try:
|
46
|
+
self.static_data.pop(key)
|
47
|
+
return True
|
48
|
+
except KeyError:
|
49
|
+
return False
|
50
|
+
|
51
|
+
def remove_dynamic(self, key:str) -> bool:
|
52
|
+
try:
|
53
|
+
self.dynamic_data.pop(key)
|
54
|
+
return True
|
55
|
+
except KeyError:
|
56
|
+
return False
|
57
|
+
|
58
|
+
def set_parent_scene(self, scene) -> Self:
|
59
|
+
super().set_parent_scene(scene)
|
60
|
+
self.set_render_order(sys.maxsize-100)
|
61
|
+
self.update_text()
|
62
|
+
return self
|
63
|
+
|
64
|
+
def set_text(self, text: str) -> Self:
|
65
|
+
return super().set_text(text)
|
66
|
+
|
67
|
+
def update_text(self) -> None:
|
68
|
+
if not self.parent_scene:
|
69
|
+
return
|
70
|
+
|
71
|
+
d = "\n".join(
|
72
|
+
key + ":" + data if key != "" else data
|
73
|
+
for key, data in self.static_data.items()
|
74
|
+
)
|
75
|
+
|
76
|
+
d2 = "\n".join(
|
77
|
+
key + ":" + str(data()) if key != "" else str(data())
|
78
|
+
for key, data in self.dynamic_data.items()
|
79
|
+
)
|
80
|
+
|
81
|
+
self.set_text("\n".join((d, d2)).strip())
|
82
|
+
|
83
|
+
def update(self, dt: float) -> None:
|
84
|
+
if not self.parent_scene:
|
85
|
+
return
|
86
|
+
|
87
|
+
if bf.ResourceManager().get_sharedVar("debug_mode") != bf.debugMode.DEBUGGER:
|
88
|
+
self.set_visible(False)
|
89
|
+
return
|
90
|
+
|
91
|
+
self.set_visible(True)
|
92
|
+
self.refresh_counter = self.refresh_counter + dt
|
93
|
+
|
94
|
+
if self.refresh_counter > self.refresh_interval:
|
95
|
+
self.refresh_counter = 0
|
96
|
+
self.update_text()
|
97
|
+
|
98
|
+
|
99
|
+
def __str__(self) -> str:
|
100
|
+
return "Debugger"
|
101
|
+
|
102
|
+
def top_at(self, x, y):
|
103
|
+
return None
|
104
|
+
|
105
|
+
|
106
|
+
class FPSDebugger(Debugger):
|
107
|
+
def __init__(self):
|
108
|
+
super().__init__()
|
109
|
+
|
110
|
+
def do_when_added(self):
|
111
|
+
if not self.parent_scene or not self.parent_scene.manager:
|
112
|
+
print("Debugger could not link to the manager")
|
113
|
+
return
|
114
|
+
manager_link = self.parent_scene.manager
|
115
|
+
self.add_dynamic("FPS", lambda: str(round(manager_link.get_fps())))
|
116
|
+
|
117
|
+
|
118
|
+
class BasicDebugger(FPSDebugger):
|
119
|
+
|
120
|
+
def do_when_added(self):
|
121
|
+
if not self.parent_scene or not self.parent_scene.manager:
|
122
|
+
print("Debugger could not link to the manager")
|
123
|
+
return
|
124
|
+
self.add_dynamic(
|
125
|
+
"Resolution", lambda: "x".join(str(i) for i in bf.const.RESOLUTION)
|
126
|
+
)
|
127
|
+
super().do_when_added()
|
128
|
+
self.add_dynamic("Mouse", pygame.mouse.get_pos)
|
129
|
+
|
130
|
+
if self.root_link is None:
|
131
|
+
return
|
132
|
+
|
133
|
+
|
134
|
+
self.add_dynamic(
|
135
|
+
"Hover",
|
136
|
+
lambda: (
|
137
|
+
str(self.root_link.hovered) if self.root_link.hovered else None
|
138
|
+
),
|
139
|
+
)
|
140
|
+
|
@@ -1,44 +1,63 @@
|
|
1
|
-
from .interactiveWidget import InteractiveWidget
|
2
|
-
import batFramework as bf
|
3
|
-
import pygame
|
4
|
-
|
5
|
-
|
6
|
-
class DraggableWidget(InteractiveWidget):
|
7
|
-
def __init__(self, *args, **kwargs) -> None:
|
8
|
-
self.drag_start = None
|
9
|
-
self.offset = None
|
10
|
-
self.click_mask = [True,False,False,False,False]
|
11
|
-
self.is_dragged : bool = False # the widget is following the mouse AND the mouse is in the widget
|
12
|
-
self.is_dragged_outside : bool = False # the widget is following the mouse BUT the mouse is NOT in the widget
|
13
|
-
super().__init__(*args, **kwargs)
|
14
|
-
|
15
|
-
def set_click_mask(self,b1=0,b2=0,b3=0,b4=0,b5=0):
|
16
|
-
self.click_mask = [b1,b2,b3,b4,b5]
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
self.
|
32
|
-
|
33
|
-
if self.is_dragged
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
1
|
+
from .interactiveWidget import InteractiveWidget
|
2
|
+
import batFramework as bf
|
3
|
+
import pygame
|
4
|
+
|
5
|
+
|
6
|
+
class DraggableWidget(InteractiveWidget):
|
7
|
+
def __init__(self, *args, **kwargs) -> None:
|
8
|
+
self.drag_start = None
|
9
|
+
self.offset = None
|
10
|
+
self.click_mask = [True,False,False,False,False]
|
11
|
+
self.is_dragged : bool = False # the widget is following the mouse AND the mouse is in the widget
|
12
|
+
self.is_dragged_outside : bool = False # the widget is following the mouse BUT the mouse is NOT in the widget
|
13
|
+
super().__init__(*args, **kwargs)
|
14
|
+
|
15
|
+
def set_click_mask(self,b1=0,b2=0,b3=0,b4=0,b5=0):
|
16
|
+
self.click_mask = [b1,b2,b3,b4,b5]
|
17
|
+
|
18
|
+
|
19
|
+
def do_on_drag(
|
20
|
+
self, drag_start_pos: tuple[float, float], drag_end_pos: tuple[float, float]
|
21
|
+
) -> None:
|
22
|
+
|
23
|
+
new_pos = drag_end_pos[0] - self.offset[0], drag_end_pos[1] - self.offset[1]
|
24
|
+
if self.rect.topleft != new_pos:
|
25
|
+
|
26
|
+
self.set_position(*new_pos)
|
27
|
+
|
28
|
+
def on_click_down(self, button, event=None):
|
29
|
+
if button < 1 or button > 5 :
|
30
|
+
return
|
31
|
+
self.is_clicked_down[button-1] = True
|
32
|
+
self.is_dragged = any(i==j and i== True for i,j in zip(self.is_clicked_down,self.click_mask))
|
33
|
+
if self.is_dragged:
|
34
|
+
event.consumed = True
|
35
|
+
self.do_on_click_down(button,event)
|
36
|
+
|
37
|
+
def on_click_up(self, button, event=None):
|
38
|
+
if button < 1 or button > 5 :
|
39
|
+
return
|
40
|
+
self.is_clicked_down[button-1] = False
|
41
|
+
self.is_dragged = any(i==j and i== True for i,j in zip(self.is_clicked_down,self.click_mask))
|
42
|
+
self.do_on_click_up(button,event)
|
43
|
+
|
44
|
+
def update(self, dt: float):
|
45
|
+
super().update(dt)
|
46
|
+
self.is_dragged_outside = any(i==j and i== True for i,j in zip(pygame.mouse.get_pressed(5),self.click_mask))
|
47
|
+
|
48
|
+
|
49
|
+
if self.is_dragged and self.is_dragged_outside:
|
50
|
+
x, y = self.parent_layer.camera.get_mouse_pos()
|
51
|
+
if self.drag_start == None:
|
52
|
+
self.offset = x - self.rect.x, y - self.rect.y
|
53
|
+
self.drag_start = x, y
|
54
|
+
else:
|
55
|
+
self.do_on_drag(self.drag_start, (x, y))
|
56
|
+
|
57
|
+
else:
|
58
|
+
self.drag_start = None
|
59
|
+
self.offset = None
|
60
|
+
self.is_clicked_down = [False]*5
|
61
|
+
|
62
|
+
if not self.is_dragged_outside:
|
63
|
+
self.is_dragged = False
|
batFramework/gui/image.py
CHANGED
@@ -1,58 +1,61 @@
|
|
1
|
-
import batFramework as bf
|
2
|
-
from .widget import Widget
|
3
|
-
from .shape import Shape
|
4
|
-
import pygame
|
5
|
-
from typing import Self
|
6
|
-
|
7
|
-
|
8
|
-
class Image(Shape):
|
9
|
-
def __init__(
|
10
|
-
self,
|
11
|
-
path: str = None,
|
12
|
-
convert_alpha=True,
|
13
|
-
):
|
14
|
-
self.original_surface = None
|
15
|
-
super().__init__(convert_alpha=convert_alpha)
|
16
|
-
if path is not None:
|
17
|
-
self.from_path(path)
|
18
|
-
|
19
|
-
def __str__(self) -> str:
|
20
|
-
return "Image"
|
21
|
-
|
22
|
-
def paint(self) -> None:
|
23
|
-
super().paint()
|
24
|
-
if self.original_surface is None:
|
25
|
-
return
|
26
|
-
padded = self.get_inner_rect().move(-self.rect.x,-self.rect.y)
|
27
|
-
target_size = padded.size
|
28
|
-
if self.original_surface.get_size() != target_size:
|
29
|
-
self.surface.blit(pygame.transform.scale(self.original_surface, target_size), padded.topleft)
|
30
|
-
else:
|
31
|
-
self.surface.blit(self.original_surface, padded.topleft)
|
32
|
-
|
33
|
-
def build(self) -> None:
|
34
|
-
if self.original_surface is not None:
|
35
|
-
self.set_size(
|
36
|
-
self.expand_rect_with_padding((0,0,*self.original_surface.get_size())).size
|
37
|
-
)
|
38
|
-
super().build()
|
39
|
-
|
40
|
-
|
41
|
-
def from_path(self, path: str) -> Self:
|
42
|
-
tmp = bf.ResourceManager().get_image(path, self.convert_alpha)
|
43
|
-
if tmp is None:
|
44
|
-
return self
|
45
|
-
self.original_surface = tmp
|
46
|
-
size = self.original_surface.get_size()
|
47
|
-
self.set_size(size)
|
48
|
-
self.
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
self.
|
57
|
-
self.
|
58
|
-
|
1
|
+
import batFramework as bf
|
2
|
+
from .widget import Widget
|
3
|
+
from .shape import Shape
|
4
|
+
import pygame
|
5
|
+
from typing import Self
|
6
|
+
|
7
|
+
|
8
|
+
class Image(Shape):
|
9
|
+
def __init__(
|
10
|
+
self,
|
11
|
+
path: str = None,
|
12
|
+
convert_alpha=True,
|
13
|
+
):
|
14
|
+
self.original_surface = None
|
15
|
+
super().__init__(convert_alpha=convert_alpha)
|
16
|
+
if path is not None:
|
17
|
+
self.from_path(path)
|
18
|
+
|
19
|
+
def __str__(self) -> str:
|
20
|
+
return "Image"
|
21
|
+
|
22
|
+
def paint(self) -> None:
|
23
|
+
super().paint()
|
24
|
+
if self.original_surface is None:
|
25
|
+
return
|
26
|
+
padded = self.get_inner_rect().move(-self.rect.x,-self.rect.y)
|
27
|
+
target_size = padded.size
|
28
|
+
if self.original_surface.get_size() != target_size:
|
29
|
+
self.surface.blit(pygame.transform.scale(self.original_surface, target_size), padded.topleft)
|
30
|
+
else:
|
31
|
+
self.surface.blit(self.original_surface, padded.topleft)
|
32
|
+
|
33
|
+
def build(self) -> None:
|
34
|
+
if self.original_surface is not None:
|
35
|
+
self.set_size(
|
36
|
+
self.expand_rect_with_padding((0,0,*self.original_surface.get_size())).size
|
37
|
+
)
|
38
|
+
super().build()
|
39
|
+
|
40
|
+
|
41
|
+
def from_path(self, path: str) -> Self:
|
42
|
+
tmp = bf.ResourceManager().get_image(path, self.convert_alpha)
|
43
|
+
if tmp is None:
|
44
|
+
return self
|
45
|
+
self.original_surface = tmp
|
46
|
+
# size = self.original_surface.get_size()
|
47
|
+
# self.set_size(size)
|
48
|
+
self.dirty_shape = True
|
49
|
+
self.dirty_surface = True
|
50
|
+
return self
|
51
|
+
|
52
|
+
def from_surface(self, surface: pygame.Surface) -> Self:
|
53
|
+
if surface is None:
|
54
|
+
return self
|
55
|
+
self.original_surface = surface
|
56
|
+
# size = self.original_surface.get_size()
|
57
|
+
# self.set_size(size)
|
58
|
+
self.dirty_shape = True
|
59
|
+
|
60
|
+
self.dirty_surface = True
|
61
|
+
return self
|