miniworld-maze 1.3.2__tar.gz → 1.4.0__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.
Potentially problematic release.
This version of miniworld-maze might be problematic. Click here for more details.
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/PKG-INFO +1 -1
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/benchmark_rendering.py +2 -2
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/generate_observations.py +1 -1
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/live_control_opencv.py +12 -5
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/save_topdown_views.py +96 -64
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/pyproject.toml +1 -1
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/__init__.py +1 -5
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/unified_env.py +57 -22
- miniworld_maze-1.3.2/src/miniworld_maze/environments/factory.py → miniworld_maze-1.4.0/src/miniworld_maze/environments/__init__.py +17 -5
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/base_grid_rooms.py +17 -15
- miniworld_maze-1.3.2/src/miniworld_maze/environments/__init__.py +0 -13
- miniworld_maze-1.3.2/src/miniworld_maze/tools/__init__.py +0 -3
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/LICENSE +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/README.md +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/README.md +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/basic_usage.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/examples/observation_level_demo.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/__init__.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/constants.py +1 -1
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/README.md +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/__init__.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/base_env.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/__init__.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/agent.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/base_entity.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entities/objects.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/entity_manager.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/envs/__init__.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/math.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/objmesh.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/occlusion_queries.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/opengl.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/params.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/random.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/__init__.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/drawing.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/framebuffer.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering/texture.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/rendering_engine.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/room.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/texture_utils.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/airduct_grate_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/asphalt_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beanpaste_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/beige_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/black_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/blueberry_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/brick_wall_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cardboard_4.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tile_noborder_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/ceiling_tiles_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cinder_blocks_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/cobaltgreen_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_4.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/concrete_tiles_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/copperred_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/crimson_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_doom_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_red.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_garage_white.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_brown.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_grey.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/door_steel_red.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/drywall_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_bw_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/floor_tiles_white.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/grass_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lava_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lemongrass_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightbeige_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightcobaltgreen_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightgray_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightnavyblue_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lightskyblue_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/lime_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/logo_mila_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/magenta_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/marble_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/metal_grill_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/morningglory_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/navyblue_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/oakbrown_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orange_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/orchid_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/picket_fence_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/adelaide_hanscom1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alessandro_allori2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexandre_cabanel1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexei_harlamov1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alexey_petrovich_antropov1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/alice_pike_barney1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/aman_theodor1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonello_messina1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/antonio_herrera_toro1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benjamin-constant1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/benoist_marie-guillemine1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/bouguereau_william-adolphe1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/byron1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/carl_fredric_breda2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cramacj_lucas1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cranach_lucas2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/cristobal_rojas1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/delacroix_eugene_ferdinand_victor1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/domenikos_theotokopoulos1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edmund_blair_leighton2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/edwin_longsden_long1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/falero_luis_ricardo1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/felix_bonfils1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francesco_hayez1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_goya_lucientes2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/francisco_zurbaran1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/franz_von_defregger3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_westin1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederic_yates1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/frederick_leighton1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/gaston_bussiere1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/george_henry_hall1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_battista_tiepolo1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/giovanni_bellini1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hans_holbein1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/hayez_francesco1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/henryk_siemiradzki1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/ilja_jefimowitsch_repin1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/james_carrol_beckwith1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-baptiste-camille_corot2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/jean-leon_gerome4.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/john_william_godward3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/julije_klovic1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/juriaen_streek1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/kiprenskij_orest_adamovic1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/konstantin_makovsky1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lefebvre_jules_joseph1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leon-francois_comerre1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/leopold_loffler1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/lewis_john_frederick1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/madrazo_garreta_raimundo1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/marie_bashkirtseff1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/moritz_kellerhoven1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nathaniel_jocelyn1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nikolai_alexandrowitsch_jaroschenko1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/nils_johan_olsson_blommer1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paolo_veronese1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/parmigianino1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/paul_cesar_helleu1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/regnault_henri1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/richard_bergh2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_dampier1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_lefevre1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/robert_leopold1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/sichel_nathanael1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/svetoslav_roerich1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/velazquez_diego1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/viktor_vasnetsov1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.license +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/portraits/william-adolphe_bouguereau1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/realblueberry_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/redbean_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/rock_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/seablue_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/silver_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/skyblue_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/slime_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/stucco_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/sunnyyellow_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/turquoise_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/violet_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/water_3.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/white_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_2.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/textures/wood_planks_1.png +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/utils.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/miniworld_gymnasium/wrappers.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/core/observation_types.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/nine_rooms.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/spiral_nine_rooms.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/twenty_five_rooms.py +0 -0
- {miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: miniworld-maze
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Multi-room maze environments from the DrStrategy paper. Provides NineRooms-v0, SpiralNineRooms-v0, and TwentyFiveRooms-v0 gymnasium environments.
|
|
5
5
|
Keywords: reinforcement-learning,environment,gymnasium,multi-room-maze,drstrategy,maze-navigation,partial-observability,3d-environments
|
|
6
6
|
Author: Tim Joseph
|
|
@@ -61,8 +61,8 @@ def benchmark_rendering_performance(
|
|
|
61
61
|
# Create environment with specific observation size
|
|
62
62
|
variant_mapping = {
|
|
63
63
|
"NineRooms": "NineRooms-v0",
|
|
64
|
-
"SpiralNineRooms": "SpiralNineRooms-v0",
|
|
65
|
-
"TwentyFiveRooms": "TwentyFiveRooms-v0"
|
|
64
|
+
"SpiralNineRooms": "SpiralNineRooms-v0",
|
|
65
|
+
"TwentyFiveRooms": "TwentyFiveRooms-v0",
|
|
66
66
|
}
|
|
67
67
|
env = gym.make(variant_mapping[variant], obs_width=size, obs_height=size)
|
|
68
68
|
|
|
@@ -29,7 +29,7 @@ def generate_observations(variant, output_dir=None, high_res_full_views=False):
|
|
|
29
29
|
variant_mapping = {
|
|
30
30
|
"NineRooms": "NineRooms-v0",
|
|
31
31
|
"SpiralNineRooms": "SpiralNineRooms-v0",
|
|
32
|
-
"TwentyFiveRooms": "TwentyFiveRooms-v0"
|
|
32
|
+
"TwentyFiveRooms": "TwentyFiveRooms-v0",
|
|
33
33
|
}
|
|
34
34
|
env = gym.make(variant_mapping[variant], obs_width=64, obs_height=64)
|
|
35
35
|
|
|
@@ -121,7 +121,7 @@ class OpenCVLiveController:
|
|
|
121
121
|
variant_mapping = {
|
|
122
122
|
"NineRooms": "NineRooms-v0",
|
|
123
123
|
"SpiralNineRooms": "SpiralNineRooms-v0",
|
|
124
|
-
"TwentyFiveRooms": "TwentyFiveRooms-v0"
|
|
124
|
+
"TwentyFiveRooms": "TwentyFiveRooms-v0",
|
|
125
125
|
}
|
|
126
126
|
self.env = gym.make(
|
|
127
127
|
variant_mapping[variant],
|
|
@@ -215,7 +215,10 @@ class OpenCVLiveController:
|
|
|
215
215
|
Returns:
|
|
216
216
|
BGR image array for OpenCV or None if failed
|
|
217
217
|
"""
|
|
218
|
-
if
|
|
218
|
+
if (
|
|
219
|
+
self.current_info is not None
|
|
220
|
+
and ObservationLevel.FIRST_PERSON in self.current_info
|
|
221
|
+
):
|
|
219
222
|
# Get first person observation from info
|
|
220
223
|
obs_hwc = self.current_info[ObservationLevel.FIRST_PERSON]
|
|
221
224
|
|
|
@@ -253,8 +256,12 @@ class OpenCVLiveController:
|
|
|
253
256
|
Map image with agent and goal markers
|
|
254
257
|
"""
|
|
255
258
|
# Get positions from info dictionary - these are guaranteed to be available
|
|
256
|
-
agent_pos_2d = self.current_info[
|
|
257
|
-
|
|
259
|
+
agent_pos_2d = self.current_info[
|
|
260
|
+
"agent_position"
|
|
261
|
+
] # [x, z] coordinates as ndarray
|
|
262
|
+
goal_pos_2d = self.current_info[
|
|
263
|
+
"goal_position"
|
|
264
|
+
] # [x, z] coordinates as ndarray
|
|
258
265
|
|
|
259
266
|
# Get environment bounds using utility function
|
|
260
267
|
env_min_bounds, env_max_bounds = get_environment_bounds(self.map_env)
|
|
@@ -590,7 +597,7 @@ class OpenCVLiveController:
|
|
|
590
597
|
]
|
|
591
598
|
if action < len(action_names):
|
|
592
599
|
print(
|
|
593
|
-
f"🎯 {action_names[action]} | Reward: {reward:.2f} | "
|
|
600
|
+
f"🎯 {action_names[action]} | Reward: {reward:.2f} | Success {self.current_info['success']} | "
|
|
594
601
|
f"Step: {self.step_count}"
|
|
595
602
|
)
|
|
596
603
|
|
|
@@ -21,151 +21,183 @@ import miniworld_maze # noqa: F401
|
|
|
21
21
|
def save_single_topdown_view(env: gym.Env) -> str:
|
|
22
22
|
"""Generate a single top-down full view and save it as PNG."""
|
|
23
23
|
print("🎯 Generating single top-down full view...")
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
# Reset environment to ensure consistent state
|
|
26
26
|
_, info = env.reset(seed=42)
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
# Get top-down full view from info dict
|
|
29
29
|
obs_image = info[ObservationLevel.TOP_DOWN_FULL]
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
# Save the observation as PNG
|
|
32
32
|
filename = "single_topdown_view.png"
|
|
33
33
|
Image.fromarray(obs_image).save(filename)
|
|
34
34
|
print(f" ✅ Saved single top-down full view to: {filename}")
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
return filename
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def save_steps_comparison(env: gym.Env) -> List[str]:
|
|
40
40
|
"""Run 5 steps and save observation/desired_goal side by side."""
|
|
41
41
|
print("🚶 Running 5 steps and saving observation/desired_goal comparisons...")
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
# Reset environment
|
|
44
44
|
obs, _ = env.reset(seed=42)
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
saved_files = []
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
# Run 5 steps
|
|
49
49
|
for step in range(5):
|
|
50
50
|
# Take a random action
|
|
51
51
|
action = env.action_space.sample()
|
|
52
52
|
obs, reward, terminated, truncated, _ = env.step(action)
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
# Get observation and desired_goal
|
|
55
55
|
observation = obs["observation"]
|
|
56
56
|
desired_goal = obs["desired_goal"]
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
# Create side-by-side comparison
|
|
59
59
|
# observation (left) and desired_goal (right)
|
|
60
60
|
combined_width = observation.shape[1] + desired_goal.shape[1]
|
|
61
61
|
combined_height = max(observation.shape[0], desired_goal.shape[0])
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
# Create blank canvas
|
|
64
|
-
combined_image =
|
|
65
|
-
|
|
64
|
+
combined_image = (
|
|
65
|
+
np.ones((combined_height, combined_width, 3), dtype=np.uint8) * 255
|
|
66
|
+
)
|
|
67
|
+
|
|
66
68
|
# Place observation on the left
|
|
67
|
-
combined_image[:observation.shape[0], :observation.shape[1]] = observation
|
|
68
|
-
|
|
69
|
+
combined_image[: observation.shape[0], : observation.shape[1]] = observation
|
|
70
|
+
|
|
69
71
|
# Place desired_goal on the right
|
|
70
|
-
combined_image[:desired_goal.shape[0], observation.shape[1]:] = desired_goal
|
|
71
|
-
|
|
72
|
+
combined_image[: desired_goal.shape[0], observation.shape[1] :] = desired_goal
|
|
73
|
+
|
|
72
74
|
# Save the combined image
|
|
73
75
|
filename = f"step_{step + 1}_obs_vs_desired.png"
|
|
74
76
|
Image.fromarray(combined_image).save(filename)
|
|
75
77
|
saved_files.append(filename)
|
|
76
|
-
|
|
78
|
+
|
|
77
79
|
print(f" Step {step + 1}: reward={reward:.3f}, saved to {filename}")
|
|
78
|
-
|
|
80
|
+
|
|
79
81
|
# Reset if episode ended
|
|
80
82
|
if terminated or truncated:
|
|
81
83
|
obs, _ = env.reset()
|
|
82
|
-
|
|
84
|
+
|
|
83
85
|
return saved_files
|
|
84
86
|
|
|
85
87
|
|
|
86
88
|
def collect_trajectory_and_visualize(env: gym.Env) -> str:
|
|
87
89
|
"""Execute 1000 random steps and visualize agent trajectory on top-down view."""
|
|
88
90
|
print("🔍 Collecting agent trajectory over 1000 random steps...")
|
|
89
|
-
|
|
91
|
+
|
|
90
92
|
# Reset environment
|
|
91
93
|
obs, info = env.reset(seed=42)
|
|
92
|
-
|
|
94
|
+
|
|
93
95
|
# Get scene extent from environment using the new public method
|
|
94
96
|
env_unwrapped = env.unwrapped
|
|
95
97
|
scene_extent = env_unwrapped.get_extent()
|
|
96
98
|
scene_min_x, scene_max_x, scene_min_z, scene_max_z = scene_extent
|
|
97
|
-
|
|
98
|
-
print(
|
|
99
|
-
|
|
99
|
+
|
|
100
|
+
print(
|
|
101
|
+
f" Environment bounds: x=[{scene_min_x:.1f}, {scene_max_x:.1f}], z=[{scene_min_z:.1f}, {scene_max_z:.1f}]"
|
|
102
|
+
)
|
|
103
|
+
|
|
100
104
|
# Collect trajectory positions
|
|
101
105
|
trajectory_positions = []
|
|
102
|
-
|
|
106
|
+
|
|
103
107
|
# Execute 1000 random steps
|
|
104
108
|
for step in range(1000):
|
|
105
109
|
# Take random action first to get info dict with position
|
|
106
110
|
action = env.action_space.sample()
|
|
107
111
|
_, _, terminated, truncated, info = env.step(action)
|
|
108
|
-
|
|
112
|
+
|
|
109
113
|
# Get current agent position from info dict
|
|
110
114
|
agent_pos = info["pos"]
|
|
111
115
|
trajectory_positions.append((agent_pos[0], agent_pos[1])) # x, z coordinates
|
|
112
|
-
|
|
116
|
+
|
|
113
117
|
# Reset if episode ended
|
|
114
118
|
if terminated or truncated:
|
|
115
119
|
obs, info = env.reset()
|
|
116
|
-
|
|
120
|
+
|
|
117
121
|
if (step + 1) % 200 == 0:
|
|
118
122
|
print(f" Completed {step + 1}/1000 steps")
|
|
119
|
-
|
|
123
|
+
|
|
120
124
|
print(f" ✅ Collected {len(trajectory_positions)} position points")
|
|
121
|
-
|
|
125
|
+
|
|
122
126
|
# Get top-down view for background
|
|
123
127
|
env.reset(seed=42)
|
|
124
128
|
background_image = env.unwrapped.render_top_view(POMDP=False)
|
|
125
|
-
|
|
129
|
+
|
|
126
130
|
# Create matplotlib figure
|
|
127
131
|
fig, ax = plt.subplots(1, 1, figsize=(12, 12))
|
|
128
|
-
|
|
132
|
+
|
|
129
133
|
# Display background image using actual scene bounds
|
|
130
134
|
# Use 'upper' origin to match how single_topdown_view.png is saved (standard image coordinates)
|
|
131
|
-
ax.imshow(
|
|
132
|
-
|
|
135
|
+
ax.imshow(
|
|
136
|
+
background_image,
|
|
137
|
+
extent=[scene_extent[0], scene_extent[1], scene_extent[3], scene_extent[2]],
|
|
138
|
+
origin="upper",
|
|
139
|
+
)
|
|
140
|
+
|
|
133
141
|
# Extract x and z coordinates (no normalization needed now)
|
|
134
142
|
x_coords = [pos[0] for pos in trajectory_positions]
|
|
135
143
|
z_coords = [pos[1] for pos in trajectory_positions]
|
|
136
|
-
|
|
144
|
+
|
|
137
145
|
# Plot trajectory using real world coordinates
|
|
138
|
-
ax.plot(x_coords, z_coords,
|
|
139
|
-
|
|
146
|
+
ax.plot(x_coords, z_coords, "r-", linewidth=2, alpha=0.7, label="Agent Trajectory")
|
|
147
|
+
|
|
140
148
|
# Mark start and end points
|
|
141
149
|
if trajectory_positions:
|
|
142
|
-
ax.scatter(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
150
|
+
ax.scatter(
|
|
151
|
+
x_coords[0],
|
|
152
|
+
z_coords[0],
|
|
153
|
+
c="green",
|
|
154
|
+
s=100,
|
|
155
|
+
marker="o",
|
|
156
|
+
label="Start",
|
|
157
|
+
zorder=5,
|
|
158
|
+
edgecolors="black",
|
|
159
|
+
linewidths=2,
|
|
160
|
+
)
|
|
161
|
+
ax.scatter(
|
|
162
|
+
x_coords[-1],
|
|
163
|
+
z_coords[-1],
|
|
164
|
+
c="red",
|
|
165
|
+
s=100,
|
|
166
|
+
marker="s",
|
|
167
|
+
label="End",
|
|
168
|
+
zorder=5,
|
|
169
|
+
edgecolors="black",
|
|
170
|
+
linewidths=2,
|
|
171
|
+
)
|
|
172
|
+
|
|
147
173
|
# Add colormap for trajectory progression (plasma colormap for better visibility)
|
|
148
174
|
colors = plt.cm.plasma(np.linspace(0, 1, len(trajectory_positions)))
|
|
149
175
|
for i in range(len(trajectory_positions) - 1):
|
|
150
|
-
ax.plot(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
176
|
+
ax.plot(
|
|
177
|
+
[x_coords[i], x_coords[i + 1]],
|
|
178
|
+
[z_coords[i], z_coords[i + 1]],
|
|
179
|
+
color=colors[i],
|
|
180
|
+
linewidth=2,
|
|
181
|
+
alpha=0.8,
|
|
182
|
+
)
|
|
183
|
+
|
|
154
184
|
# Formatting using scene bounds (flipped Z to match image orientation)
|
|
155
185
|
ax.set_xlim(scene_min_x, scene_max_x)
|
|
156
186
|
ax.set_ylim(scene_max_z, scene_min_z)
|
|
157
|
-
ax.set_title(
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
ax.
|
|
161
|
-
|
|
187
|
+
ax.set_title(
|
|
188
|
+
"Agent Trajectory over 1000 Random Steps", fontsize=16, fontweight="bold"
|
|
189
|
+
)
|
|
190
|
+
ax.set_xlabel("X Position (world coordinates)", fontsize=12)
|
|
191
|
+
ax.set_ylabel("Z Position (world coordinates)", fontsize=12)
|
|
192
|
+
ax.legend(loc="upper right")
|
|
193
|
+
|
|
162
194
|
# Save the visualization
|
|
163
195
|
filename = "agent_trajectory_visualization.png"
|
|
164
|
-
plt.savefig(filename, dpi=300, bbox_inches=
|
|
196
|
+
plt.savefig(filename, dpi=300, bbox_inches="tight")
|
|
165
197
|
plt.close()
|
|
166
|
-
|
|
198
|
+
|
|
167
199
|
print(f" ✅ Saved trajectory visualization to: {filename}")
|
|
168
|
-
|
|
200
|
+
|
|
169
201
|
return filename
|
|
170
202
|
|
|
171
203
|
|
|
@@ -173,7 +205,7 @@ def main() -> None:
|
|
|
173
205
|
"""Main function demonstrating both features."""
|
|
174
206
|
print("🖼️ Top-Down View Generator")
|
|
175
207
|
print("=" * 50)
|
|
176
|
-
|
|
208
|
+
|
|
177
209
|
# Create a single environment instance with info_obs for top-down full view
|
|
178
210
|
env = gym.make(
|
|
179
211
|
"NineRooms-v0",
|
|
@@ -182,21 +214,21 @@ def main() -> None:
|
|
|
182
214
|
obs_height=256,
|
|
183
215
|
info_obs=[ObservationLevel.TOP_DOWN_FULL],
|
|
184
216
|
)
|
|
185
|
-
|
|
217
|
+
|
|
186
218
|
try:
|
|
187
219
|
# 1. Generate single top-down view
|
|
188
220
|
single_file = save_single_topdown_view(env)
|
|
189
|
-
|
|
221
|
+
|
|
190
222
|
print("\n" + "=" * 50)
|
|
191
|
-
|
|
223
|
+
|
|
192
224
|
# 2. Run 5 steps and save comparisons
|
|
193
225
|
step_files = save_steps_comparison(env)
|
|
194
|
-
|
|
226
|
+
|
|
195
227
|
print("\n" + "=" * 50)
|
|
196
|
-
|
|
228
|
+
|
|
197
229
|
# 3. Collect trajectory and visualize
|
|
198
230
|
trajectory_file = collect_trajectory_and_visualize(env)
|
|
199
|
-
|
|
231
|
+
|
|
200
232
|
print("\n" + "=" * 50)
|
|
201
233
|
print("🎉 Generation complete!")
|
|
202
234
|
print("📁 Files created:")
|
|
@@ -204,12 +236,12 @@ def main() -> None:
|
|
|
204
236
|
for file in step_files:
|
|
205
237
|
print(f" • {file} (observation vs desired_goal)")
|
|
206
238
|
print(f" • {trajectory_file} (agent trajectory visualization)")
|
|
207
|
-
|
|
239
|
+
|
|
208
240
|
print("\n💡 Tip: Open the PNG files to see the different views!")
|
|
209
|
-
|
|
241
|
+
|
|
210
242
|
finally:
|
|
211
243
|
env.close()
|
|
212
244
|
|
|
213
245
|
|
|
214
246
|
if __name__ == "__main__":
|
|
215
|
-
main()
|
|
247
|
+
main()
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "miniworld-maze"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.4.0"
|
|
8
8
|
description = "Multi-room maze environments from the DrStrategy paper. Provides NineRooms-v0, SpiralNineRooms-v0, and TwentyFiveRooms-v0 gymnasium environments."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {file = "LICENSE"}
|
|
@@ -25,7 +25,7 @@ if "PYGLET_HEADLESS" not in os.environ:
|
|
|
25
25
|
"Automatically set PYGLET_HEADLESS=1 for headless rendering. "
|
|
26
26
|
"Set PYGLET_HEADLESS=0 before importing miniworld_maze to override this behavior.",
|
|
27
27
|
UserWarning,
|
|
28
|
-
stacklevel=2
|
|
28
|
+
stacklevel=2,
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
from .core import ObservationLevel
|
|
@@ -33,10 +33,6 @@ from .environments.nine_rooms import NineRooms
|
|
|
33
33
|
from .environments.spiral_nine_rooms import SpiralNineRooms
|
|
34
34
|
from .environments.twenty_five_rooms import TwentyFiveRooms
|
|
35
35
|
|
|
36
|
-
# Import factory to register environments
|
|
37
|
-
from .environments import factory # noqa: F401
|
|
38
|
-
|
|
39
|
-
__version__ = "1.1.0"
|
|
40
36
|
__all__ = [
|
|
41
37
|
"NineRooms",
|
|
42
38
|
"SpiralNineRooms",
|
|
@@ -9,29 +9,71 @@ import gymnasium as gym
|
|
|
9
9
|
import numpy as np
|
|
10
10
|
import pyglet
|
|
11
11
|
from gymnasium import spaces
|
|
12
|
-
from pyglet.gl import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
from pyglet.gl import (
|
|
13
|
+
glEnable,
|
|
14
|
+
glDeleteLists,
|
|
15
|
+
glNewList,
|
|
16
|
+
glLightfv,
|
|
17
|
+
glShadeModel,
|
|
18
|
+
glColorMaterial,
|
|
19
|
+
glCallList,
|
|
20
|
+
glClearColor,
|
|
21
|
+
glClearDepth,
|
|
22
|
+
glClear,
|
|
23
|
+
glMatrixMode,
|
|
24
|
+
glLoadIdentity,
|
|
25
|
+
glOrtho,
|
|
26
|
+
glLoadMatrixf,
|
|
27
|
+
glDisable,
|
|
28
|
+
glBindFramebuffer,
|
|
29
|
+
glFlush,
|
|
30
|
+
glEndList,
|
|
31
|
+
gluPerspective,
|
|
32
|
+
gluLookAt,
|
|
33
|
+
GL_DEPTH_TEST,
|
|
34
|
+
GL_CULL_FACE,
|
|
35
|
+
GL_COMPILE,
|
|
36
|
+
GL_LIGHT0,
|
|
37
|
+
GL_POSITION,
|
|
38
|
+
GL_AMBIENT,
|
|
39
|
+
GL_DIFFUSE,
|
|
40
|
+
GL_SMOOTH,
|
|
41
|
+
GL_FRONT_AND_BACK,
|
|
42
|
+
GL_AMBIENT_AND_DIFFUSE,
|
|
43
|
+
GL_LIGHTING,
|
|
44
|
+
GL_COLOR_MATERIAL,
|
|
45
|
+
GL_COLOR_BUFFER_BIT,
|
|
46
|
+
GL_DEPTH_BUFFER_BIT,
|
|
47
|
+
GL_PROJECTION,
|
|
48
|
+
GL_MODELVIEW,
|
|
49
|
+
GL_TEXTURE_2D,
|
|
50
|
+
GL_FRAMEBUFFER,
|
|
51
|
+
GLubyte,
|
|
52
|
+
GLfloat,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
from miniworld_maze.core.observation_types import ObservationLevel
|
|
56
|
+
from miniworld_maze.core.miniworld_gymnasium.entities import Entity, Agent
|
|
57
|
+
from miniworld_maze.core.miniworld_gymnasium.math import Y_VEC, intersect_circle_segs
|
|
58
|
+
from miniworld_maze.core.miniworld_gymnasium.occlusion_queries import (
|
|
59
|
+
OcclusionQueryManager,
|
|
60
|
+
)
|
|
61
|
+
from miniworld_maze.core.miniworld_gymnasium.opengl import Texture, FrameBuffer, drawBox
|
|
62
|
+
from miniworld_maze.core.miniworld_gymnasium.params import DEFAULT_PARAMS
|
|
63
|
+
from miniworld_maze.core.miniworld_gymnasium.random import RandGen
|
|
64
|
+
from miniworld_maze.core.miniworld_gymnasium.room import Room
|
|
23
65
|
|
|
24
66
|
# Optional architectural improvements
|
|
25
67
|
try:
|
|
26
|
-
from .entity_manager import EntityManager
|
|
27
|
-
from .rendering_engine import RenderingEngine
|
|
68
|
+
from miniworld_maze.core.miniworld_gymnasium.entity_manager import EntityManager
|
|
69
|
+
from miniworld_maze.core.miniworld_gymnasium.rendering_engine import RenderingEngine
|
|
28
70
|
|
|
29
71
|
ARCHITECTURAL_IMPROVEMENTS_AVAILABLE = True
|
|
30
72
|
except ImportError:
|
|
31
73
|
RenderingEngine = None
|
|
32
74
|
EntityManager = None
|
|
33
75
|
ARCHITECTURAL_IMPROVEMENTS_AVAILABLE = False
|
|
34
|
-
from
|
|
76
|
+
from miniworld_maze.core.constants import (
|
|
35
77
|
CARRY_POSITION_OFFSET,
|
|
36
78
|
DEFAULT_DISPLAY_WIDTH,
|
|
37
79
|
DEFAULT_WINDOW_HEIGHT,
|
|
@@ -47,6 +89,7 @@ from ..constants import (
|
|
|
47
89
|
ORTHOGRAPHIC_DEPTH_RANGE,
|
|
48
90
|
PICKUP_RADIUS_MULTIPLIER,
|
|
49
91
|
PICKUP_REACH_MULTIPLIER,
|
|
92
|
+
POMDP_VIEW_RADIUS,
|
|
50
93
|
PORTAL_CONNECTION_TOLERANCE,
|
|
51
94
|
TEXT_LABEL_WIDTH,
|
|
52
95
|
TEXT_MARGIN_X,
|
|
@@ -363,8 +406,6 @@ class UnifiedMiniWorldEnv(gym.Env):
|
|
|
363
406
|
render_agent: Whether to render the agent in the observation.
|
|
364
407
|
If None, uses default behavior based on observation level.
|
|
365
408
|
"""
|
|
366
|
-
# Import ObservationLevel here to avoid circular imports
|
|
367
|
-
from ..observation_types import ObservationLevel
|
|
368
409
|
|
|
369
410
|
if observation_level == ObservationLevel.TOP_DOWN_PARTIAL:
|
|
370
411
|
if self.agent_mode == "empty":
|
|
@@ -1039,9 +1080,6 @@ class UnifiedMiniWorldEnv(gym.Env):
|
|
|
1039
1080
|
def _calculate_scene_extents(self, POMDP):
|
|
1040
1081
|
"""Calculate scene extents for rendering."""
|
|
1041
1082
|
if POMDP:
|
|
1042
|
-
# Import constants for POMDP view radius
|
|
1043
|
-
from ..constants import POMDP_VIEW_RADIUS
|
|
1044
|
-
|
|
1045
1083
|
agent_x, _, agent_z = self.agent.pos
|
|
1046
1084
|
min_x = agent_x - POMDP_VIEW_RADIUS
|
|
1047
1085
|
max_x = agent_x + POMDP_VIEW_RADIUS
|
|
@@ -1287,9 +1325,6 @@ class UnifiedMiniWorldEnv(gym.Env):
|
|
|
1287
1325
|
if view == "agent":
|
|
1288
1326
|
img = self.render_obs(self.vis_fb)
|
|
1289
1327
|
else:
|
|
1290
|
-
# Import ObservationLevel here to avoid circular imports
|
|
1291
|
-
from ..observation_types import ObservationLevel
|
|
1292
|
-
|
|
1293
1328
|
if self.obs_level == ObservationLevel.TOP_DOWN_PARTIAL:
|
|
1294
1329
|
img = self.render_top_view(self.vis_fb, POMDP=True)
|
|
1295
1330
|
else:
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Nine Rooms environment implementations."""
|
|
2
|
+
|
|
3
|
+
from miniworld_maze.environments.base_grid_rooms import GridRoomsEnvironment
|
|
4
|
+
from miniworld_maze.environments.nine_rooms import NineRooms
|
|
5
|
+
from miniworld_maze.environments.spiral_nine_rooms import SpiralNineRooms
|
|
6
|
+
from miniworld_maze.environments.twenty_five_rooms import TwentyFiveRooms
|
|
2
7
|
|
|
3
8
|
from gymnasium.envs.registration import register
|
|
4
|
-
from
|
|
5
|
-
from
|
|
9
|
+
from miniworld_maze.core import ObservationLevel
|
|
10
|
+
from miniworld_maze.core.constants import FACTORY_DOOR_SIZE, FACTORY_ROOM_SIZE
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"GridRoomsEnvironment",
|
|
14
|
+
"NineRooms",
|
|
15
|
+
"SpiralNineRooms",
|
|
16
|
+
"TwentyFiveRooms",
|
|
17
|
+
]
|
|
6
18
|
|
|
7
19
|
# Register environment variants with factory defaults matching the original wrapper
|
|
8
20
|
register(
|
|
@@ -18,7 +30,7 @@ register(
|
|
|
18
30
|
)
|
|
19
31
|
|
|
20
32
|
register(
|
|
21
|
-
id="SpiralNineRooms-v0",
|
|
33
|
+
id="SpiralNineRooms-v0",
|
|
22
34
|
entry_point="miniworld_maze.environments.spiral_nine_rooms:SpiralNineRooms",
|
|
23
35
|
max_episode_steps=1000,
|
|
24
36
|
kwargs={
|
|
@@ -31,7 +43,7 @@ register(
|
|
|
31
43
|
|
|
32
44
|
register(
|
|
33
45
|
id="TwentyFiveRooms-v0",
|
|
34
|
-
entry_point="miniworld_maze.environments.twenty_five_rooms:TwentyFiveRooms",
|
|
46
|
+
entry_point="miniworld_maze.environments.twenty_five_rooms:TwentyFiveRooms",
|
|
35
47
|
max_episode_steps=1000,
|
|
36
48
|
kwargs={
|
|
37
49
|
"room_size": FACTORY_ROOM_SIZE,
|
{miniworld_maze-1.3.2 → miniworld_maze-1.4.0}/src/miniworld_maze/environments/base_grid_rooms.py
RENAMED
|
@@ -242,9 +242,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
|
|
|
242
242
|
agent_pos = self.agent.pos
|
|
243
243
|
info["agent_position"] = np.array([agent_pos[0], agent_pos[2]]) # x, z
|
|
244
244
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
|
|
245
|
+
goal_pos = self._current_goal_position
|
|
246
|
+
info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
|
|
248
247
|
|
|
249
248
|
# Return observation as dict
|
|
250
249
|
obs_dict = self._build_observation_dict(obs)
|
|
@@ -265,6 +264,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
|
|
|
265
264
|
# Call parent reset
|
|
266
265
|
obs, info = super().reset(seed=seed, options=options, pos=pos)
|
|
267
266
|
|
|
267
|
+
info["success"] = 0.0
|
|
268
|
+
|
|
268
269
|
# Generate goal
|
|
269
270
|
self.desired_goal = self._get_goal()
|
|
270
271
|
|
|
@@ -272,9 +273,8 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
|
|
|
272
273
|
agent_pos = self.agent.pos
|
|
273
274
|
info["agent_position"] = np.array([agent_pos[0], agent_pos[2]]) # x, z
|
|
274
275
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
|
|
276
|
+
goal_pos = self._current_goal_position
|
|
277
|
+
info["goal_position"] = np.array([goal_pos[0], goal_pos[2]]) # x, z
|
|
278
278
|
|
|
279
279
|
# Return observation as dict with desired_goal and achieved_goal
|
|
280
280
|
obs_dict = self._build_observation_dict(obs)
|
|
@@ -381,22 +381,24 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
|
|
|
381
381
|
goal_positions.append([[center_x, 0.0, center_z]])
|
|
382
382
|
else:
|
|
383
383
|
# Two goals per room: center-left and center-right
|
|
384
|
-
goal_positions.append(
|
|
385
|
-
[
|
|
386
|
-
|
|
387
|
-
|
|
384
|
+
goal_positions.append(
|
|
385
|
+
[
|
|
386
|
+
[center_x - 1.0, 0.0, center_z], # left goal
|
|
387
|
+
[center_x + 1.0, 0.0, center_z], # right goal
|
|
388
|
+
]
|
|
389
|
+
)
|
|
388
390
|
return goal_positions
|
|
389
391
|
|
|
390
392
|
def get_extent(self, padding: float = 1.0) -> Tuple[float, float, float, float]:
|
|
391
393
|
"""
|
|
392
394
|
Get the scene extent for use with matplotlib imshow.
|
|
393
|
-
|
|
394
|
-
Returns the scene bounds with padding in the format expected by
|
|
395
|
+
|
|
396
|
+
Returns the scene bounds with padding in the format expected by
|
|
395
397
|
matplotlib's imshow(extent=...) parameter: (left, right, bottom, top).
|
|
396
|
-
|
|
398
|
+
|
|
397
399
|
Args:
|
|
398
400
|
padding: Padding to add around environment bounds (default: 1.0)
|
|
399
|
-
|
|
401
|
+
|
|
400
402
|
Returns:
|
|
401
403
|
Tuple[float, float, float, float]: (min_x, max_x, min_z, max_z) with padding
|
|
402
404
|
"""
|
|
@@ -404,7 +406,7 @@ class GridRoomsEnvironment(UnifiedMiniWorldEnv):
|
|
|
404
406
|
self.min_x - padding,
|
|
405
407
|
self.max_x + padding,
|
|
406
408
|
self.min_z - padding,
|
|
407
|
-
self.max_z + padding
|
|
409
|
+
self.max_z + padding,
|
|
408
410
|
)
|
|
409
411
|
|
|
410
412
|
def _build_observation_dict(self, obs: np.ndarray) -> dict:
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""Nine Rooms environment implementations."""
|
|
2
|
-
|
|
3
|
-
from .base_grid_rooms import GridRoomsEnvironment
|
|
4
|
-
from .nine_rooms import NineRooms
|
|
5
|
-
from .spiral_nine_rooms import SpiralNineRooms
|
|
6
|
-
from .twenty_five_rooms import TwentyFiveRooms
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
"GridRoomsEnvironment",
|
|
10
|
-
"NineRooms",
|
|
11
|
-
"SpiralNineRooms",
|
|
12
|
-
"TwentyFiveRooms",
|
|
13
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|