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.
Files changed (201) hide show
  1. {tilemap_editor-3.3.2/src/tilemap_editor.egg-info → tilemap_editor-3.3.3}/PKG-INFO +1 -1
  2. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/pyproject.toml +1 -1
  3. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/editor.py +19 -4
  4. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/node_manager.py +11 -1
  5. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/preview.py +2 -1
  6. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap.py +4 -2
  7. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
  8. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/SOURCES.txt +3 -0
  9. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/filemanager.py +4 -2
  10. tilemap_editor-3.3.3/src/widgets/particle_presets.py +663 -0
  11. tilemap_editor-3.3.3/src/widgets/particle_system.py +436 -0
  12. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/tile_grid.py +67 -12
  13. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/tile_selector.py +19 -8
  14. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/node_editor.py +114 -24
  15. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/node_selector.py +15 -4
  16. tilemap_editor-3.3.3/src/widgets/ui/particle_config_dialog.py +712 -0
  17. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/LICENSE +0 -0
  18. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/MANIFEST.in +0 -0
  19. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/README.md +0 -0
  20. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  21. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  22. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  23. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  24. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  25. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  26. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  27. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  28. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/arrow-down.svg +0 -0
  29. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/check.svg +0 -0
  30. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/checked.svg +0 -0
  31. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/close.svg +0 -0
  32. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/duplicate.svg +0 -0
  33. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/error.svg +0 -0
  34. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/file.svg +0 -0
  35. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/filedead.svg +0 -0
  36. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/fit.svg +0 -0
  37. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/folder.svg +0 -0
  38. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/grid.svg +0 -0
  39. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/image.svg +0 -0
  40. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/info.svg +0 -0
  41. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/load.svg +0 -0
  42. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/loop.svg +0 -0
  43. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pan.svg +0 -0
  44. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pause.svg +0 -0
  45. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/pencil.svg +0 -0
  46. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/play.svg +0 -0
  47. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/plus.svg +0 -0
  48. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/radio.svg +0 -0
  49. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/reset.svg +0 -0
  50. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/save.svg +0 -0
  51. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/stop.svg +0 -0
  52. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/tilemap.svg +0 -0
  53. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/tileset.svg +0 -0
  54. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/unchecked.svg +0 -0
  55. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/warning.svg +0 -0
  56. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/zoomin.svg +0 -0
  57. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/assets/icons/zoomout.svg +0 -0
  58. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/setup.cfg +0 -0
  59. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/configs/themes.py +0 -0
  60. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/constants.py +0 -0
  61. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/event_map.py +0 -0
  62. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/layers.py +0 -0
  63. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/main.py +0 -0
  64. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/nodes.py +0 -0
  65. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/__init__.py +0 -0
  66. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/__init__.py +0 -0
  67. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/editor.py +0 -0
  68. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/models.py +0 -0
  69. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/protocols.py +0 -0
  70. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/shape_editor.py +0 -0
  71. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/character_collision/standalone.py +0 -0
  72. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/__init__.py +0 -0
  73. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/editor.py +0 -0
  74. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/models.py +0 -0
  75. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/protocols.py +0 -0
  76. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/object_tileset_collision/standalone.py +0 -0
  77. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/__init__.py +0 -0
  78. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/__main__.py +0 -0
  79. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/clipboard_util.py +0 -0
  80. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/editor.py +0 -0
  81. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/frame_picker.py +0 -0
  82. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/models.py +0 -0
  83. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/protocols.py +0 -0
  84. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/runtime_load.py +0 -0
  85. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/standalone.py +0 -0
  86. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/timeline.py +0 -0
  87. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_animation/validation.py +0 -0
  88. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/__init__.py +0 -0
  89. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/editor.py +0 -0
  90. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/sprite_editor/standalone.py +0 -0
  91. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/__init__.py +0 -0
  92. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/collision_painter.py +0 -0
  93. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/editor.py +0 -0
  94. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/models.py +0 -0
  95. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/protocols.py +0 -0
  96. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/plugins/tileset_collision/standalone.py +0 -0
  97. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_automap.py +0 -0
  98. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_error_console.py +0 -0
  99. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_filemanager.py +0 -0
  100. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/standalone_image_viewer.py +0 -0
  101. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/__init__.py +0 -0
  102. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/__main__.py +0 -0
  103. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/__init__.py +0 -0
  104. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  105. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  106. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  107. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  108. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  109. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  110. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  111. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  112. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
  113. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
  114. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/check.svg +0 -0
  115. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/checked.svg +0 -0
  116. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/close.svg +0 -0
  117. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
  118. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/error.svg +0 -0
  119. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/file.svg +0 -0
  120. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
  121. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/fit.svg +0 -0
  122. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/folder.svg +0 -0
  123. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/grid.svg +0 -0
  124. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/image.svg +0 -0
  125. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/info.svg +0 -0
  126. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/load.svg +0 -0
  127. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/loop.svg +0 -0
  128. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pan.svg +0 -0
  129. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pause.svg +0 -0
  130. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
  131. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/play.svg +0 -0
  132. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/plus.svg +0 -0
  133. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/radio.svg +0 -0
  134. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/reset.svg +0 -0
  135. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/save.svg +0 -0
  136. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/stop.svg +0 -0
  137. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
  138. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
  139. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
  140. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/warning.svg +0 -0
  141. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
  142. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
  143. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/cli.py +0 -0
  144. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/main.py +0 -0
  145. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor/settings.py +0 -0
  146. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
  147. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
  148. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/requires.txt +0 -0
  149. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/tilemap_editor.egg-info/top_level.txt +0 -0
  150. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/ttypes/__init__.py +0 -0
  151. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/ttypes/tilemap.py +0 -0
  152. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/__init__.py +0 -0
  153. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/editor_preference.py +0 -0
  154. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/error_handler.py +0 -0
  155. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/font_manager.py +0 -0
  156. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/history.py +0 -0
  157. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/icon_manager.py +0 -0
  158. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/icons_cache.py +0 -0
  159. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/log_capture.py +0 -0
  160. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/project_paths.py +0 -0
  161. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/serialization.py +0 -0
  162. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/standalone.py +0 -0
  163. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/utils/validation.py +0 -0
  164. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/__init__.py +0 -0
  165. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/automap_models.py +0 -0
  166. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/autotile_template.py +0 -0
  167. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/autotiler.py +0 -0
  168. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/input.py +0 -0
  169. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/layer_selector.py +0 -0
  170. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/map_properties.py +0 -0
  171. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/mapsetup.py +0 -0
  172. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/regex_automap_designer.py +0 -0
  173. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/spritesheet_grid.py +0 -0
  174. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/collision_layer_mask.py +0 -0
  175. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/collision_layer_sidebar.py +0 -0
  176. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/confirm_dialog.py +0 -0
  177. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/draw_utils.py +0 -0
  178. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/fileinput.py +0 -0
  179. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/layer_type_dialog.py +0 -0
  180. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/menubar.py +0 -0
  181. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/mode_indicator.py +0 -0
  182. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/notification.py +0 -0
  183. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/property_editor.py +0 -0
  184. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/region_selector.py +0 -0
  185. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/status_bar.py +0 -0
  186. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/theme.py +0 -0
  187. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/tileset_type_dialog.py +0 -0
  188. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/toolbar.py +0 -0
  189. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/src/widgets/ui/tooltip.py +0 -0
  190. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_animation_library_grid_offset.py +0 -0
  191. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_collision_layer_mask.py +0 -0
  192. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_collision_layer_sidebar.py +0 -0
  193. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_editor_pan_mode.py +0 -0
  194. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_project_paths.py +0 -0
  195. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_render_scale.py +0 -0
  196. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_sprite_animation_editor_grid.py +0 -0
  197. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tile_grid_selection.py +0 -0
  198. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tile_selector_pick.py +0 -0
  199. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_tilemap_save.py +0 -0
  200. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_timeline_invalidate_cache.py +0 -0
  201. {tilemap_editor-3.3.2 → tilemap_editor-3.3.3}/tests/test_toolbar_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.3.2
3
+ Version: 3.3.3
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tilemap-editor"
7
- version = "3.3.2"
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, 190)
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
- print(f"Could not locate spritesheet for animation file: {path.name}")
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=f"{node_type.capitalize()} {count}",
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, oy = self.grid_offset_x, self.grid_offset_y
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(self, tile_size: "TCoor", map_size: "TCoor", render_scale: float = 1.0):
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.3.2
3
+ Version: 3.3.3
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -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
- self.current_image, (new_width, new_height)
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