tilemap-editor 3.3.2__tar.gz → 3.3.3__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.
- {tilemap_editor-3.3.2/src/tilemap_editor.egg-info → tilemap_editor-3.3.3}/PKG-INFO +1 -1
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/pyproject.toml +1 -1
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/editor.py +19 -4
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/node_manager.py +11 -1
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/preview.py +2 -1
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap.py +4 -2
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/SOURCES.txt +3 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/filemanager.py +4 -2
- tilemap_editor-3.3.3/src/widgets/particle_presets.py +663 -0
- tilemap_editor-3.3.3/src/widgets/particle_system.py +436 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/tile_grid.py +67 -12
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/tile_selector.py +19 -8
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/node_editor.py +114 -24
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/node_selector.py +15 -4
- tilemap_editor-3.3.3/src/widgets/ui/particle_config_dialog.py +712 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/LICENSE +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/MANIFEST.in +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/README.md +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/check.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/close.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/error.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/file.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/image.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/info.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/load.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/play.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/save.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/setup.cfg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/configs/themes.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/constants.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/event_map.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/layers.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/main.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/nodes.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/models.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/protocols.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/shape_editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/models.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/__main__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/clipboard_util.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/frame_picker.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/models.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/protocols.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/runtime_load.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/timeline.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/validation.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/collision_painter.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/models.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_automap.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_error_console.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_filemanager.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_image_viewer.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/__main__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/check.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/close.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/error.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/file.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/image.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/info.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/load.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/play.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/save.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/cli.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/main.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/settings.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/requires.txt +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/top_level.txt +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/ttypes/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/ttypes/tilemap.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/editor_preference.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/error_handler.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/font_manager.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/history.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/icon_manager.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/icons_cache.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/log_capture.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/project_paths.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/serialization.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/standalone.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/validation.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/__init__.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/automap_models.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/autotile_template.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/autotiler.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/input.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/layer_selector.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/map_properties.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/mapsetup.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/regex_automap_designer.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/spritesheet_grid.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/collision_layer_mask.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/confirm_dialog.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/draw_utils.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/fileinput.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/layer_type_dialog.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/menubar.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/mode_indicator.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/notification.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/property_editor.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/region_selector.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/status_bar.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/theme.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/tileset_type_dialog.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/toolbar.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/tooltip.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_animation_library_grid_offset.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_collision_layer_mask.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_editor_pan_mode.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_project_paths.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_render_scale.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_sprite_animation_editor_grid.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tile_grid_selection.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tile_selector_pick.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tilemap_save.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_timeline_invalidate_cache.py +0 -0
- {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_toolbar_tools.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tilemap-editor"
|
|
7
|
-
version = "3.3.
|
|
7
|
+
version = "3.3.3"
|
|
8
8
|
description = "Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -35,6 +35,7 @@ from widgets.ui.node_selector import NodeSelector
|
|
|
35
35
|
from widgets.ui.node_editor import NodeEditor
|
|
36
36
|
from widgets.ui.notification import NotificationManager
|
|
37
37
|
from widgets.ui.property_editor import PropertyEditor
|
|
38
|
+
from widgets.ui.particle_config_dialog import ParticleConfigDialog
|
|
38
39
|
from widgets.ui.tooltip import TooltipManager
|
|
39
40
|
from widgets.ui.theme import get_theme_manager, set_theme, THEMES
|
|
40
41
|
from utils.log_capture import setup_console_log
|
|
@@ -192,6 +193,7 @@ class Editor:
|
|
|
192
193
|
self.tooltip = TooltipManager()
|
|
193
194
|
self.error_console_process: Optional[subprocess.Popen] = None
|
|
194
195
|
self.property_editor: Optional[PropertyEditor] = None
|
|
196
|
+
self.particle_config_dialog: Optional[ParticleConfigDialog] = None
|
|
195
197
|
|
|
196
198
|
self.child_processes: List[subprocess.Popen] = []
|
|
197
199
|
self.file_manager_process: Optional[subprocess.Popen] = None
|
|
@@ -246,7 +248,7 @@ class Editor:
|
|
|
246
248
|
self.map_properties_dialog = MapPropertiesDialog(self, Rect(center_x, center_y, 400, 260))
|
|
247
249
|
self.node_manager = NodeManager(self)
|
|
248
250
|
self.node_selector = NodeSelector(self, 0, 65, 260, 240)
|
|
249
|
-
self.node_editor = NodeEditor(self, 0, 310, 260,
|
|
251
|
+
self.node_editor = NodeEditor(self, 0, 310, 260, 230)
|
|
250
252
|
|
|
251
253
|
def open_file_manager(
|
|
252
254
|
self,
|
|
@@ -443,6 +445,9 @@ class Editor:
|
|
|
443
445
|
error_handler.capture(e, context="save_map_selected")
|
|
444
446
|
|
|
445
447
|
def export_selection_as_png(self):
|
|
448
|
+
if self.tile_grid_widget is None:
|
|
449
|
+
self.notifications.notify("No tile grid available", duration=2.0)
|
|
450
|
+
return
|
|
446
451
|
rect = self.tile_grid_widget.selection_rect
|
|
447
452
|
if rect is None:
|
|
448
453
|
self.notifications.notify("No region selected", duration=2.0)
|
|
@@ -458,6 +463,9 @@ class Editor:
|
|
|
458
463
|
rect = self.tile_grid_widget.selection_rect
|
|
459
464
|
if rect is None:
|
|
460
465
|
return
|
|
466
|
+
if self.tileset_widget is None:
|
|
467
|
+
self.notifications.notify("No tileset available", duration=2.0)
|
|
468
|
+
return
|
|
461
469
|
x1, y1, x2, y2 = rect
|
|
462
470
|
tw, th = self.tilemap.tile_size
|
|
463
471
|
pw = (x2 - x1 + 1) * tw
|
|
@@ -811,7 +819,7 @@ class Editor:
|
|
|
811
819
|
resolved = None
|
|
812
820
|
|
|
813
821
|
if not resolved or not resolved.exists():
|
|
814
|
-
|
|
822
|
+
self.notifications.notify(f"Could not locate spritesheet: {path.name}", duration=2.0)
|
|
815
823
|
return
|
|
816
824
|
|
|
817
825
|
args = [
|
|
@@ -1135,6 +1143,10 @@ class Editor:
|
|
|
1135
1143
|
if self.property_editor.handle_event(event):
|
|
1136
1144
|
continue
|
|
1137
1145
|
|
|
1146
|
+
if self.particle_config_dialog and self.particle_config_dialog.active:
|
|
1147
|
+
if self.particle_config_dialog.handle_event(event):
|
|
1148
|
+
continue
|
|
1149
|
+
|
|
1138
1150
|
# Priority 2: Autotiler and Regex Designer (block all events when visible)
|
|
1139
1151
|
if self.autotiler.visible:
|
|
1140
1152
|
if self.autotiler.handle_event(event):
|
|
@@ -1354,8 +1366,6 @@ class Editor:
|
|
|
1354
1366
|
self.screen.blit(overlay, (0, 0))
|
|
1355
1367
|
self.layer_type_dialog.draw(self.screen)
|
|
1356
1368
|
|
|
1357
|
-
if self.property_editor and self.property_editor.active:
|
|
1358
|
-
self.property_editor.draw(self.screen)
|
|
1359
1369
|
if self.loading_state["active"]:
|
|
1360
1370
|
overlay = pygame.Surface((self.width, self.height), pygame.SRCALPHA)
|
|
1361
1371
|
overlay.fill((0, 0, 0, 180))
|
|
@@ -1381,6 +1391,11 @@ class Editor:
|
|
|
1381
1391
|
self.node_selector.draw(self.screen)
|
|
1382
1392
|
if self.node_editor:
|
|
1383
1393
|
self.node_editor.draw(self.screen)
|
|
1394
|
+
# Modal dialogs draw on top of everything
|
|
1395
|
+
if self.property_editor and self.property_editor.active:
|
|
1396
|
+
self.property_editor.draw(self.screen)
|
|
1397
|
+
if self.particle_config_dialog and self.particle_config_dialog.active:
|
|
1398
|
+
self.particle_config_dialog.draw(self.screen)
|
|
1384
1399
|
self.menubar.draw(self.screen)
|
|
1385
1400
|
self.tooltip.draw(self.screen)
|
|
1386
1401
|
|
|
@@ -100,12 +100,20 @@ class NodeManager:
|
|
|
100
100
|
|
|
101
101
|
def create_default_node(self, layer_name: str, node_type: str = "area") -> Node:
|
|
102
102
|
count = len(self.nodes) + 1
|
|
103
|
+
props: Dict[str, Any] = {}
|
|
104
|
+
if node_type == "particle_emitter":
|
|
105
|
+
from widgets.particle_system import get_default_config
|
|
106
|
+
props = get_default_config()
|
|
107
|
+
name = f"Emitter {count}"
|
|
108
|
+
else:
|
|
109
|
+
name = f"{node_type.capitalize()} {count}"
|
|
103
110
|
return Node(
|
|
104
111
|
node_id=create_node_id(),
|
|
105
|
-
name=
|
|
112
|
+
name=name,
|
|
106
113
|
node_type=node_type,
|
|
107
114
|
area=NodeRect(x=0, y=0, w=64, h=64),
|
|
108
115
|
layer_name=layer_name,
|
|
116
|
+
properties=props,
|
|
109
117
|
)
|
|
110
118
|
|
|
111
119
|
def rename_group(self, old_name: str, new_name: str) -> bool:
|
|
@@ -132,6 +140,8 @@ class NodeManager:
|
|
|
132
140
|
def reorder_node(self, node_id: str, target_node_id: str, before: bool = True) -> None:
|
|
133
141
|
if node_id not in self.nodes or target_node_id not in self.nodes:
|
|
134
142
|
return
|
|
143
|
+
if node_id == target_node_id:
|
|
144
|
+
return
|
|
135
145
|
node = self.nodes[node_id]
|
|
136
146
|
keys = list(self.nodes.keys())
|
|
137
147
|
keys.remove(node_id)
|
|
@@ -416,7 +416,8 @@ class AnimationPreview:
|
|
|
416
416
|
|
|
417
417
|
def _extract_tile(self, variant_id: int) -> Optional[pygame.Surface]:
|
|
418
418
|
tw, th = self.tile_size
|
|
419
|
-
ox
|
|
419
|
+
ox = self.grid_offset_x
|
|
420
|
+
oy = self.grid_offset_y
|
|
420
421
|
available_w = self.surface.get_width() - ox
|
|
421
422
|
cols = max(1, available_w // tw)
|
|
422
423
|
col = variant_id % cols
|
|
@@ -60,7 +60,9 @@ class Tilemap:
|
|
|
60
60
|
if active_layer:
|
|
61
61
|
active_layer.tiles = value
|
|
62
62
|
|
|
63
|
-
def init_size(
|
|
63
|
+
def init_size(
|
|
64
|
+
self, tile_size: "TCoor", map_size: "TCoor", render_scale: float = 1.0
|
|
65
|
+
):
|
|
64
66
|
self.tile_size = tile_size
|
|
65
67
|
self.map_size = map_size
|
|
66
68
|
self.initial_map_size = map_size # Store what user initially setup
|
|
@@ -298,7 +300,7 @@ class Tilemap:
|
|
|
298
300
|
ts_data["tile_properties"] = {
|
|
299
301
|
str(k): v for k, v in ts.tile_properties.items()
|
|
300
302
|
}
|
|
301
|
-
if ts.animation:
|
|
303
|
+
if ts.animation is not None:
|
|
302
304
|
ts_data["animation"] = ts.animation
|
|
303
305
|
|
|
304
306
|
save_data["resources"]["tilesets"].append(ts_data)
|
|
@@ -160,6 +160,8 @@ src/widgets/input.py
|
|
|
160
160
|
src/widgets/layer_selector.py
|
|
161
161
|
src/widgets/map_properties.py
|
|
162
162
|
src/widgets/mapsetup.py
|
|
163
|
+
src/widgets/particle_presets.py
|
|
164
|
+
src/widgets/particle_system.py
|
|
163
165
|
src/widgets/regex_automap_designer.py
|
|
164
166
|
src/widgets/spritesheet_grid.py
|
|
165
167
|
src/widgets/tile_grid.py
|
|
@@ -175,6 +177,7 @@ src/widgets/ui/mode_indicator.py
|
|
|
175
177
|
src/widgets/ui/node_editor.py
|
|
176
178
|
src/widgets/ui/node_selector.py
|
|
177
179
|
src/widgets/ui/notification.py
|
|
180
|
+
src/widgets/ui/particle_config_dialog.py
|
|
178
181
|
src/widgets/ui/property_editor.py
|
|
179
182
|
src/widgets/ui/region_selector.py
|
|
180
183
|
src/widgets/ui/status_bar.py
|
|
@@ -333,10 +333,12 @@ class ImagePreview:
|
|
|
333
333
|
new_height = target_height
|
|
334
334
|
new_width = int(target_height * aspect_ratio)
|
|
335
335
|
|
|
336
|
+
source_surface = self.current_image.convert_alpha()
|
|
337
|
+
|
|
336
338
|
scaled_surface = pygame.transform.smoothscale(
|
|
337
|
-
|
|
339
|
+
source_surface, (new_width, new_height)
|
|
338
340
|
)
|
|
339
|
-
|
|
341
|
+
|
|
340
342
|
self.scaled_cache = scaled_surface
|
|
341
343
|
self.cached_target_size = (target_width, target_height)
|
|
342
344
|
|