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

mima/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.4"
1
+ __version__ = "0.2.6"
2
2
 
3
- from .core.engine import MimaEngine
4
- from .core.mode_engine import MimaModeEngine
3
+ from .core.engine import MimaEngine as MimaEngine
4
+ from .core.mode_engine import MimaModeEngine as MimaModeEngine
@@ -87,6 +87,7 @@ class PygameBackend:
87
87
  fullscreen: bool = False,
88
88
  target_fps: int = 60,
89
89
  resizeable: bool = False,
90
+ no_scaled_flag: bool = False,
90
91
  ):
91
92
  LOG.info("Constructing window.")
92
93
  self.render_width, self.display_width = width, width
@@ -96,7 +97,9 @@ class PygameBackend:
96
97
 
97
98
  flags = pygame.HWSURFACE | pygame.DOUBLEBUF
98
99
  if fullscreen:
99
- flags = flags | pygame.FULLSCREEN | pygame.SCALED
100
+ flags = flags | pygame.FULLSCREEN
101
+ if not no_scaled_flag:
102
+ flags = flags | pygame.SCALED
100
103
  self.pixel_size = -1 # Calculate later
101
104
  elif pixel_size == 0:
102
105
  flags = flags | pygame.SCALED
mima/core/engine.py CHANGED
@@ -78,6 +78,7 @@ class MimaEngine(ABC):
78
78
  fullscreen: bool = False,
79
79
  target_fps: int = 60,
80
80
  resizable: bool = False,
81
+ no_scaled_flag: bool = False,
81
82
  kb_map=None,
82
83
  ):
83
84
  """Initialize backend and create a window."""
@@ -106,7 +107,13 @@ class MimaEngine(ABC):
106
107
  joy_to_player=self.rtc.get_joy_to_player(),
107
108
  )
108
109
  self.backend.construct(
109
- width, height, pixel_size, fullscreen, target_fps, resizable
110
+ width,
111
+ height,
112
+ pixel_size,
113
+ fullscreen,
114
+ target_fps,
115
+ resizable,
116
+ no_scaled_flag,
110
117
  )
