tilemap-editor 3.1.4__tar.gz → 3.1.6__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 (182) hide show
  1. {tilemap_editor-3.1.4/src/tilemap_editor.egg-info → tilemap_editor-3.1.6}/PKG-INFO +1 -1
  2. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/pyproject.toml +1 -1
  3. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap.py +6 -6
  4. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
  5. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor.egg-info/SOURCES.txt +2 -1
  6. tilemap_editor-3.1.6/tests/test_tilemap_save.py +154 -0
  7. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/LICENSE +0 -0
  8. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/MANIFEST.in +0 -0
  9. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/README.md +0 -0
  10. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  11. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  12. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  13. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  14. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  15. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  16. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  17. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  18. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/arrow-down.svg +0 -0
  19. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/check.svg +0 -0
  20. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/checked.svg +0 -0
  21. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/close.svg +0 -0
  22. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/duplicate.svg +0 -0
  23. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/error.svg +0 -0
  24. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/file.svg +0 -0
  25. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/filedead.svg +0 -0
  26. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/fit.svg +0 -0
  27. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/folder.svg +0 -0
  28. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/grid.svg +0 -0
  29. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/image.svg +0 -0
  30. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/info.svg +0 -0
  31. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/load.svg +0 -0
  32. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/loop.svg +0 -0
  33. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/pan.svg +0 -0
  34. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/pause.svg +0 -0
  35. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/pencil.svg +0 -0
  36. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/play.svg +0 -0
  37. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/plus.svg +0 -0
  38. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/radio.svg +0 -0
  39. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/reset.svg +0 -0
  40. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/save.svg +0 -0
  41. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/stop.svg +0 -0
  42. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/tilemap.svg +0 -0
  43. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/tileset.svg +0 -0
  44. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/unchecked.svg +0 -0
  45. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/warning.svg +0 -0
  46. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/zoomin.svg +0 -0
  47. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/assets/icons/zoomout.svg +0 -0
  48. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/setup.cfg +0 -0
  49. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/configs/themes.py +0 -0
  50. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/constants.py +0 -0
  51. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/editor.py +0 -0
  52. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/event_map.py +0 -0
  53. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/layers.py +0 -0
  54. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/main.py +0 -0
  55. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/__init__.py +0 -0
  56. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/__init__.py +0 -0
  57. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/editor.py +0 -0
  58. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/models.py +0 -0
  59. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/protocols.py +0 -0
  60. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/shape_editor.py +0 -0
  61. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/character_collision/standalone.py +0 -0
  62. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/object_tileset_collision/__init__.py +0 -0
  63. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/object_tileset_collision/editor.py +0 -0
  64. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/object_tileset_collision/models.py +0 -0
  65. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/object_tileset_collision/protocols.py +0 -0
  66. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/object_tileset_collision/standalone.py +0 -0
  67. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/__init__.py +0 -0
  68. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/__main__.py +0 -0
  69. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/clipboard_util.py +0 -0
  70. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/editor.py +0 -0
  71. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/frame_picker.py +0 -0
  72. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/models.py +0 -0
  73. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/preview.py +0 -0
  74. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/protocols.py +0 -0
  75. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/runtime_load.py +0 -0
  76. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/standalone.py +0 -0
  77. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/timeline.py +0 -0
  78. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/sprite_animation/validation.py +0 -0
  79. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/__init__.py +0 -0
  80. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/collision_painter.py +0 -0
  81. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/editor.py +0 -0
  82. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/models.py +0 -0
  83. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/protocols.py +0 -0
  84. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/plugins/tileset_collision/standalone.py +0 -0
  85. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/standalone_automap.py +0 -0
  86. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/standalone_error_console.py +0 -0
  87. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/standalone_filemanager.py +0 -0
  88. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/standalone_image_viewer.py +0 -0
  89. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/__init__.py +0 -0
  90. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/__main__.py +0 -0
  91. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/__init__.py +0 -0
  92. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  93. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  94. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  95. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  96. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  97. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  98. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  99. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  100. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
  101. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
  102. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/check.svg +0 -0
  103. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/checked.svg +0 -0
  104. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/close.svg +0 -0
  105. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
  106. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/error.svg +0 -0
  107. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/file.svg +0 -0
  108. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
  109. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/fit.svg +0 -0
  110. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/folder.svg +0 -0
  111. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/grid.svg +0 -0
  112. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/image.svg +0 -0
  113. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/info.svg +0 -0
  114. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/load.svg +0 -0
  115. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/loop.svg +0 -0
  116. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/pan.svg +0 -0
  117. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/pause.svg +0 -0
  118. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
  119. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/play.svg +0 -0
  120. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/plus.svg +0 -0
  121. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/radio.svg +0 -0
  122. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/reset.svg +0 -0
  123. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/save.svg +0 -0
  124. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/stop.svg +0 -0
  125. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
  126. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
  127. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
  128. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/warning.svg +0 -0
  129. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
  130. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
  131. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/cli.py +0 -0
  132. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/main.py +0 -0
  133. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor/settings.py +0 -0
  134. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
  135. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
  136. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor.egg-info/requires.txt +0 -0
  137. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/tilemap_editor.egg-info/top_level.txt +0 -0
  138. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/ttypes/__init__.py +0 -0
  139. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/ttypes/tilemap.py +0 -0
  140. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/__init__.py +0 -0
  141. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/editor_preference.py +0 -0
  142. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/error_handler.py +0 -0
  143. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/font_manager.py +0 -0
  144. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/history.py +0 -0
  145. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/icon_manager.py +0 -0
  146. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/icons_cache.py +0 -0
  147. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/log_capture.py +0 -0
  148. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/project_paths.py +0 -0
  149. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/serialization.py +0 -0
  150. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/standalone.py +0 -0
  151. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/utils/validation.py +0 -0
  152. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/__init__.py +0 -0
  153. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/automap_models.py +0 -0
  154. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/autotile_template.py +0 -0
  155. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/autotiler.py +0 -0
  156. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/filemanager.py +0 -0
  157. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/input.py +0 -0
  158. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/layer_selector.py +0 -0
  159. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/map_properties.py +0 -0
  160. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/mapsetup.py +0 -0
  161. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/regex_automap_designer.py +0 -0
  162. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/tile_grid.py +0 -0
  163. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/tile_selector.py +0 -0
  164. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/collision_layer_mask.py +0 -0
  165. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/collision_layer_sidebar.py +0 -0
  166. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/draw_utils.py +0 -0
  167. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/fileinput.py +0 -0
  168. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/layer_type_dialog.py +0 -0
  169. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/menubar.py +0 -0
  170. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/mode_indicator.py +0 -0
  171. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/notification.py +0 -0
  172. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/property_editor.py +0 -0
  173. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/region_selector.py +0 -0
  174. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/status_bar.py +0 -0
  175. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/theme.py +0 -0
  176. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/tileset_type_dialog.py +0 -0
  177. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/toolbar.py +0 -0
  178. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/src/widgets/ui/tooltip.py +0 -0
  179. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/tests/test_collision_layer_mask.py +0 -0
  180. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/tests/test_collision_layer_sidebar.py +0 -0
  181. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/tests/test_project_paths.py +0 -0
  182. {tilemap_editor-3.1.4 → tilemap_editor-3.1.6}/tests/test_render_scale.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.1.4
