mima-engine 0.1.4__py3-none-any.whl → 0.2.0__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.

Potentially problematic release.


This version of mima-engine might be problematic. Click here for more details.

Files changed (80) hide show
  1. mima/__init__.py +1 -1
  2. mima/backend/pygame_assets.py +15 -9
  3. mima/backend/pygame_audio.py +5 -2
  4. mima/backend/pygame_backend.py +255 -57
  5. mima/backend/pygame_camera.py +63 -0
  6. mima/backend/pygame_events.py +331 -85
  7. mima/collision.py +182 -111
  8. mima/engine.py +155 -15
  9. mima/maps/tiled/tiled_map.py +3 -3
  10. mima/maps/tiled/tiled_tileset.py +1 -0
  11. mima/maps/tilemap.py +78 -15
  12. mima/maps/tileset.py +8 -2
  13. mima/maps/transition_map.py +6 -8
  14. mima/mode_engine.py +80 -0
  15. mima/objects/animated_sprite.py +23 -15
  16. mima/objects/attributes.py +3 -0
  17. mima/objects/creature.py +64 -25
  18. mima/objects/dynamic.py +30 -8
  19. mima/objects/effects/colorize_screen.py +22 -6
  20. mima/objects/effects/debug_box.py +124 -0
  21. mima/objects/effects/light.py +21 -30
  22. mima/objects/effects/show_sprite.py +39 -0
  23. mima/objects/effects/walking_on_grass.py +25 -7
  24. mima/objects/effects/walking_on_water.py +17 -6
  25. mima/objects/loader.py +24 -13
  26. mima/objects/projectile.py +21 -6
  27. mima/objects/sprite.py +7 -8
  28. mima/objects/world/color_gate.py +5 -2
  29. mima/objects/world/color_switch.py +12 -6
  30. mima/objects/world/container.py +17 -8
  31. mima/objects/world/floor_switch.py +8 -4
  32. mima/objects/world/gate.py +8 -5
  33. mima/objects/world/light_source.py +11 -9
  34. mima/objects/world/logic_gate.py +8 -7
  35. mima/objects/world/movable.py +72 -28
  36. mima/objects/world/oneway.py +14 -9
  37. mima/objects/world/pickup.py +10 -5
  38. mima/objects/world/switch.py +28 -25
  39. mima/objects/world/teleport.py +76 -55
  40. mima/scene_engine.py +19 -20
  41. mima/scripts/command.py +16 -2
  42. mima/scripts/commands/change_map.py +23 -4
  43. mima/scripts/commands/equip_weapon.py +23 -0
  44. mima/scripts/commands/give_item.py +5 -3
  45. mima/scripts/commands/move_map.py +9 -9
  46. mima/scripts/commands/parallel.py +16 -3
  47. mima/scripts/commands/present_item.py +7 -5
  48. mima/scripts/commands/screen_fade.py +30 -12
  49. mima/scripts/commands/serial.py +30 -7
  50. mima/scripts/commands/set_spawn_map.py +6 -3
  51. mima/scripts/commands/show_choices.py +16 -7
  52. mima/scripts/commands/show_dialog.py +110 -3
  53. mima/scripts/script_processor.py +41 -20
  54. mima/states/game_state.py +2 -0
  55. mima/states/memory.py +28 -0
  56. mima/states/quest.py +2 -3
  57. mima/types/keys.py +48 -0
  58. mima/types/mode.py +4 -10
  59. mima/types/player.py +9 -0
  60. mima/types/position.py +13 -0
  61. mima/types/tile_collision.py +11 -0
  62. mima/types/window.py +44 -0
  63. mima/usables/item.py +1 -0
  64. mima/util/colors.py +5 -0
  65. mima/util/constants.py +6 -0
  66. mima/util/functions.py +27 -0
  67. mima/util/input_defaults.py +109 -0
  68. mima/util/runtime_config.py +234 -30
  69. mima/util/trading_item.py +20 -0
  70. mima/view/camera.py +160 -19
  71. mima/view/mima_mode.py +612 -0
  72. mima/view/mima_scene.py +225 -0
  73. mima/view/mima_view.py +12 -0
  74. mima/view/mima_window.py +153 -0
  75. {mima_engine-0.1.4.dist-info → mima_engine-0.2.0.dist-info}/METADATA +4 -2
  76. mima_engine-0.2.0.dist-info/RECORD +128 -0
  77. {mima_engine-0.1.4.dist-info → mima_engine-0.2.0.dist-info}/WHEEL +1 -1
  78. mima/view/scene.py +0 -322
  79. mima_engine-0.1.4.dist-info/RECORD +0 -114
  80. {mima_engine-0.1.4.dist-info → mima_engine-0.2.0.dist-info}/top_level.txt +0 -0