111
118
  self.backend.user_input.enable_touch_controls = (
112
119
  self.enable_touch_controls
mima/objects/creature.py CHANGED
@@ -136,6 +136,9 @@ class Creature(Dynamic):
136
136
  if self.attributes.health <= 0:
137
137
  self.change_graphic_state(GraphicState.DEAD)
138
138
 
139
+ if self.can_act():
140
+ self.behavior(elapsed_time, target)
141
+
139
142
  if self.vx < -0.01:
140
143
  self.facing_direction = Direction.WEST
141
144
  if self.vx > 0.01:
@@ -147,9 +150,6 @@ class Creature(Dynamic):
147
150
 
148
151
  self.speed = self.attributes.speed
149
152
 
150
- if self.can_act():
151
- self.behavior(elapsed_time, target)
152
-
153
153
  self.sprite.update(
154
154
  elapsed_time, self.facing_direction, self.graphic_state
155
155
  )
@@ -87,7 +87,7 @@ class Switch(Dynamic):
87
87
  self.state_changed = True
88
88
  self.engine.audio.play_sound("switch", 0.2)
89
89
  self.cooldown = self.cooldown_reset
90
- print("Player talked")
90
+ # print("Player talked")
91
91
 
92
92
  elif nature == Nature.WALK and target.type == ObjectType.PROJECTILE:
93
93
  if self.signal:
@@ -9,5 +9,6 @@ class CommandSaveGame(Command):
9
9
  quest.save_state()
10
10
  self.engine.game_state.save_to_disk()
11
11
  self.completed = True
12
+ print(f"Saved the game to {self.engine.game_state.state_name}")
12
13
 
13
14
  # print(self.engine.game_state._state["player"])
mima/states/game_state.py CHANGED
@@ -2,19 +2,21 @@ import json
2
2
  import logging
3
3
  import os
4
4
  from os import PathLike
5
- from typing import Any, Dict, List, Optional, Union
5
+ from pathlib import Path
6
+ from typing import Any, Dict, Union
6
7
 
8
+ # from typing_extensions import overload
9
+ from ..util.constants import SAVE_FILE_NAME
7
10
  from ..util.functions import strtobool
8
11
 
9
12
  LOG = logging.getLogger(__name__)
10
13
 
11
14
 
12
15
  class GameState:
13
- def __init__(self, filename: PathLike):
14
- self.filename = filename
15
- self._state: Dict[str, Any] = {
16
- "savefile_name": os.path.split(self.filename)[-1].split(".")[0]
17
- }
16
+ def __init__(self, save_path: PathLike, state_name: str = "autosave.json"):
17
+ self.state_name = state_name
18
+ self._save_path = save_path
19
+ self._state: Dict[str, Any] = {}
18
20
 
19
21
  def save_value(
20
22
  self, key: str, value: Union[int, float, bool, str, dict, list]
@@ -27,12 +29,22 @@ class GameState:
27
29
  else:
28
30
  state[part] = value
29
31
 
32
+ # @overload
33
+ # def load_value(
34
+ # self, key: str, default: str, astype: str | None
35
+ # ) -> str | None: ...
36
+
37
+ # @overload
38
+ # def load_value(
39
+ # self, key: str, default: int, astype: str | None
40
+ # ) -> int | None: ...
41
+
30
42
  def load_value(
31
43
  self,
32
44
  key: str,
33
- default: Optional[Union[int, float, bool, str, dict, list]] = None,
34
- astype: Optional[str] = None,
35
- ) -> Optional[Union[int, float, bool, str, dict, list]]:
45
+ default: int | float | bool | str | dict | list | None = None,
46
+ astype: str | None = None,
47
+ ) -> int | float | bool | str | dict | list | None:
36
48
  parts = key.split("__")
37
49
  state = self._state
38
50
  for idx, part in enumerate(parts):
@@ -57,11 +69,11 @@ class GameState:
57
69
  return data
58
70
 
59
71
  def load_from_disk(self, autosave: bool = False):
60
- filename = self.filename
61
- if autosave:
62
- filename = os.path.join(
63
- os.path.split(filename)[0], "autosave.json"
64
- )
72
+ # filename = self.filename
73
+ # if autosave:
74
+ # filename = os.path.join(self._save_path, "autosave.json")
75
+ # else:
76
+ filename = Path(self._save_path) / self.state_name
65
77
  try:
66
78
  with open(filename, "r") as fp:
67
79
  self._state = json.load(fp)
@@ -71,32 +83,33 @@ class GameState:
71
83
  LOG.info("No saved state found or state corrupted.")
72
84
 
73
85
  if autosave:
74
- self.filename = os.path.join(
75
- os.path.split(filename)[0],
76
- f"{self._state['savefile_name']}.json",
77
- )
86
+ self.state_name = self.load_value("savefile_name", "")
87
+ # if autosave:
88
+ # self.filename = os.path.join(
89
+ # os.path.split(filename)[0],
90
+ # f"{self._state['savefile_name']}.json",
91
+ # )
78
92
 
79
93
  def save_to_disk(self, autosave: bool = False):
80
- filename = self.filename
94
+ # filename = self.filename
81
95
  if autosave:
82
- filename = os.path.join(
83
- os.path.split(filename)[0], "autosave.json"
84
- )
85
- self.save_value("savefile_name", "autosave")
96
+ filename = Path(self._save_path) / "autosave.json"
97
+ self.save_value("savefile_name", self.state_name)
86
98
  self.save_value("player__pos_x", 5.0)
87
99
  self.save_value("player__pos_y", 5.0)
88
100
  self.save_value(
89
101
  "player__map_name", self.load_value("player__spawn_map")
90
102
  )
91
103
  else:
92
- self._state["savefile_name"] = os.path.split(filename)[-1].split(
93
- "."
94
- )[0]
104
+ if self.state_name == "autosave.json":
105
+ self.state_name = chose_filename(self._save_path)
106
+ self.save_value("savefile_name", self.state_name)
107
+ filename = Path(self._save_path) / self.state_name
108
+ self._state["savefile_name"] = self.state_name
109
+
95
110
  # Auto save file will be removed after a successful save
96
111
  try:
97
- os.remove(
98
- os.path.join(os.path.split(filename)[0], "autosave.json")
99
- )
112
+ os.remove(Path(self._save_path) / "autosave.json")
100
113
  except FileNotFoundError:
101
114
  pass
102
115
 
@@ -112,6 +125,17 @@ class GameState:
112
125
  del self._state[scope][k]
113
126
 
114
127
 
128
+ def chose_filename(save_path: PathLike):
129
+
130
+ files = os.listdir(save_path)
131
+ game_idx = 0
132
+ while True:
133
+ savegame = f"{SAVE_FILE_NAME}_{game_idx:03d}.json"
134
+ if savegame not in files:
135
+ return savegame
136
+ game_idx += 1
137
+
138
+
115
139
  def convert(value, astype):
116
140
  if astype == "int":
117
141
  try:
@@ -144,17 +168,18 @@ def load_saved_games(save_path, save_file_name):
144
168
  return all_games
145
169
 
146
170
  if "autosave.json" in files:
147
- all_games["autosave"] = GameState(
148
- os.path.join(save_path, "autosave.json")
171
+ all_games["autosave.json"] = GameState(save_path)
172
+ all_games["autosave.json"].load_from_disk(autosave=True)
173
+ LOG.debug(
174
+ "Loading saved game from autosave.json (%s)",
175
+ all_games["autosave.json"].state_name,
149
176
  )
150
- all_games["autosave"].load_from_disk(autosave=True)
151
- LOG.debug("Loading saved game from autosave.json")
152
177
 
153
178
  game_idx = 0
154
179
  while True:
155
- savegame = f"{save_file_name}{game_idx:03d}.json"
180
+ savegame = f"{save_file_name}_{game_idx:03d}.json"
156
181
  if savegame in files:
157
- all_games[savegame] = GameState(os.path.join(save_path, savegame))
182
+ all_games[savegame] = GameState(save_path, savegame)
158
183
  all_games[savegame].load_from_disk()
159
184
  LOG.debug(f"Loading saved game from {savegame}")
160
185
  game_idx += 1
mima/util/constants.py CHANGED
@@ -51,3 +51,5 @@ DIALOG_WIDTH: float = 14.0
51
51
  DIALOG_HEIGHT: float = 3.0
52
52
  DIALOG_CHARS_PER_LINE: int = 36
53
53
  DIALOG_N_LINES: int = 4
54
+
55
+ SAVE_FILE_NAME = "savegame"
@@ -159,12 +159,12 @@ DEFAULT_TOUCHSCREEN_MAP = {
159
159
 
160
160
  ALT_TOUCHSCREEN_MAP = {
161
161
  K.P1_UP: {"pos": [0.1, 0.2], "size": [0.4, 0.7]},
162
- K.P1_A: {"pos": [0.83, 0.84], "size": [0.12, 0.12]},
163
- K.P1_B: {"pos": [0.70, 0.84], "size": [0.12, 0.12]},
164
- K.P1_X: {"pos": [0.76, 0.69], "size": [0.12, 0.12]},
165
- K.P1_Y: {"pos": [0.63, 0.69], "size": [0.12, 0.12]},
166
- K.P1_START: {"pos": [0.39, 0.02], "size": [0.1, 0.1]},
167
- K.P1_SELECT: {"pos": [0.51, 0.02], "size": [0.1, 0.1]},
168
- K.P1_L: {"pos": [0.01, 0.3], "size": [0.05, 0.4]},
169
- K.P1_R: {"pos": [0.94, 0.3], "size": [0.05, 0.4]},
162
+ K.P1_A: {"pos": [0.83, 0.80], "size": [0.15, 0.15]},
163
+ K.P1_B: {"pos": [0.67, 0.80], "size": [0.15, 0.15]},
164
+ K.P1_X: {"pos": [0.83, 0.65], "size": [0.12, 0.12]},
165
+ K.P1_Y: {"pos": [0.70, 0.65], "size": [0.12, 0.12]},
166
+ K.P1_START: {"pos": [0.56, 0.02], "size": [0.1, 0.1]},
167
+ K.P1_SELECT: {"pos": [0.34, 0.02], "size": [0.1, 0.1]},
168
+ K.P1_L: {"pos": [0.01, 0.1], "size": [0.05, 0.4]},
169
+ K.P1_R: {"pos": [0.94, 0.1], "size": [0.05, 0.4]},
170
170
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mima-engine
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: A game engine based on pygame.
5
5
  Author-email: Stephan Balduin <stephan.balduin@mailbox.org>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,8 +1,8 @@
1
- mima/__init__.py,sha256=On5KCpZrZvHIrKef6xic2bILyeRhNozoRoEvC1MvHEs,104
1
+ mima/__init__.py,sha256=DvMurqPh5MaYo2zZdqvMeK4SRSXbXxs48vD3CmtNrhk,136
2
2
  mima/backend/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
3
3
  mima/backend/pygame_assets.py,sha256=DoeebQlRqzTtuu_AsZ0kauqGzly0JtrOi66W1WTzUhk,14106
4
4
  mima/backend/pygame_audio.py,sha256=gag9bM-UT8DfYpGDYvKBn8jdnwgFU4NklEs2aNwHhRY,2365
5
- mima/backend/pygame_backend.py,sha256=O7cdu-HPY4W1dWosJtxv_j3bGlqVIc93AhVkTr68GR4,18552
5
+ mima/backend/pygame_backend.py,sha256=9-bIEMMboKzJ2lhuKGLx4pLFICd6AX-TVFGjAYRF0DU,18655
6
6
  mima/backend/pygame_camera.py,sha256=5ietEyhDryT3SBChvcY_jdsWRi09gcTg5O5mvg_15mM,2059
7
7
  mima/backend/pygame_events.py,sha256=dLn3T2cw-RWIcKAUjcQRh0-ZgY43Ps3Y47ZfxCpw4B0,27669
8
8
  mima/backend/touch_control_scheme_a.py,sha256=lI8xCVH-KDuLwoH4Vq-0JuQm1cDI3I2g1rkoR5lY8DY,4745
@@ -10,7 +10,7 @@ mima/backend/touch_control_scheme_b.py,sha256=L_WiwGFTjCtL_YcL8SH2bToHe-RiXoqAj6
10
10
  mima/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  mima/core/collision.py,sha256=CMItVHkjt6Bl8rr7Wnwa_QkynMNVTpDmJEF8dZzJSJk,9897
12
12
  mima/core/database.py,sha256=lo_LlhONPwZxuW8fdm_Oeg8Ofe4Qr8pwbAeYx477HxM,2007
13
- mima/core/engine.py,sha256=00o2SMHnXKAc6RR7bgm4TJcV8WhYwA4lr46j46-ncLs,11290
13
+ mima/core/engine.py,sha256=k3ykBbJkIOnCVRRG2BnDTo81g_tHuN-OrnB08MS6j9Y,11417
14
14
  mima/core/mode_engine.py,sha256=4dSjLRxjaoj3wP1k13X3-YqT2PbmXZ1fBwzmVHYt2Eg,2305
15
15
  mima/core/scene_engine.py,sha256=8P_ZuXwPHZFthgHmVtWkIgaXHedeu0eyRdf2P8ACLRA,2586
16
16
  mima/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,7 +35,7 @@ mima/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  mima/objects/animated_sprite.py,sha256=xeg89mZxx2_PpKX_dq1ySkfeZlEbxVymbX2Kf_yOHSw,7210
36
36
  mima/objects/attribute_effect.py,sha256=zikOSb6-hD6Ecm4L9EyRocTyJQ7IYC0CJ9DCBxbK4cU,650
37
37
  mima/objects/attributes.py,sha256=qqIVjuIXUQDv3qtdoaRDvBnx5oUbjuPdvcGR49fHRwM,3781
38
- mima/objects/creature.py,sha256=ZXBSmGStk7FepSmUzwFl2sonIhAJaIPT-htKH5WeJkw,12773
38
+ mima/objects/creature.py,sha256=ILyLMeJyoQ0ewmOhFlpXynLxdVppzac2EAKQyAMayN0,12773
39
39
  mima/objects/dynamic.py,sha256=yDh8wjX_FViUWF0lqiLH0q3iuLMaE1qAd4uu6DHB7D4,6434
40
40
  mima/objects/loader.py,sha256=GAdXsS5dINwNuHq88nCTHqrorg-BC5Fw8wgDtcMpnoA,4394
41
41
  mima/objects/projectile.py,sha256=50aoKz8F8NH0Z5wSSsSm2RhsgbGWQd4PFMTf0Ku-0z4,3214
@@ -58,7 +58,7 @@ mima/objects/world/logic_gate.py,sha256=5f3gkU0TJ6y8nnz88bzD3-feDa4gPsCprOT86ZXs
58
58
  mima/objects/world/movable.py,sha256=IdB0QSCaivs36YeDrJwsDIgL2rXaY_YL7IPDl5wNfH8,12578
59
59
  mima/objects/world/oneway.py,sha256=vNvqgyRX4TbpPBQ_PPrOVdMir5vPonIMikjdUGzc40Y,6412
60
60
  mima/objects/world/pickup.py,sha256=6qbPvT79H4bBKqEB88xm-ifp0PRa6XoeC5RwmkbJvRE,4859
61
- mima/objects/world/switch.py,sha256=PMcAwJ772T8AbHWReVfGnIgTUIBrFiHhobooZQTP7So,6162
61
+ mima/objects/world/switch.py,sha256=27-kPoNu-wR97jlSu1hIAhmpOrxQYi1mJvpgFmTm0Iw,6164
62
62
  mima/objects/world/teleport.py,sha256=2HqMkaU6V01AcsfEY_YG-wNrc8iRnsaQyNI-SNXVK4M,10584
63
63
  mima/scripts/__init__.py,sha256=yLRT6igjwtSkOFbd0x8PXXFZVt1_xUIuCHhWhywHRuE,75
64
64
  mima/scripts/command.py,sha256=rLjUbmvmpHqhaznt9TWkifY5IKtO-AdAGkzKnoKqAGg,881
@@ -78,7 +78,7 @@ mima/scripts/commands/play_sound.py,sha256=m4wqWC6O8TUsJIcYrP8bb8ZFjSNK3IpAyBdxL
78
78
  mima/scripts/commands/present_item.py,sha256=HfSCncURe6HIc2-omA7xvFbon58wmRaKEwVukZ1FlhM,1865
79
79
  mima/scripts/commands/progress_quest.py,sha256=-Nm7basBFdnixKwf42Xrs6iDROx22WGIDHpAZ0itpGU,359
80
80
  mima/scripts/commands/quit_game.py,sha256=BmLlh45K46Mx57j1dE2wWhmmmcb0Y-X5mLrFV1HIfhI,219
81
- mima/scripts/commands/save_game.py,sha256=yhmXIpnhD89otDmltE7mucdEozHc0LfRSZCSZZO915c,392
81
+ mima/scripts/commands/save_game.py,sha256=5B9OJCe2_mJ2AoAhVkLzb62NDerNGc_QEGyJgoJ5tus,464
82
82
  mima/scripts/commands/screen_fade.py,sha256=rcdH44ANsaQa_wLMTj7mdzc4Dy9ZzjAQLNMWAcmFh34,2290
83
83
  mima/scripts/commands/serial.py,sha256=AI8h2r5nF9B7H6gpiI3J3ewvpF9p0thsYpnKecXWfP8,2223
84
84
  mima/scripts/commands/set_facing_direction.py,sha256=M_AFJQWgd0nYG7ZPq6BBOmjF4n0jcnBdvyxLboucjZk,567
@@ -87,7 +87,7 @@ mima/scripts/commands/show_choices.py,sha256=6DwlhmXMcAgMyVmzwvUoQKEmIu2ynO1VmiA
87
87
  mima/scripts/commands/show_dialog.py,sha256=xKlve5O03IlBvg87zfyDczWT7IlaMRPfsl2Y9hxabVE,3948
88
88
  mima/scripts/commands/take_coins.py,sha256=37jChQBQKFaIBx6-Bvx3xNPlqSq87pvnMtnSWQWU1iI,573
89
89
  mima/states/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- mima/states/game_state.py,sha256=ZWOEy7EtKT1mj9yOfpelKZCJaS4aZS7PJ6Uz49NllhM,5112
90
+ mima/states/game_state.py,sha256=EmqwBB-7xX_O7q0MWi8BwtVGGBZjB1ZahRR-rAJflhU,5943
91
91
  mima/states/memory.py,sha256=js8sqKDcq8xPw8oB6j4GICXWeNsoqj_rueSe3jRS0-A,1020
92
92
  mima/states/quest.py,sha256=sF1IhVa0QcwSoHrl8hiCG-j6UlE51UrLbq--a8Rvu4k,2380
93
93
  mima/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,9 +113,9 @@ mima/usables/item.py,sha256=3ZM1gR6Ve-5PgBC8QuXU26rKIe9KXbKp_VCouvi-vUY,1443
113
113
  mima/usables/weapon.py,sha256=YzahQ_B9PT2rgd6NjBJY2ISVAE3XO7PPpE2gZumv3q4,2033
114
114
  mima/util/__init__.py,sha256=KMuEDnRsGr32gXED12ZyL1za6iKAuk_Tn8S3mTtpYds,42
115
115
  mima/util/colors.py,sha256=u4YVTCvSNFBhHaR9dFiMVzvE9fRM1UlW1m8gDa7oDY4,1483
116
- mima/util/constants.py,sha256=n3zRWTICePM20OyxzcKeDE1DxP6pGq_BhlKao36MX9Q,1353
116
+ mima/util/constants.py,sha256=oF9An3UVmBVziG7XkG_YLzTiK2M8ObEXBLVNrfzy_iU,1382
117
117
  mima/util/functions.py,sha256=GqAgT4-ATZcCvaaUyEOCeXphUu8xJXmVshAbFPJfOWI,1130
118
- mima/util/input_defaults.py,sha256=dIfcp9nQSVcO3U4tCB0R5cXwcKUQ7rpztnB1Feud1e4,3179
118
+ mima/util/input_defaults.py,sha256=9I99xz8FIgXIfZjLdyht-qQsJSWSdnq3ZQk4Tea7-74,3179
119
119
  mima/util/logging.py,sha256=p6-C1ozlCs_sCkmykh_B0NgZtvSkcZXXseE6qA6Zwew,1197
120
120
  mima/util/property.py,sha256=o6dEWpIOWxwS_lf6MvYZSjkyI5Amo56P2JIDa7AMaRY,107
121
121
  mima/util/runtime_config.py,sha256=MyRA1xHS6O5HdISUEhKFmIPQHPz26vtaBnKdqa_ISDc,9369
@@ -126,7 +126,7 @@ mima/view/mima_mode.py,sha256=W92hAKBvvC_yM_6SpXZmpY8WHKiYgqYuULlxGeMbipA,22189
126
126
  mima/view/mima_scene.py,sha256=0dDeuObUfgtWhaZRbiKLpTukhJ-74TU4gm111VF9FHQ,7253
127
127
  mima/view/mima_view.py,sha256=tKLcoNWVwldoqgG3jxhI_jMsFAXzod2csXyEbhub2xI,217
128
128
  mima/view/mima_window.py,sha256=tUdMDBZoB2zV66NhVuOb7pvQjehg_zPQtmdN9M8PIcc,8105
129
- mima_engine-0.2.4.dist-info/METADATA,sha256=JFCicOEm9npW4U02-hMM9EUWpiyIFd3CysgYL9gxjQs,487
130
- mima_engine-0.2.4.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
131
- mima_engine-0.2.4.dist-info/top_level.txt,sha256=5t1cOdQSaPQ0jWDhKDvDXwpV2XZ_a1GSSFAIvEsG0fQ,5
132
- mima_engine-0.2.4.dist-info/RECORD,,
129
+ mima_engine-0.2.6.dist-info/METADATA,sha256=ZOOIHjpF2b1_vOypt3z2HeIsTch1LxjxTzRPr3DK8Os,487
130
+ mima_engine-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
131
+ mima_engine-0.2.6.dist-info/top_level.txt,sha256=5t1cOdQSaPQ0jWDhKDvDXwpV2XZ_a1GSSFAIvEsG0fQ,5
132
+ mima_engine-0.2.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5