3
+ Version: 3.1.6
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.1.4"
7
+ version = "3.1.6"
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"
@@ -302,7 +302,7 @@ class Tilemap:
302
302
  save_data["resources"]["tilesets"].append(ts_data)
303
303
 
304
304
  if hasattr(self.editor, "autotiler") and self.editor.autotiler:
305
- if not hasattr(save_data["project_state"], "groups"):
305
+ if "groups" not in save_data["project_state"]:
306
306
  save_data["project_state"]["groups"] = []
307
307
 
308
308
  for group in self.editor.autotiler.groups:
@@ -320,7 +320,7 @@ class Tilemap:
320
320
  save_data["project_state"]["rules"] = []
321
321
  for rule in self.editor.autotiler.rules:
322
322
  save_data["project_state"]["rules"].append(
323
- self._serialize_autotile_rule(rule, base_path)
323
+ self._serialize_autotile_rule(rule, map_dir)
324
324
  )
325
325
 
326
326
  # Save automap pattern rules
@@ -409,10 +409,10 @@ class Tilemap:
409
409
  "Cannot determine base_path - Editor not initialized with settings.json"
410
410
  )
411
411
 
412
- def _serialize_autotile_rule(self, rule: "AutotileRule", base_path: Path) -> dict:
412
+ def _serialize_autotile_rule(self, rule: "AutotileRule", save_dir: Path) -> dict:
413
413
  data = rule.to_dict()
414
414
  if data.get("tileset_path"):
415
- data["tileset_path"] = to_project_path(data["tileset_path"], base_path)
415
+ data["tileset_path"] = to_project_path(data["tileset_path"], save_dir)
416
416
  return data
417
417
 
418
418
  def _path_matches_project_path(self, stored_path: str, actual_path: Path) -> bool:
@@ -520,8 +520,8 @@ class Tilemap:
520
520
 
521
521
  p = resolve_project_path(
522
522
  path_str,
523
- self._project_base_path(),
524
- fallback_roots=[path.parent],
523
+ path.parent,
524
+ fallback_roots=[self._project_base_path()],
525
525
  must_exist=True,
526
526
  )
527
527
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.1.4
3
+ Version: 3.1.6
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
@@ -176,4 +176,5 @@ src/widgets/ui/tooltip.py
176
176
  tests/test_collision_layer_mask.py
177
177
  tests/test_collision_layer_sidebar.py
178
178
  tests/test_project_paths.py