mima/view/camera.py CHANGED
@@ -2,50 +2,191 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING, Optional
4
4
 
5
- from ..util.constants import TILE_HEIGHT, TILE_WIDTH
5
+ from ..backend.pygame_camera import PygameCamera
6
+ from ..util.colors import Color
6
7
 
7
8
  if TYPE_CHECKING:
9
+ from ..engine import MimaEngine
8
10
  from ..maps.tilemap import Tilemap
9
11
  from ..objects.dynamic import Dynamic
10
12
 
11
13
 
12
14
  class Camera:
15
+ engine: MimaEngine
16
+
13
17
  def __init__(
14
18
  self,
19
+ name: str,
20
+ width: float,
21
+ height: float,
15
22
  visible_tiles_sx: int = 0,
16
23
  visible_tiles_sy: int = 0,
17
24
  visible_tiles_ex: Optional[int] = None,
18
25
  visible_tiles_ey: Optional[int] = None,
19
26
  ):
20
- self.visible_tiles_sx: int = visible_tiles_sx
21
- self.visible_tiles_sy: int = visible_tiles_sy
22
- self.visible_tiles_ex: int = visible_tiles_ex
23
- self.visible_tiles_ey: int = visible_tiles_ey
27
+ self.pwidth = int(width * self.engine.rtc.tile_width)
28
+ self.pheight = int(height * self.engine.rtc.tile_height)
29
+ self._ui_pwidth = self.pwidth
30
+ self._ui_pheight = self.pheight
31
+ self.ui_pwidth = self.pwidth
32
+ self.ui_pheight = self.pheight
33
+
34
+ self.engine.backend.new_camera(name, self.pwidth, self.pheight)
35
+
36
+ self.name = name
37
+
38
+ if visible_tiles_ex is None:
39
+ visible_tiles_ex = width
40
+ if visible_tiles_ey is None:
41
+ visible_tiles_ey = height
42
+
43
+ self._visible_tiles_sx: int = int(visible_tiles_sx)
44
+ self._visible_tiles_sy: int = int(visible_tiles_sy)
45
+ self._visible_tiles_ex: int = int(visible_tiles_ex)
46
+ self._visible_tiles_ey: int = int(visible_tiles_ey)
47
+ self.visible_tiles_sx: float = visible_tiles_sx
48
+ self.visible_tiles_sy: float = visible_tiles_sy
49
+ self.visible_tiles_ex: float = visible_tiles_ex
50
+ self.visible_tiles_ey: float = visible_tiles_ey
51
+
52
+ self._zoom: float = 1.0
53
+ self._zoom_changed: bool = False
54
+ self.camera_scale: float = 1.0
55
+ self._ui_zoom: float = 1.0
56
+ self._ui_zoom_changed: bool = False
24
57
 
25
58
  if self.visible_tiles_ex is None:
26
59
  self.visible_tiles_ex = (
27
- self.engine.backend.render_width / TILE_WIDTH
60
+ self.engine.backend.render_width / self.engine.rtc.tile_width
28
61
  - self.visible_tiles_sx
29
62
  )
30
63
 
31
64
  if self.visible_tiles_ey is None:
32
65
  self.visible_tiles_ey = (
33
- self.engine.backend.render_height / TILE_HEIGHT
66
+ self.engine.backend.render_height / self.engine.rtc.tile_height
34
67
  - self.visible_tiles_sy
35
68
  )
69
+ self.border_left: bool = False
70
+ self.border_right: bool = False
71
+ self.border_top: bool = False
72
+ self.border_bottom: bool = False
73
+ self.border_width: int = 1
74
+ self.border_color: Color = self.engine.rtc.color_white
36
75
 
37
- def update(self, target: Dynamic, tilemap: Tilemap):
76
+ def update(
77
+ self,
78
+ target: Optional[Dynamic] = None,
79
+ map_width: int = 0,
80
+ map_height: int = 0,
81
+ ):
82
+ self.visible_tiles_sx = self._visible_tiles_sx * 1 / self.zoom
83
+ self.visible_tiles_sy = self._visible_tiles_sy * 1 / self.zoom
84
+ self.visible_tiles_ex = self._visible_tiles_ex * 1 / self.zoom
85
+ self.visible_tiles_ey = self._visible_tiles_ey * 1 / self.zoom
86
+ self.camera_scale = self.engine.backend.render_width / (
87
+ self.visible_tiles_ex * self.engine.rtc.tile_width
88
+ )
38
89
 
