mima-engine 0.3.2__tar.gz → 0.3.4__tar.gz
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.
- {mima_engine-0.3.2 → mima_engine-0.3.4}/PKG-INFO +2 -2
- {mima_engine-0.3.2 → mima_engine-0.3.4}/pyproject.toml +1 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/__init__.py +1 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/advanced/assets.py +2 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/advanced/scene.py +7 -2
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/advanced/shape.py +3 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/advanced/shaped_sprite.py +1 -2
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/camera.py +1 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/geometry.py +1 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/pixel_font.py +1 -2
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/spatial.py +77 -56
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/sprite.py +1 -3
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/tiled_map.py +3 -2
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/transformed_view.py +4 -3
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/user_input.py +1 -1
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/system/test_window_manager.py +79 -6
- mima_engine-0.3.4/tests/unit/test_spatial_grid.py +211 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/.gitignore +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/CHANGELOG +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/README.md +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/gfx/tilemap.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/gfx/tilemap_packed.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/propertytypes.json +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/sampleMap.tmx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/sampleSheet.tsx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/data/tilesets/sampleSheet.tsx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/License.txt +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Preview.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Sample.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiled/sampleMap.tmx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiled/sampleSheet.tsx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tilemap/tilemap.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tilemap/tilemap_packed.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0000.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0001.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0002.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0003.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0004.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0005.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0006.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0007.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0008.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0009.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0010.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0011.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0012.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0013.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0014.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0015.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0016.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0017.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0018.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0019.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0020.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0021.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0022.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0023.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0024.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0025.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0026.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0027.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0028.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0029.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0030.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0031.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0032.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0033.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0034.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0035.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0036.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0037.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0038.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0039.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0040.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0041.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0042.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0043.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0044.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0045.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0046.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0047.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0048.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0049.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0050.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0051.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0052.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0053.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0054.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0055.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0056.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0057.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0058.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0059.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0060.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0061.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0062.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0063.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0064.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0065.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0066.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0067.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0068.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0069.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0070.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0071.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0072.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0073.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0074.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0075.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0076.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0077.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0078.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0079.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0080.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0081.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0082.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0083.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0084.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0085.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0086.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0087.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0088.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0089.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0090.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0091.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0092.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0093.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0094.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0095.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0096.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0097.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0098.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0099.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0100.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0101.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0102.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0103.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0104.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0105.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0106.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0107.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0108.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0109.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0110.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0111.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0112.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0113.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0114.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0115.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0116.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0117.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0118.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0119.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0120.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0121.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0122.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0123.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0124.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0125.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0126.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0127.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0128.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0129.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0130.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tiles/tile_0131.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Tilesheet.txt +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Visit Kenney.url +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon/Visit Patreon.url +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/examples/kenney_tiny-dungeon.zip +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/mima_config.ini +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/mima_log.json +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/advanced/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/pygame_assets.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/pygame_audio.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/pygame_backend.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/pygame_camera.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/pygame_events.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/touch_control_scheme_a.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/backend/touch_control_scheme_b.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/collision.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/database.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/engine.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/mode_engine.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/core/scene_engine.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/template.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tile.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tile_animation.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tile_info.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tile_layer.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_layer.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_object.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_objectgroup.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_template.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_tile.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tiled/tiled_tileset.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tilemap.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tileset.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/tileset_info.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/maps/transition_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/animated_sprite.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/attribute_effect.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/attributes.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/creature.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/dynamic.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/colorize_screen.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/debug_box.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/light.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/show_sprite.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/walking_on_grass.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/effects/walking_on_water.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/loader.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/projectile.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/sprite.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/color_gate.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/color_switch.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/container.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/floor_switch.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/gate.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/light_source.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/logic_gate.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/movable.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/oneway.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/pickup.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/switch.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/objects/world/teleport.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/py.typed +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/command.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/add_quest.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/change_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/close_dialog.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/equip_weapon.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/give_item.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/give_resource.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/move_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/move_to.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/oneway_move.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/parallel.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/play_sound.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/present_item.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/progress_quest.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/quit_game.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/save_game.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/screen_fade.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/serial.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/set_facing_direction.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/set_spawn_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/show_choices.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/show_dialog.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/commands/take_coins.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/scripts/script_processor.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/multicolumn_list.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/standalone/scripting.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/states/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/states/game_state.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/states/memory.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/states/quest.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/alignment.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/blend.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/damage.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/direction.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/gate_color.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/graphic_state.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/keys.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/mode.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/nature.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/object.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/player.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/position.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/start.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/terrain.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/tile_collision.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/weapon_slot.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/types/window.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/usables/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/usables/item.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/usables/weapon.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/colors.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/constants.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/functions.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/input_defaults.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/logging.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/property.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/runtime_config.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/util/trading_item.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/__init__.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/camera.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/mima_mode.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/mima_scene.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/mima_view.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/src/mima/view/mima_window.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/assets.txt +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/healing_dragon_color.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/icon.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/norana-sheet.png +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/norana-sheet.tsx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/test.tiled-project +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/test_map.tmx +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/fixtures/test_template.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/system/test_engine.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/system/test_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/system/test_ttv_with_map.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/system/test_two_players.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/unit/test_multicolumn_list.py +0 -0
- {mima_engine-0.3.2 → mima_engine-0.3.4}/tests/unit/test_shape_collection.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mima-engine
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: A game engine based on pygame.
|
|
5
5
|
Author-email: Stephan Balduin <stephan.balduin@mailbox.org>
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
8
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
9
|
Provides-Extra: ce
|
|
10
10
|
Requires-Dist: pygame-ce; extra == 'ce'
|
|
11
11
|
Provides-Extra: dev
|
|
@@ -2,9 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
from enum import Enum
|
|
5
|
-
from typing import Any, Generic, TypeVar
|
|
6
5
|
|
|
7
6
|
import pygame
|
|
7
|
+
from typing_extensions import Any, Generic, TypeVar
|
|
8
8
|
|
|
9
9
|
from mima.standalone.transformed_view import TileTransformedView
|
|
10
10
|
|
|
@@ -296,9 +296,14 @@ class Scene(Generic[V]):
|
|
|
296
296
|
return success
|
|
297
297
|
|
|
298
298
|
def draw(self) -> None:
|
|
299
|
+
return
|
|
300
|
+
|
|
301
|
+
def _draw(self) -> None:
|
|
299
302
|
for window in self._windows.values():
|
|
300
303
|
window.draw()
|
|
301
304
|
|
|
305
|
+
self.draw()
|
|
306
|
+
|
|
302
307
|
def set_manager(self, manager: SceneManager) -> None:
|
|
303
308
|
self._manager = manager
|
|
304
309
|
|
|
@@ -384,7 +389,7 @@ class SceneManager(Generic[S, V]):
|
|
|
384
389
|
if self._scene is None:
|
|
385
390
|
return
|
|
386
391
|
|
|
387
|
-
self._scene.
|
|
392
|
+
self._scene._draw()
|
|
388
393
|
|
|
389
394
|
|
|
390
395
|
def position_to_screen_rect(
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import itertools
|
|
2
1
|
import logging
|
|
3
2
|
import math
|
|
4
|
-
from typing import Generic, TypeVar, overload
|
|
5
3
|
|
|
6
4
|
from pygame import Vector2
|
|
5
|
+
from typing_extensions import Generic, TypeVar, overload
|
|
7
6
|
|
|
8
7
|
LOG = logging.getLogger(__name__)
|
|
9
8
|
T = TypeVar("T")
|
|
@@ -17,69 +16,67 @@ class SpatialGrid(Generic[T]):
|
|
|
17
16
|
self._n_cols = int(math.ceil(world_size.x / cell_size))
|
|
18
17
|
self._n_rows = int(math.ceil(world_size.y / cell_size))
|
|
19
18
|
|
|
20
|
-
# self._cells: dict[int, list[T]] = {
|
|
21
|
-
# i: [] for i in range(self._n_cols * self._n_rows)
|
|
22
|
-
# }
|
|
23
19
|
self._cells: list[list[T]] = [[] for _ in range(self._n_cols * self._n_rows)]
|
|
24
|
-
self._object_map: dict[T, int] = {}
|
|
20
|
+
self._object_map: dict[T, list[int]] = {}
|
|
25
21
|
self.n_objects = 0
|
|
26
22
|
|
|
27
|
-
def insert(self, obj: T, pos: Vector2) -> None:
|
|
23
|
+
def insert(self, obj: T, pos: Vector2, size: Vector2 | None = None) -> None:
|
|
28
24
|
"""Insert object at given position in the grid."""
|
|
29
|
-
|
|
30
|
-
self.
|
|
31
|
-
|
|
25
|
+
size = Vector2(1, 1) if size is None else size
|
|
26
|
+
indices = cells_for_aabb(pos, size, self._cell_size, self._n_rows, self._n_cols)
|
|
27
|
+
|
|
28
|
+
for idx in indices:
|
|
29
|
+
self._cells[idx].append(obj)
|
|
30
|
+
|
|
31
|
+
self._object_map[obj] = indices
|
|
32
32
|
self.n_objects += 1
|
|
33
33
|
|
|
34
|
-
def remove(self, obj: T
|
|
35
|
-
"""Remove object
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
def remove(self, obj: T) -> None:
|
|
35
|
+
"""Remove object from all grid cells it occupies."""
|
|
36
|
+
indices = self._object_map.get(obj)
|
|
37
|
+
if indices is None:
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
for idx in indices:
|
|
41
|
+
if obj in self._cells[idx]:
|
|
42
|
+
self._cells[idx].remove(obj)
|
|
43
|
+
|
|
38
44
|
self._object_map.pop(obj)
|
|
39
45
|
self.n_objects -= 1
|
|
40
46
|
|
|
41
|
-
def relocate(self, obj: T,
|
|
42
|
-
"""Move object
|
|
43
|
-
if old_pos == new_pos:
|
|
44
|
-
return
|
|
47
|
+
def relocate(self, obj: T, new_pos: Vector2, size: Vector2 | None = None) -> None:
|
|
48
|
+
"""Move object to a new position in the grid."""
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
if
|
|
48
|
-
LOG.
|
|
49
|
-
"
|
|
50
|
-
str(obj),
|
|
51
|
-
self._object_map[obj],
|
|
52
|
-
old_idx,
|
|
50
|
+
old_indices = self._object_map.get(obj)
|
|
51
|
+
if old_indices is None:
|
|
52
|
+
LOG.warning(
|
|
53
|
+
"Objects %s not in grid. Performing insertion instead.", str(obj)
|
|
53
54
|
)
|
|
54
|
-
|
|
55
|
+
return self.insert(obj, new_pos, size)
|
|
55
56
|
|
|
56
|
-
if
|
|
57
|
+
size = Vector2(1, 1) if size is None else size
|
|
58
|
+
|
|
59
|
+
new_indices = cells_for_aabb(
|
|
60
|
+
new_pos, size, self._cell_size, self._n_rows, self._n_cols
|
|
61
|
+
)
|
|
62
|
+
if old_indices == new_indices:
|
|
57
63
|
return
|
|
58
64
|
|
|
59
65
|
LOG.debug(
|
|
60
|
-
"%s moving from
|
|
66
|
+
"Object %s (%s) moving from cells %s to %s",
|
|
61
67
|
str(obj),
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
new_pos.x,
|
|
66
|
-
new_pos.y,
|
|
67
|
-
new_idx,
|
|
68
|
+
new_pos,
|
|
69
|
+
old_indices,
|
|
70
|
+
new_indices,
|
|
68
71
|
)
|
|
72
|
+
for idx in old_indices:
|
|
73
|
+
if obj in self._cells[idx]:
|
|
74
|
+
self._cells[idx].remove(obj)
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
"Old cell %d of object does not exist. Number of cells %d.",
|
|
73
|
-
old_idx,
|
|
74
|
-
len(self._cells),
|
|
75
|
-
)
|
|
76
|
+
for idx in new_indices:
|
|
77
|
+
self._cells[idx].append(obj)
|
|
76
78
|
|
|
77
|
-
|
|
78
|
-
LOG.error("Object %s not in cell %d", str(obj), old_idx)
|
|
79
|
-
|
|
80
|
-
self._cells[old_idx].remove(obj)
|
|
81
|
-
self._cells[new_idx].append(obj)
|
|
82
|
-
self._object_map[obj] = new_idx
|
|
79
|
+
self._object_map[obj] = new_indices
|
|
83
80
|
|
|
84
81
|
def get_grid_index(self, pos: Vector2) -> int:
|
|
85
82
|
x, y = self.get_grid_coords(pos)
|
|
@@ -93,7 +90,7 @@ class SpatialGrid(Generic[T]):
|
|
|
93
90
|
|
|
94
91
|
def get_all_objects(self) -> list[T]:
|
|
95
92
|
"""Return all objects stored in the grid."""
|
|
96
|
-
return
|
|
93
|
+
return list(self._object_map.keys())
|
|
97
94
|
|
|
98
95
|
def get_objects_in_region(self, pos: Vector2, size: Vector2) -> list[T]:
|
|
99
96
|
"""Return all objects in the area defined by pos and size."""
|
|
@@ -105,15 +102,14 @@ class SpatialGrid(Generic[T]):
|
|
|
105
102
|
ex = int(min(self._n_cols - 1, (pos.x + size.x - 1e-9) // self._cell_size))
|
|
106
103
|
ey = int(min(self._n_rows - 1, (pos.y + size.y - 1e-9) // self._cell_size))
|
|
107
104
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
)
|
|
105
|
+
result: set[T] = set()
|
|
106
|
+
|
|
107
|
+
for gy in range(sy, ey + 1):
|
|
108
|
+
row_offset = gy * self._n_cols
|
|
109
|
+
for gx in range(sx, ex + 1):
|
|
110
|
+
result.update(self._cells[gx + row_offset])
|
|
111
|
+
|
|
112
|
+
return list(result)
|
|
117
113
|
|
|
118
114
|
def get_cells_in_region(
|
|
119
115
|
self, pos: Vector2, size: Vector2
|
|
@@ -163,3 +159,28 @@ def clamp(val: float, low: float, high: float) -> float: ...
|
|
|
163
159
|
|
|
164
160
|
def clamp(val: int | float, low: int | float, high: int | float) -> int | float:
|
|
165
161
|
return max(low, min(high, val))
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def vmax(val: Vector2, other: Vector2) -> Vector2:
|
|
165
|
+
return Vector2(max(val.x, other.x), max(val.y, other.y))
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def vmin(val: Vector2, other: Vector2) -> Vector2:
|
|
169
|
+
return Vector2(min(val.x, other.x), min(val.y, other.y))
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def cells_for_aabb(
|
|
173
|
+
pos: Vector2, size: Vector2, cell_size: int, n_rows: int, n_cols: int
|
|
174
|
+
) -> list[int]:
|
|
175
|
+
tl = pos // cell_size
|
|
176
|
+
br = (pos + size) // cell_size
|
|
177
|
+
v_cols = Vector2(n_cols - 1, n_rows - 1)
|
|
178
|
+
tl = vmax(Vector2(), vmin(tl, v_cols))
|
|
179
|
+
br = vmax(Vector2(), vmin(br, v_cols))
|
|
180
|
+
|
|
181
|
+
indices: list[int] = []
|
|
182
|
+
for y in range(int(tl.y), int(br.y) + 1):
|
|
183
|
+
for x in range(int(tl.x), int(br.x) + 1):
|
|
184
|
+
indices.append(x + y * n_cols)
|
|
185
|
+
|
|
186
|
+
return indices
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
from collections import defaultdict
|
|
2
1
|
from enum import Enum
|
|
3
|
-
from typing import Any, Generic, Protocol, TypeVar
|
|
4
2
|
|
|
5
|
-
import pygame
|
|
6
3
|
from pygame import Surface, Vector2
|
|
4
|
+
from typing_extensions import Any, Generic, Protocol, TypeVar
|
|
7
5
|
|
|
8
6
|
GS = TypeVar("GS", bound=Enum)
|
|
9
7
|
D = TypeVar("D", bound=Enum)
|
|
@@ -6,12 +6,12 @@ import math
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from io import StringIO
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any, Protocol, Self, TypeAlias, overload
|
|
10
9
|
from xml.etree import ElementTree
|
|
11
10
|
from xml.etree.ElementTree import Element
|
|
12
11
|
|
|
13
12
|
import pygame
|
|
14
13
|
from pygame import Surface, Vector2
|
|
14
|
+
from typing_extensions import Any, Protocol, Self, TypeAlias, overload
|
|
15
15
|
|
|
16
16
|
LOG = logging.getLogger(__name__)
|
|
17
17
|
|
|
@@ -299,7 +299,8 @@ class TiledObject(_TiledBase):
|
|
|
299
299
|
self.pos.y -= self.size.y
|
|
300
300
|
else:
|
|
301
301
|
self.size = Vector2(
|
|
302
|
-
float(o_xtree.attrib
|
|
302
|
+
float(o_xtree.attrib.get("width", 0.0)),
|
|
303
|
+
float(o_xtree.attrib.get("height", 0.0)),
|
|
303
304
|
)
|
|
304
305
|
|
|
305
306
|
self.name = o_xtree.attrib.get("name", self.name)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import math
|
|
3
|
-
from typing import TypeAlias, Union
|
|
4
3
|
|
|
5
4
|
import pygame
|
|
6
|
-
from pygame import
|
|
5
|
+
from pygame import Surface, Vector2
|
|
6
|
+
from pygame.event import Event
|
|
7
|
+
from typing_extensions import TypeAlias, Union
|
|
7
8
|
|
|
8
9
|
LOG = logging.getLogger(__name__)
|
|
9
10
|
Color: TypeAlias = Union[tuple[int, int, int], tuple[int, int, int, int]]
|
|
@@ -197,7 +198,7 @@ class TransformedView:
|
|
|
197
198
|
self, pos: Vector2, color: tuple[int, int, int] | tuple[int, int, int, int]
|
|
198
199
|
) -> None:
|
|
199
200
|
pos = self.world_to_screen(pos)
|
|
200
|
-
self._screen.set_at(pos, color)
|
|
201
|
+
self._screen.set_at((int(pos.x), int(pos.y)), color)
|
|
201
202
|
|
|
202
203
|
def draw_line(
|
|
203
204
|
self, pos1: Vector2, pos2: Vector2, color: Color | None = None, width: int = 1
|
|
@@ -23,7 +23,6 @@ GAME_VIEW = 1
|
|
|
23
23
|
MENU_VIEW = 2
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
|
|
27
26
|
class TitleView(View[int]):
|
|
28
27
|
def __init__(self) -> None:
|
|
29
28
|
super().__init__(TITLE_VIEW, screen)
|
|
@@ -65,6 +64,40 @@ class TitleView(View[int]):
|
|
|
65
64
|
def draw(self) -> None:
|
|
66
65
|
self.ttv.fill_rect(self._pos, self._size, (246, 204, 64))
|
|
67
66
|
|
|
67
|
+
self.ttv.draw_surface(
|
|
68
|
+
pygame.Vector2(16, 32), my_font.render("TITLE VIEW", False, (0, 0, 0))
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
self.ttv.draw_surface(
|
|
72
|
+
pygame.Vector2(16, 64), my_font.render("d: Next Scene", False, (0, 0, 0))
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
self.ttv.draw_surface(
|
|
76
|
+
pygame.Vector2(16, 96),
|
|
77
|
+
my_font.render(
|
|
78
|
+
"f: Next Scene (Top / Bottom Split Screen)", False, (0, 0, 0)
|
|
79
|
+
),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
self.ttv.draw_surface(
|
|
83
|
+
pygame.Vector2(16, 128),
|
|
84
|
+
my_font.render(
|
|
85
|
+
"c: Next Scene (Left / Right Split Screen)", False, (0, 0, 0)
|
|
86
|
+
),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
self.ttv.draw_surface(
|
|
90
|
+
pygame.Vector2(16, 160),
|
|
91
|
+
my_font.render("x: Next Scene (4-player Split Screen)", False, (0, 0, 0)),
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
self.ttv.draw_surface(
|
|
95
|
+
pygame.Vector2(16, 192),
|
|
96
|
+
my_font.render(
|
|
97
|
+
"a: Return to this scene (on any Next Scene)", False, (0, 0, 0)
|
|
98
|
+
),
|
|
99
|
+
)
|
|
100
|
+
|
|
68
101
|
|
|
69
102
|
class GameView(View[int]):
|
|
70
103
|
def __init__(self) -> None:
|
|
@@ -104,10 +137,25 @@ class GameView(View[int]):
|
|
|
104
137
|
self.ttv.fill_rect(pygame.Vector2(0, 0), self._size, color)
|
|
105
138
|
|
|
106
139
|
self.ttv.draw_surface(
|
|
107
|
-
pygame.Vector2(
|
|
108
|
-
my_font.render(f"{self._position.name}", False, (255, 255, 255)),
|
|
140
|
+
pygame.Vector2(16, 32),
|
|
141
|
+
my_font.render(f"GAME VIEW {self._position.name}", False, (255, 255, 255)),
|
|
109
142
|
)
|
|
110
143
|
|
|
144
|
+
if self._position in [
|
|
145
|
+
Position.FULL,
|
|
146
|
+
Position.TOP,
|
|
147
|
+
Position.LEFT,
|
|
148
|
+
Position.TOP_LEFT,
|
|
149
|
+
]:
|
|
150
|
+
self.ttv.draw_surface(
|
|
151
|
+
pygame.Vector2(16, 64),
|
|
152
|
+
my_font.render("s: Go to Menu View", False, (255, 255, 255)),
|
|
153
|
+
)
|
|
154
|
+
self.ttv.draw_surface(
|
|
155
|
+
pygame.Vector2(16, 96),
|
|
156
|
+
my_font.render("a: Back to Title Scene", False, (255, 255, 255)),
|
|
157
|
+
)
|
|
158
|
+
|
|
111
159
|
|
|
112
160
|
class MenuView(View[int]):
|
|
113
161
|
def __init__(self) -> None:
|
|
@@ -137,12 +185,26 @@ class MenuView(View[int]):
|
|
|
137
185
|
def draw(self) -> None:
|
|
138
186
|
self.ttv.fill_rect(pygame.Vector2(0, 0), self._size, (0, 144, 54))
|
|
139
187
|
|
|
140
|
-
txt = f"{self._position.name}"
|
|
141
|
-
|
|
142
188
|
self.ttv.draw_surface(
|
|
143
|
-
pygame.Vector2(
|
|
189
|
+
pygame.Vector2(16, 32),
|
|
190
|
+
my_font.render(f"MENU VIEW {self._position.name}", False, (255, 255, 255)),
|
|
144
191
|
)
|
|
145
192
|
|
|
193
|
+
if self._position in [
|
|
194
|
+
Position.FULL,
|
|
195
|
+
Position.TOP,
|
|
196
|
+
Position.LEFT,
|
|
197
|
+
Position.TOP_LEFT,
|
|
198
|
+
]:
|
|
199
|
+
self.ttv.draw_surface(
|
|
200
|
+
pygame.Vector2(16, 64),
|
|
201
|
+
my_font.render("w: Go to Game View", False, (255, 255, 255)),
|
|
202
|
+
)
|
|
203
|
+
self.ttv.draw_surface(
|
|
204
|
+
pygame.Vector2(16, 96),
|
|
205
|
+
my_font.render("a: Back to Title Scene", False, (255, 255, 255)),
|
|
206
|
+
)
|
|
207
|
+
|
|
146
208
|
|
|
147
209
|
class TitleScene(Scene):
|
|
148
210
|
def enter_focus(self, data: dict[str, Any]) -> None:
|
|
@@ -155,6 +217,11 @@ class TitleScene(Scene):
|
|
|
155
217
|
self._windows.clear()
|
|
156
218
|
return {}
|
|
157
219
|
|
|
220
|
+
def draw(self) -> None:
|
|
221
|
+
screen.blit(
|
|
222
|
+
my_font.render("TITLE SCENE", False, (0, 0, 0)), pygame.Vector2(900, 8)
|
|
223
|
+
)
|
|
224
|
+
|
|
158
225
|
|
|
159
226
|
class GameScene(Scene):
|
|
160
227
|
def __init__(self):
|
|
@@ -173,6 +240,12 @@ class GameScene(Scene):
|
|
|
173
240
|
self._windows.clear()
|
|
174
241
|
return {}
|
|
175
242
|
|
|
243
|
+
def draw(self) -> None:
|
|
244
|
+
screen.blit(
|
|
245
|
+
my_font.render(" GAME SCENE", False, (255, 255, 255)),
|
|
246
|
+
pygame.Vector2(900, 8),
|
|
247
|
+
)
|
|
248
|
+
|
|
176
249
|
|
|
177
250
|
sm = SceneManager[int, int]()
|
|
178
251
|
sm.add_scene(TitleScene(), TITLE_SCENE)
|