179
- tests/test_render_scale.py
179
+ tests/test_render_scale.py
180
+ tests/test_tilemap_save.py
@@ -0,0 +1,154 @@
1
+ """
2
+ Tests for Tilemap.save_map.
3
+
4
+ Catches regressions like referencing undefined variables in the
5
+ save path (e.g., `base_path` instead of `map_dir` when serializing
6
+ autotile rules).
7
+ """
8
+
9
+ import json
10
+ import tempfile
11
+ from pathlib import Path
12
+
13
+ import pytest
14
+
15
+ import sys
16
+ sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
17
+
18
+
19
+ class TestSaveMapAutotileRules:
20
+ """save_map must handle autotile rules without NameError"""
21
+
22
+ @pytest.fixture
23
+ def fake_autotiler(self):
24
+ class FakeRule:
25
+ def __init__(self, name: str):
26
+ self.name = name
27
+ self.tileset_path = ""
28
+ self.tileset_index = None
29
+ self.variant_ids = []
30
+ self.group_id = name
31
+
32
+ def to_dict(self):
33
+ return {
34
+ "name": self.name,
35
+ "neighbors": [],
36
+ "tileset_path": self.tileset_path,
37
+ "tileset_index": self.tileset_index,
38
+ "variant_ids": self.variant_ids,
39
+ "group_id": self.group_id,
40
+ }
41
+
42
+ class FakeGroup:
43
+ def __init__(self, name: str, rules):
44
+ self.name = name
45
+ self.rules = rules
46
+
47
+ class FakeAutotiler:
48
+ groups = [FakeGroup("Test", [FakeRule("rule_a"), FakeRule("rule_b")])]
49
+
50
+ @property
51
+ def rules(self):
52
+ all_rules = []
53
+ for g in self.groups:
54
+ all_rules.extend(g.rules)
55
+ return all_rules
56
+
57
+ return FakeAutotiler()
58
+
59
+ @pytest.fixture
60
+ def editor(self, fake_autotiler):
61
+ class FakeTilesetWidget:
62
+ tilesets = []
63
+
64
+ class FakeTileGrid:
65
+ zoom_level = 1.0
66
+ scroll_x = 0
67
+ scroll_y = 0
68
+
69
+ class FakeEditor:
70
+ tileset_widget = FakeTilesetWidget()
71
+ tile_grid_widget = FakeTileGrid()
72
+ autotiler = fake_autotiler
73
+ base_path = None
74
+ data_root = None
75
+ regex_automap_designer = None
76
+
77
+ return FakeEditor()
78
+
79
+ def test_save_map_with_autotile_rules_succeeds(self, editor):
80
+ """save_map must not raise when autotiler is configured with rules"""
81
+ from tilemap import Tilemap
82
+
83
+ tm = Tilemap(editor)
84
+ tm.init_size((16, 16), (10, 10))
85
+
86
+ with tempfile.TemporaryDirectory() as tmp:
87
+ path = Path(tmp) / "test.json"
88
+ tm.save_map(path)
89
+ with open(path) as f:
90
+ data = json.load(f)
91
+
92
+ assert "project_state" in data
93
+ assert "rules" in data["project_state"]
94
+ assert "groups" in data["project_state"]
95
+
96
+ def test_save_map_autotile_rules_serialized_correctly(self, editor):
97
+ """saved autotile rules should appear in project_state.rules"""
98
+ from tilemap import Tilemap
99
+
100
+ tm = Tilemap(editor)
101
+ tm.init_size((16, 16), (10, 10))
102
+
103
+ with tempfile.TemporaryDirectory() as tmp:
104
+ path = Path(tmp) / "test.json"
105
+ tm.save_map(path)
106
+ with open(path) as f:
107
+ data = json.load(f)
108
+
109
+ rule_names = [r["name"] for r in data["project_state"]["rules"]]
110
+ assert "rule_a" in rule_names
111
+ assert "rule_b" in rule_names
112
+
113
+ def test_save_map_autotile_groups_serialized_correctly(self, editor):
114
+ """saved autotile groups should appear in project_state.groups"""
115
+ from tilemap import Tilemap
116
+
117
+ tm = Tilemap(editor)
118
+ tm.init_size((16, 16), (10, 10))
119
+
120
+ with tempfile.TemporaryDirectory() as tmp:
121
+ path = Path(tmp) / "test.json"
122
+ tm.save_map(path)
123
+ with open(path) as f:
124
+ data = json.load(f)
125
+
126
+ group_names = [g["name"] for g in data["project_state"]["groups"]]
127
+ assert "Test" in group_names
128
+
129
+ def test_save_map_without_autotiler_still_works(self):
130
+ """Regression: save_map must work when autotiler is absent"""
131
+ from tilemap import Tilemap
132
+
133
+ class FakeTilesetWidget:
134
+ tilesets = []
135
+
136
+ class FakeTileGrid:
137
+ zoom_level = 1.0
138
+ scroll_x = 0
139
+ scroll_y = 0
140
+
141
+ class FakeEditor:
142
+ tileset_widget = FakeTilesetWidget()
143
+ tile_grid_widget = FakeTileGrid()
144
+ autotiler = None
145
+ base_path = None
146
+ data_root = None
147
+ regex_automap_designer = None
148
+
149
+ tm = Tilemap(FakeEditor())
150
+ tm.init_size((16, 16), (10, 10))
151
+
152
+ with tempfile.TemporaryDirectory() as tmp:
153
+ path = Path(tmp) / "test.json"
154
+ tm.save_map(path)
File without changes
File without changes
File without changes