39
- # Calculate x offset
40
- self.ox = target.px - self.visible_tiles_ex / 2.0
41
- self.ox = min(tilemap.width - self.visible_tiles_ex, max(0, self.ox))
42
- if tilemap.width < self.visible_tiles_ex:
43
- self.ox += (self.visible_tiles_ex - tilemap.width) / 2.0
44
- self.ox -= self.visible_tiles_sx
90
+ if target is not None:
91
+ # Calculate x offset
92
+ self.ox = target.px - self.visible_tiles_ex / 2.0
93
+
94
+ # Calculate y offset
95
+ self.oy = target.py - self.visible_tiles_ey / 2.0
45
96
 
46
- # Calculate y offset
47
- self.oy = target.py - self.visible_tiles_ey / 2.0
48
- self.oy = min(tilemap.height - self.visible_tiles_ey, max(0, self.oy))
49
- if tilemap.height < self.visible_tiles_ey:
50
- self.oy += (self.visible_tiles_ey - tilemap.height) / 2.0
97
+ if map_width > 0:
98
+ # Adjust x offset to map
99
+ self.ox = min(map_width - self.visible_tiles_ex, max(0, self.ox))
100
+ if map_width < self.visible_tiles_ex:
101
+ self.ox += (self.visible_tiles_ex - map_width) / 2.0
102
+ if map_height > 0:
103
+ # Adjust y offset to map
104
+ self.oy = min(map_height - self.visible_tiles_ey, max(0, self.oy))
105
+ if map_height < self.visible_tiles_ey:
106
+ self.oy += (self.visible_tiles_ey - map_height) / 2.0
107
+
108
+ self.ox -= self.visible_tiles_sx
51
109
  self.oy -= self.visible_tiles_sy
110
+
111
+ if self._zoom_changed:
112
+ self.engine.backend.get_camera(self.name).change_zoom(
113
+ int(self.visible_tiles_ex * self.engine.rtc.tile_width),
114
+ int(self.visible_tiles_ey * self.engine.rtc.tile_height),
115
+ )
116
+ self.engine.backend.get_camera(
117
+ self.name
118
+ ).camera_scale = self.camera_scale
119
+
120
+ self._zoom_changed = False
121
+ if self._ui_zoom_changed:
122
+ # print(
123
+ # int(self.ui_pwidth * self._ui_zoom),
124
+ # int(self.ui_pheight * self._ui_zoom),
125
+ # )
126
+ self.ui_pwidth = int(self._ui_pwidth * 1 / self._ui_zoom)
127
+ self.ui_pheight = int(self._ui_pheight * 1 / self._ui_zoom)
128
+
129
+ self.engine.backend.get_camera(self.name).change_ui_zoom(
130
+ self.ui_pwidth, self.ui_pheight
131
+ )
132
+ self._ui_zoom_changed = False
133
+
134
+ def draw(self, *sprites):
135
+ for sprite in sprites:
136
+ sprite.draw_self(self.ox, self.oy)
137
+
138
+ def draw_borders(self):
139
+ if self.border_left:
140
+ self.engine.backend.draw_line(
141
+ 0,
142
+ 0,
143
+ 0,
144
+ self.pheight - 1,
145
+ self.border_color,
146
+ camera_name=self.name,
147
+ width=self.border_width,
148
+ )
149
+ if self.border_right:
150
+ self.engine.backend.draw_line(
151
+ self.pwidth - 1,
152
+ 0,
153
+ self.pwidth - 1,
154
+ self.pheight - 1,
155
+ self.border_color,
156
+ camera_name=self.name,
157
+ width=self.border_width,
158
+ )
159
+
160
+ @property
161
+ def zoom(self):
162
+ return self._zoom
163
+
164
+ @zoom.setter
165
+ def zoom(self, val):
166
+ self._zoom = val
167
+ self._zoom_changed = True
168
+
169
+ @property
170
+ def ui_zoom(self):
171
+ return self._ui_zoom
172
+
173
+ @ui_zoom.setter
174
+ def ui_zoom(self, val):
175
+ self._ui_zoom = val
176
+ self._ui_zoom_changed = True
177
+
178
+ @property
179
+ def px(self):
180
+ return self.engine.backend.get_camera(self.name).px
181
+
182
+ @property
183
+ def py(self):
184
+ return self.engine.backend.get_camera(self.name).py
185
+
186
+ @px.setter
187
+ def px(self, val):
188
+ self.engine.backend.get_camera(self.name).px = val
189
+
190
+ @py.setter
191
+ def py(self, val):
192
+ self.engine.backend.get_camera(self.name).py = val