com.wallstop-studios.unity-helpers 2.0.0-rc81.7 → 2.0.0-rc81.9

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 (1449) hide show
  1. package/.config/dotnet-tools.json +10 -10
  2. package/.csharpierignore +1 -0
  3. package/.csharpierrc.json +3 -0
  4. package/.editorconfig +184 -184
  5. package/.gitattributes +87 -63
  6. package/.githooks/pre-commit +49 -0
  7. package/.github/dependabot.yml +9 -9
  8. package/.github/workflows/csharpier.yml +135 -0
  9. package/.github/workflows/lint-doc-links.yml +27 -0
  10. package/.github/workflows/markdown-json.yml +41 -0
  11. package/.github/workflows/npm-publish.yml +75 -75
  12. package/.lychee.toml +26 -0
  13. package/.markdownlint.json +21 -0
  14. package/.markdownlintignore +8 -0
  15. package/.pre-commit-config.yaml +39 -22
  16. package/.prettierignore +22 -0
  17. package/.prettierrc.json +20 -0
  18. package/AGENTS.md +52 -0
  19. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  20. package/CHANGELOG.md.meta +7 -7
  21. package/DATA_STRUCTURES.md +324 -0
  22. package/DATA_STRUCTURES.md.meta +7 -0
  23. package/Docs/Images/attribute_resolution.svg +40 -0
  24. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  25. package/Docs/Images/bitset.svg +47 -0
  26. package/Docs/Images/bitset.svg.meta +7 -0
  27. package/Docs/Images/concave_hull.svg +30 -0
  28. package/Docs/Images/concave_hull.svg.meta +7 -0
  29. package/Docs/Images/convex_hull.svg +29 -0
  30. package/Docs/Images/convex_hull.svg.meta +7 -0
  31. package/Docs/Images/cyclic_buffer.svg +37 -0
  32. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  33. package/Docs/Images/data_distribution_decision.svg +88 -0
  34. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  35. package/Docs/Images/deque.svg +64 -0
  36. package/Docs/Images/deque.svg.meta +7 -0
  37. package/Docs/Images/deque_queue.svg +107 -0
  38. package/Docs/Images/deque_queue.svg.meta +7 -0
  39. package/Docs/Images/disjoint_set.svg +47 -0
  40. package/Docs/Images/disjoint_set.svg.meta +7 -0
  41. package/Docs/Images/effects_pipeline.svg +59 -0
  42. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  43. package/Docs/Images/geometry_edge_cases.svg +61 -0
  44. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  45. package/Docs/Images/heap.svg +56 -0
  46. package/Docs/Images/heap.svg.meta +7 -0
  47. package/Docs/Images/kdtree_2d.svg +38 -0
  48. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  49. package/Docs/Images/kdtree_3d.svg +83 -0
  50. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  51. package/Docs/Images/octree_3d.svg +79 -0
  52. package/Docs/Images/octree_3d.svg.meta +7 -0
  53. package/Docs/Images/polyline_simplify.svg +18 -0
  54. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  55. package/Docs/Images/quadtree_2d.svg +37 -0
  56. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  57. package/Docs/Images/query_boundaries.svg +38 -0
  58. package/Docs/Images/query_boundaries.svg.meta +7 -0
  59. package/Docs/Images/random_generators.svg +105 -0
  60. package/Docs/Images/random_generators.svg.meta +7 -0
  61. package/Docs/Images/reflection_scan.svg +33 -0
  62. package/Docs/Images/reflection_scan.svg.meta +7 -0
  63. package/Docs/Images/relational_wiring.svg +75 -0
  64. package/Docs/Images/relational_wiring.svg.meta +7 -0
  65. package/Docs/Images/rtree_2d.svg +27 -0
  66. package/Docs/Images/rtree_2d.svg.meta +7 -0
  67. package/Docs/Images/rtree_3d.svg +79 -0
  68. package/Docs/Images/rtree_3d.svg.meta +7 -0
  69. package/Docs/Images/serialization_flow.svg +50 -0
  70. package/Docs/Images/serialization_flow.svg.meta +7 -0
  71. package/Docs/Images/singletons_lifecycle.svg +54 -0
  72. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  73. package/Docs/Images/sparse_set.svg +54 -0
  74. package/Docs/Images/sparse_set.svg.meta +7 -0
  75. package/Docs/Images/trie.svg +55 -0
  76. package/Docs/Images/trie.svg.meta +7 -0
  77. package/Docs/Images.meta +8 -0
  78. package/Docs.meta +8 -0
  79. package/EDITOR_TOOLS_GUIDE.md +1976 -0
  80. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  81. package/EFFECTS_SYSTEM.md +242 -0
  82. package/EFFECTS_SYSTEM.md.meta +7 -0
  83. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  84. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  85. package/Editor/AnimationEventEditor.cs +1393 -874
  86. package/Editor/AnimationEventEditor.cs.meta +11 -11
  87. package/Editor/AssemblyInfo.cs +4 -0
  88. package/Editor/AssemblyInfo.cs.meta +3 -0
  89. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  90. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  91. package/Editor/AssetProcessors.meta +2 -2
  92. package/Editor/Core/Helper/AnimationEventHelpers.cs +204 -0
  93. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  94. package/Editor/Core/Helper.meta +8 -0
  95. package/Editor/Core.meta +8 -0
  96. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  97. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  98. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  99. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  100. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  101. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  102. package/Editor/CustomDrawers.meta +2 -2
  103. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  104. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  105. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +799 -799
  106. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  107. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  108. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  109. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  110. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  111. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +146 -0
  112. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  113. package/Editor/CustomEditors.meta +2 -2
  114. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  115. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  116. package/Editor/Extensions/UnityExtensions.cs +50 -26
  117. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  118. package/Editor/Extensions.meta +2 -2
  119. package/Editor/FitTextureSizeWindow.cs +785 -332
  120. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  121. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  122. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  123. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  124. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  125. package/Editor/Persistence.meta +8 -0
  126. package/Editor/PersistentDirectorySettings.cs +529 -248
  127. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  128. package/Editor/PrefabChecker.cs +1329 -741
  129. package/Editor/PrefabChecker.cs.meta +11 -11
  130. package/Editor/Sprites/AnimationCopier.cs +1518 -789
  131. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  132. package/Editor/Sprites/AnimationCreator.cs +1532 -881
  133. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  134. package/Editor/Sprites/AnimationViewerWindow.cs +1634 -1522
  135. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  136. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  137. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  138. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  139. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  140. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  141. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  142. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  143. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  144. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  145. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  146. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  147. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  148. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  149. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  150. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  151. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  152. package/Editor/Sprites/TexturePlatformNameHelper.cs +78 -0
  153. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  154. package/Editor/Sprites/TextureResizerWizard.cs +434 -175
  155. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  156. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  157. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  158. package/Editor/Sprites/TextureSettingsApplierWindow.cs +605 -0
  159. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  160. package/Editor/Sprites.meta +2 -2
  161. package/Editor/Styles/AnimationViewer.uss +115 -115
  162. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  163. package/Editor/Styles/AnimationViewer.uxml +56 -56
  164. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  165. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  166. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  167. package/Editor/Styles.meta +2 -2
  168. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  169. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  170. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  171. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  172. package/Editor/Tags.meta +8 -0
  173. package/Editor/Tools/ImageBlurTool.cs +451 -409
  174. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  175. package/Editor/Tools.meta +2 -2
  176. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  177. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  178. package/Editor/Utils/EditorUi.cs +228 -0
  179. package/Editor/Utils/EditorUi.cs.meta +11 -0
  180. package/Editor/Utils/EditorUtilities.cs +22 -22
  181. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  182. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  183. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  184. package/Editor/Utils.meta +8 -8
  185. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  186. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  187. package/Editor/Visuals.meta +2 -2
  188. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  189. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  190. package/Editor.meta +8 -8
  191. package/GETTING_STARTED.md +425 -0
  192. package/GETTING_STARTED.md.meta +7 -0
  193. package/GLOSSARY.md +313 -0
  194. package/GLOSSARY.md.meta +7 -0
  195. package/HULLS.md +45 -0
  196. package/HULLS.md.meta +7 -0
  197. package/INDEX.md +429 -0
  198. package/INDEX.md.meta +7 -0
  199. package/LICENSE +21 -21
  200. package/LICENSE.md +7 -7
  201. package/LICENSE.md.meta +7 -7
  202. package/LICENSE.meta +7 -7
  203. package/MATH_AND_EXTENSIONS.md +316 -0
  204. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  205. package/RANDOM_PERFORMANCE.md +140 -0
  206. package/RANDOM_PERFORMANCE.md.meta +7 -0
  207. package/README.md +3195 -188
  208. package/README.md.meta +7 -7
  209. package/REFLECTION_HELPERS.md +272 -0
  210. package/REFLECTION_HELPERS.md.meta +7 -0
  211. package/RELATIONAL_COMPONENTS.md +543 -0
  212. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  213. package/Runtime/AssemblyInfo.cs +7 -0
  214. package/Runtime/AssemblyInfo.cs.meta +11 -0
  215. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  216. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  217. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  218. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  219. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  220. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  221. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  222. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  223. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  224. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  225. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  226. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  227. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  228. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  229. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  230. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  231. package/Runtime/Binaries.meta +8 -8
  232. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  233. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  234. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  235. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  236. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  237. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  238. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  239. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  240. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  241. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  242. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  243. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  244. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  245. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  246. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  247. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  249. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  250. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  251. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  252. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +107 -0
  253. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  254. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  255. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  256. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  257. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  259. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  261. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  263. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  265. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  266. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  267. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  268. package/Runtime/Core/Attributes.meta +8 -8
  269. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  270. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  271. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  272. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  273. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  274. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  275. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  276. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  277. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  278. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  279. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  280. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  281. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  282. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  283. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  284. package/Runtime/Core/DataStructure/CyclicBuffer.cs +489 -266
  285. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  286. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  287. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  288. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  289. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  290. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  291. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  292. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  293. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  295. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  297. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  298. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  299. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  300. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  301. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  303. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  305. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  307. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  309. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  310. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  311. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  312. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  313. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  315. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  316. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  317. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  319. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  321. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  322. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  323. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  324. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  325. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  326. package/Runtime/Core/DataStructure.meta +8 -8
  327. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  328. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  329. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  330. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  331. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  332. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  333. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  334. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  335. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  336. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  337. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  338. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  339. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  340. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  341. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  342. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  344. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  345. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  346. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  347. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  348. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  349. package/Runtime/Core/Extension/RandomExtensions.cs +938 -109
  350. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  352. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  354. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  355. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +271 -245
  356. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  357. package/Runtime/Core/Extension.meta +8 -8
  358. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  359. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  360. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  361. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  362. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  363. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  364. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  365. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  366. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  367. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  368. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  369. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  370. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  371. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  372. package/Runtime/Core/Helper/Geometry.cs +65 -43
  373. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  374. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  375. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  376. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  377. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  378. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  379. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  380. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  381. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  383. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  384. package/Runtime/Core/Helper/Logging.meta +2 -2
  385. package/Runtime/Core/Helper/Objects.cs +477 -769
  386. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  387. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  388. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  389. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  390. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  391. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +506 -400
  392. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  393. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  394. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  395. package/Runtime/Core/Helper/Partials.meta +2 -2
  396. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  397. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  398. package/Runtime/Core/Helper/ReflectionHelpers.cs +5287 -1963
  399. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  400. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  401. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  402. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  403. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  404. package/Runtime/Core/Helper/SpriteHelpers.cs +50 -41
  405. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  406. package/Runtime/Core/Helper/StringInList.cs +61 -35
  407. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  408. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  409. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  410. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +100 -82
  411. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  412. package/Runtime/Core/Helper/WallMath.cs +672 -166
  413. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  414. package/Runtime/Core/Helper.meta +8 -8
  415. package/Runtime/Core/Math/Line2D.cs +263 -0
  416. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  417. package/Runtime/Core/Math/Line3D.cs +452 -0
  418. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  419. package/Runtime/Core/Math/Parabola.cs +241 -47
  420. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  421. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  422. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  423. package/Runtime/Core/Math/Range.cs +157 -92
  424. package/Runtime/Core/Math/Range.cs.meta +11 -11
  425. package/Runtime/Core/Math.meta +8 -8
  426. package/Runtime/Core/Model/Direction.cs +25 -43
  427. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  428. package/Runtime/Core/Model.meta +8 -8
  429. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  430. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  431. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  432. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  433. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  434. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  435. package/Runtime/Core/OneOf/None.cs +30 -4
  436. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  437. package/Runtime/Core/OneOf.meta +8 -8
  438. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  439. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  440. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  441. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  442. package/Runtime/Core/Random/IRandom.cs +203 -161
  443. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  444. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  445. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  446. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  447. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  448. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  449. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  450. package/Runtime/Core/Random/PRNG.cs +21 -7
  451. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  452. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  453. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  455. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  456. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  457. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  458. package/Runtime/Core/Random/RandomState.cs +206 -131
  459. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  460. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  461. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  462. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  463. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  464. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  465. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  466. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  467. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  469. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  470. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  471. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  472. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  473. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  474. package/Runtime/Core/Random/WyRandom.cs +158 -121
  475. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  476. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  477. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  478. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  479. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  480. package/Runtime/Core/Random.meta +8 -8
  481. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  482. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  483. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  484. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  485. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  486. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  487. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  488. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  489. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  490. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  491. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  492. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  493. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  494. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  495. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  496. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  497. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  498. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  500. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  502. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  504. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +36 -36
  506. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  507. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  508. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  510. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  511. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  512. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  514. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  516. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  518. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  519. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  520. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  521. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  522. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  524. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  526. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  528. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  530. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  532. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  533. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  534. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  536. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  538. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  540. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  548. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  550. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  552. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  554. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  556. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  557. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  558. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  559. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  560. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  562. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  563. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  564. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  566. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  567. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  568. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  569. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  570. package/Runtime/Core/Serialization/Serializer.cs +2020 -195
  571. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  572. package/Runtime/Core/Serialization.meta +8 -8
  573. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  574. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  575. package/Runtime/Core/Threading.meta +8 -8
  576. package/Runtime/Core.meta +8 -8
  577. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +185 -0
  578. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  579. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +109 -0
  580. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  581. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +78 -0
  582. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  583. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +83 -0
  584. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  585. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  586. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  587. package/Runtime/Integrations/VContainer.meta +8 -0
  588. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +180 -0
  589. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  590. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +105 -0
  591. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  592. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +72 -0
  593. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  594. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +87 -0
  595. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  596. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  597. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  598. package/Runtime/Integrations/Zenject.meta +8 -0
  599. package/Runtime/Integrations.meta +8 -0
  600. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  601. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  602. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  603. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  604. package/Runtime/Protobuf-Net.meta +8 -8
  605. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  606. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  607. package/Runtime/Tags/Attribute.cs +399 -205
  608. package/Runtime/Tags/Attribute.cs.meta +2 -2
  609. package/Runtime/Tags/AttributeEffect.cs +372 -281
  610. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  611. package/Runtime/Tags/AttributeMetadataCache.cs +503 -0
  612. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  613. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  614. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  615. package/Runtime/Tags/AttributeModification.cs +132 -48
  616. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  617. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  618. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  619. package/Runtime/Tags/AttributesComponent.cs +237 -163
  620. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  621. package/Runtime/Tags/CollisionSenses.cs +117 -91
  622. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  623. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  624. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  625. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  626. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  627. package/Runtime/Tags/EffectHandle.cs +150 -65
  628. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  629. package/Runtime/Tags/EffectHandler.cs +470 -393
  630. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  631. package/Runtime/Tags/ModificationAction.cs +60 -9
  632. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  633. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  634. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  635. package/Runtime/Tags/TagHandler.cs +373 -158
  636. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  637. package/Runtime/Tags.meta +2 -2
  638. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  639. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  640. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  641. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  642. package/Runtime/Utils/Ascii85.cs +132 -115
  643. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  644. package/Runtime/Utils/Buffers.cs +1151 -550
  645. package/Runtime/Utils/Buffers.cs.meta +11 -11
  646. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  647. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  648. package/Runtime/Utils/ChildSpawner.cs +250 -157
  649. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  650. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  651. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  652. package/Runtime/Utils/CollisionProxy.cs +48 -48
  653. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  654. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  655. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  656. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  657. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  658. package/Runtime/Utils/LZMA.cs +276 -53
  659. package/Runtime/Utils/LZMA.cs.meta +2 -2
  660. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  661. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  662. package/Runtime/Utils/MatchTransform.cs +99 -82
  663. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  664. package/Runtime/Utils/Oscillator.cs +27 -27
  665. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  666. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  667. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  668. package/Runtime/Utils/RuntimeSingleton.cs +139 -89
  669. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  670. package/Runtime/Utils/ScriptableObjectSingleton.cs +226 -85
  671. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  672. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  673. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  674. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  675. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  676. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  677. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  678. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  679. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  680. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  681. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  682. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  683. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  684. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  685. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  686. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  687. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  688. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  689. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  690. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  691. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  692. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  693. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  694. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  695. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  696. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  697. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  698. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  699. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  700. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  701. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  702. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  703. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  704. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  705. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  706. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  707. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  708. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  709. package/Runtime/Utils/SevenZip.meta +2 -2
  710. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  711. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  712. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  713. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  714. package/Runtime/Utils/StartTracker.cs +15 -15
  715. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  716. package/Runtime/Utils/TextureScale.cs +356 -179
  717. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  718. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  719. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  720. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  721. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  722. package/Runtime/Utils.meta +8 -8
  723. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  724. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  725. package/Runtime/Visuals/UGUI/EnhancedImage.cs +218 -85
  726. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  727. package/Runtime/Visuals/UGUI.meta +2 -2
  728. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +781 -484
  729. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  730. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  731. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  732. package/Runtime/Visuals/UIToolkit.meta +2 -2
  733. package/Runtime/Visuals.meta +2 -2
  734. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  735. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  736. package/Runtime.meta +8 -8
  737. package/SERIALIZATION.md +648 -0
  738. package/SERIALIZATION.md.meta +7 -0
  739. package/SINGLETONS.md +427 -0
  740. package/SINGLETONS.md.meta +7 -0
  741. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  742. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  743. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  744. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  745. package/SPATIAL_TREE_2D_PERFORMANCE.md +238 -0
  746. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  747. package/SPATIAL_TREE_3D_PERFORMANCE.md +240 -0
  748. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  749. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  750. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  751. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  752. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  753. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  754. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  755. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  756. package/Samples~/DI - VContainer/README.md +334 -0
  757. package/Samples~/DI - VContainer/README.md.meta +8 -0
  758. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  759. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  760. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  761. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +24 -0
  762. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  763. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +21 -0
  764. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  765. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  766. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  767. package/Samples~/DI - VContainer/Scripts/Spawner.cs +21 -0
  768. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  769. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  770. package/Samples~/DI - VContainer.meta +9 -0
  771. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  772. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  773. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  774. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  775. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  776. package/Samples~/DI - Zenject/README.md +389 -0
  777. package/Samples~/DI - Zenject/README.md.meta +7 -0
  778. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  779. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  780. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  781. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +19 -0
  782. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  783. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  784. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  785. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  786. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  787. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +20 -0
  788. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  789. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  790. package/Samples~/DI - Zenject.meta +9 -0
  791. package/Samples~/Random - PRNG/README.md +12 -0
  792. package/Samples~/Random - PRNG/README.md.meta +8 -0
  793. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  794. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  795. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  796. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  797. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  798. package/Samples~/Random - PRNG.meta +9 -0
  799. package/Samples~/Relational Components - Basic/README.md +19 -0
  800. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  801. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  802. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  803. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  804. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  805. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  806. package/Samples~/Relational Components - Basic.meta +9 -0
  807. package/Samples~/Serialization - JSON/README.md +13 -0
  808. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  809. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  810. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  811. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  812. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  813. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  814. package/Samples~/Serialization - JSON.meta +9 -0
  815. package/Samples~/Spatial Structures - 2D and 3D/README.md +13 -0
  816. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  817. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  818. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  819. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  820. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  821. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  822. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  823. package/Samples~/UGUI - EnhancedImage/README.md +12 -0
  824. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  825. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  826. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  827. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  828. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  829. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  830. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  831. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +12 -0
  832. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  833. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  834. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  835. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  836. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  837. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  838. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  839. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  840. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  841. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  842. package/Shaders/Materials.meta +8 -8
  843. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  844. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  845. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  846. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  847. package/Shaders/ShaderGraph.meta +8 -8
  848. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  849. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  850. package/Shaders/Support.meta +8 -0
  851. package/Shaders.meta +8 -8
  852. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  853. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  854. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  855. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  856. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  857. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  858. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  859. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  860. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  861. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  862. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  863. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  864. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  865. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  866. package/Styles/Elements/Progress.meta +2 -2
  867. package/Styles/Elements.meta +2 -2
  868. package/Styles/USS/ArcedProgressBar.uss +18 -18
  869. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  870. package/Styles/USS/CirclularProgressBar.uss +17 -17
  871. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  872. package/Styles/USS/RegularProgressBar.uss +32 -32
  873. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  874. package/Styles/USS/WigglyProgressBar.uss +16 -16
  875. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  876. package/Styles/USS.meta +2 -2
  877. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  878. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  879. package/Styles.meta +2 -2
  880. package/THIRD_PARTY_NOTICES.md +74 -0
  881. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  882. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +155 -0
  883. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  884. package/Tests/Editor/Attributes.meta +8 -0
  885. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  886. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  887. package/Tests/Editor/Core/Attributes.meta +8 -0
  888. package/Tests/Editor/Core.meta +8 -0
  889. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  890. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  891. package/Tests/Editor/Extensions.meta +3 -0
  892. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  893. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  894. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  895. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  896. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  897. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  898. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  899. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  900. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  901. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  902. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  903. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  904. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  905. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  906. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  907. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  908. package/Tests/Editor/Helper.meta +3 -0
  909. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  910. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  911. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +77 -0
  912. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  913. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +36 -0
  914. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  915. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  916. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +36 -0
  917. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  918. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  919. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  920. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +76 -0
  921. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  922. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  923. package/Tests/Editor/Integrations.meta +8 -0
  924. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  925. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  926. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  927. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  928. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  929. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  930. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  931. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  932. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  933. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  935. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  936. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  937. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  938. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  939. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  940. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +28 -0
  941. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  942. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  943. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  944. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  945. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  946. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  947. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  948. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  949. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  950. package/Tests/Editor/Sprites.meta +8 -0
  951. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  952. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  953. package/Tests/Editor/TestComponents.meta +8 -0
  954. package/Tests/Editor/Tools/ImageBlurToolTests.cs +135 -0
  955. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  956. package/Tests/Editor/Tools.meta +8 -0
  957. package/Tests/Editor/Utils/CommonTestBase.cs +208 -0
  958. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  959. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  960. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  961. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  962. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  963. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  964. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  965. package/Tests/Editor/Utils.meta +3 -0
  966. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  967. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  968. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +781 -0
  969. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  971. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  972. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  973. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  974. package/Tests/Editor/Windows.meta +8 -0
  975. package/Tests/Editor.meta +8 -0
  976. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  977. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  978. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  979. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  980. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  981. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  982. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  983. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  984. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  985. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  986. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  987. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  988. package/Tests/Runtime/Attributes/Components.meta +2 -2
  989. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  990. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  991. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  992. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  993. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  994. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  995. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  996. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  997. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  998. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  999. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1000. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1001. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1002. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1003. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +109 -0
  1004. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1005. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1006. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1007. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1008. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1009. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1010. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1011. package/Tests/Runtime/Attributes.meta +2 -2
  1012. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1013. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1014. package/Tests/Runtime/Core/Random.meta +8 -0
  1015. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1016. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1017. package/Tests/Runtime/Core/Threading.meta +2 -2
  1018. package/Tests/Runtime/Core.meta +2 -2
  1019. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1020. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1021. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1022. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1023. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1024. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1025. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1026. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1027. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1028. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1029. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1030. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1031. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1032. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1034. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1035. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1036. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1037. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1038. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1039. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1040. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1041. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1042. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1043. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1044. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1045. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1046. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1047. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1048. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1049. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1050. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1051. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1052. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1053. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1054. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1055. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1056. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1057. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1058. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1059. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1060. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1061. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1062. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1064. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1065. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1066. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1068. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1070. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1071. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1072. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1073. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1074. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1075. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1076. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1078. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1080. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1081. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1082. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1084. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1085. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1086. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1088. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1089. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1090. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1091. package/Tests/Runtime/DataStructures.meta +8 -8
  1092. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1093. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1094. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1095. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1096. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1097. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1098. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1099. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1100. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1101. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1102. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1103. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1104. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1105. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1106. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1107. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1108. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1109. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1110. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1111. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1112. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1113. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1114. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1115. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1116. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1117. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1118. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1119. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1120. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1121. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1122. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1123. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1124. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1125. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1126. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1127. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1128. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1129. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1130. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1131. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1132. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1133. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions.meta +2 -2
  1135. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1136. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1137. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1138. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1139. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1140. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1141. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1142. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1143. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1144. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1145. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1146. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1147. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1148. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1149. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1150. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1151. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1152. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1153. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1154. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1155. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1156. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1157. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1158. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1159. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1160. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1161. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1162. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1163. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1164. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1165. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1166. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1167. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1168. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1169. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1170. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1171. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1172. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1173. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1174. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1175. package/Tests/Runtime/Helper.meta +2 -2
  1176. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +560 -0
  1177. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1178. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1179. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1180. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1181. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +591 -0
  1182. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1184. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1185. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1186. package/Tests/Runtime/Integrations.meta +8 -0
  1187. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1188. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1190. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1191. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1192. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1194. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1196. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1198. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1199. package/Tests/Runtime/Math.meta +8 -0
  1200. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1201. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1202. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1203. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1204. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1205. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1206. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1207. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1208. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1209. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1210. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1211. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1212. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1213. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1214. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +692 -0
  1215. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1216. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +650 -0
  1217. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Performance.meta +8 -8
  1219. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1220. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1221. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1222. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1223. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1224. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1225. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1226. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1227. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1228. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1229. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1230. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1231. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1232. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1233. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1234. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1235. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1236. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1237. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1238. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1239. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1240. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1241. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1242. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1243. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1244. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1245. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1246. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1247. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1248. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1249. package/Tests/Runtime/Random.meta +8 -8
  1250. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1251. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1252. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1253. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1254. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1255. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1256. package/Tests/Runtime/Scenes.meta +2 -2
  1257. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1258. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1259. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1260. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1261. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1262. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1263. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1264. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1265. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1266. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1267. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1157 -0
  1268. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1269. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1270. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1271. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1272. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1273. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
  1274. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1275. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1276. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1277. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1278. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1279. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1280. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1281. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1282. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1283. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1284. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1285. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1286. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1287. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1288. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1289. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +895 -0
  1290. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1291. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1292. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1293. package/Tests/Runtime/Serialization.meta +2 -2
  1294. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1295. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1296. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1297. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1298. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1299. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1300. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1301. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1302. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1303. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1304. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1305. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1306. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1307. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1308. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1309. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1310. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1311. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1312. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1313. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1314. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1315. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1316. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Tags.meta +8 -0
  1318. package/Tests/Runtime/TestUtils/CommonTestBase.cs +213 -0
  1319. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1320. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1321. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1322. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1323. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1324. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1325. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1326. package/Tests/Runtime/TestUtils.meta +8 -0
  1327. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1328. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1329. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1330. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1331. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1332. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1333. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1334. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1335. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1336. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1338. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1340. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1342. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1343. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1344. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1345. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1346. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1347. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1348. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1349. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1350. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1351. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1352. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1353. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1354. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1355. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1356. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1357. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1358. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1359. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1360. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1361. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1362. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1363. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1364. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1365. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1366. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1367. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1368. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1369. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1370. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1371. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1372. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1373. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1374. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1375. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1376. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1378. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1379. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1380. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1381. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1382. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1384. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1386. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils.meta +2 -2
  1388. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1389. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1390. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +184 -0
  1391. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1392. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1393. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1394. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +132 -0
  1395. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1396. package/Tests/Runtime/Visuals.meta +3 -0
  1397. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1398. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1399. package/Tests/Runtime.meta +8 -8
  1400. package/Tests.meta +8 -8
  1401. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1402. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1403. package/URP/VolumeProfiles.meta +8 -8
  1404. package/URP.meta +8 -8
  1405. package/node_modules.meta +8 -0
  1406. package/package.json +95 -38
  1407. package/package.json.meta +7 -7
  1408. package/scripts/check-eol.ps1 +52 -0
  1409. package/scripts/check-eol.ps1.meta +7 -0
  1410. package/scripts/clean-nul.ps1 +29 -0
  1411. package/scripts/clean-nul.ps1.meta +7 -0
  1412. package/scripts/lint-doc-links.ps1 +80 -0
  1413. package/scripts/lint-doc-links.ps1.meta +7 -0
  1414. package/scripts/normalize-eol.ps1 +71 -0
  1415. package/scripts/normalize-eol.ps1.meta +7 -0
  1416. package/scripts.meta +8 -0
  1417. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1418. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1419. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1420. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1421. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1422. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1423. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1424. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1425. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1426. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1427. package/Runtime/Core/Math/Line.cs +0 -55
  1428. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1429. package/Runtime/Core/Math/XXHash.cs +0 -310
  1430. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1431. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1432. package/Tests/Runtime/Components.meta +0 -3
  1433. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1434. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1435. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1436. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1437. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1438. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1439. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1440. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1441. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1442. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1443. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1444. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1445. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1446. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1447. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1448. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1449. package/Third Party Notices.md +0 -1
@@ -1,789 +1,1518 @@
1
- namespace WallstopStudios.UnityHelpers.Editor.Sprites
2
- {
3
- #if UNITY_EDITOR
4
- using System;
5
- using System.Collections.Generic;
6
- using System.IO;
7
- using System.Linq;
8
- using System.Security.Cryptography;
9
- using UnityEditor;
10
- using UnityEngine;
11
- using Core.Extension;
12
- using Core.Helper;
13
- using CustomEditors;
14
-
15
- public sealed class AnimationCopierWindow : EditorWindow
16
- {
17
- [SerializeField]
18
- private string _animationSourcePathRelative = "Assets/Sprites";
19
-
20
- [SerializeField]
21
- private string _animationDestinationPathRelative = "Assets/Animations";
22
- private string _fullSourcePath = "";
23
- private string _fullDestinationPath = "";
24
-
25
- private bool _analysisNeeded = true;
26
- private bool _isAnalyzing;
27
- private bool _isCopying;
28
- private bool _isDeleting;
29
-
30
- private SerializedObject _serializedObject;
31
- private SerializedProperty _animationSourcesPathProperty;
32
- private SerializedProperty _animationDestinationPathProperty;
33
-
34
- private readonly List<AnimationFileInfo> _sourceAnimations = new();
35
- private readonly List<AnimationFileInfo> _newAnimations = new();
36
- private readonly List<AnimationFileInfo> _changedAnimations = new();
37
- private readonly List<AnimationFileInfo> _unchangedAnimations = new();
38
-
39
- private enum AnimationStatus
40
- {
41
- Unknown,
42
- New,
43
- Changed,
44
- Unchanged,
45
- }
46
-
47
- private enum CopyMode
48
- {
49
- All,
50
- Changed,
51
- New,
52
- }
53
-
54
- private class AnimationFileInfo
55
- {
56
- public string RelativePath { get; set; }
57
- public string FullPath { get; set; }
58
- public string FileName { get; set; }
59
- public string RelativeDirectory { get; set; }
60
- public string Hash { get; set; }
61
- public AnimationStatus Status { get; set; } = AnimationStatus.Unknown;
62
- public string DestinationRelativePath { get; set; }
63
- }
64
-
65
- [MenuItem("Tools/Wallstop Studios/Unity Helpers/Animation Copier", priority = -2)]
66
- public static void ShowWindow()
67
- {
68
- GetWindow<AnimationCopierWindow>("Animation Copier");
69
- }
70
-
71
- private void OnEnable()
72
- {
73
- _serializedObject = new SerializedObject(this);
74
- _animationSourcesPathProperty = _serializedObject.FindProperty(
75
- nameof(_animationSourcePathRelative)
76
- );
77
- _animationDestinationPathProperty = _serializedObject.FindProperty(
78
- nameof(_animationDestinationPathRelative)
79
- );
80
- ValidatePaths();
81
- _analysisNeeded = true;
82
- this.Log($"Animation Copier Window opened.");
83
- }
84
-
85
- private void OnGUI()
86
- {
87
- _serializedObject.Update();
88
- bool operationInProgress = _isAnalyzing || _isCopying || _isDeleting;
89
-
90
- if (operationInProgress)
91
- {
92
- string status =
93
- _isAnalyzing ? "Analyzing..."
94
- : _isCopying ? "Copying..."
95
- : "Deleting...";
96
- EditorGUILayout.LabelField(status, EditorStyles.centeredGreyMiniLabel);
97
- }
98
-
99
- EditorGUI.BeginDisabledGroup(operationInProgress);
100
-
101
- PersistentDirectoryGUI.PathSelectorString(
102
- _animationSourcesPathProperty,
103
- nameof(AnimationCopierWindow),
104
- "Source Path",
105
- new GUIContent("Source Path")
106
- );
107
- EditorGUILayout.Separator();
108
- PersistentDirectoryGUI.PathSelectorString(
109
- _animationDestinationPathProperty,
110
- nameof(AnimationCopierWindow),
111
- "Destination Path",
112
- new GUIContent("Destination Path")
113
- );
114
- EditorGUILayout.Separator();
115
-
116
- DrawAnalysisSection();
117
- EditorGUILayout.Separator();
118
- DrawCopySection();
119
- EditorGUILayout.Separator();
120
- DrawCleanupSection();
121
-
122
- EditorGUI.EndDisabledGroup();
123
-
124
- if (!operationInProgress && _analysisNeeded && Event.current.type == EventType.Layout)
125
- {
126
- if (ArePathsValid())
127
- {
128
- AnalyzeAnimations();
129
- }
130
- else
131
- {
132
- ClearAnalysisResults();
133
- }
134
- _analysisNeeded = false;
135
- Repaint();
136
- }
137
- }
138
-
139
- private void DrawAnalysisSection()
140
- {
141
- EditorGUILayout.LabelField("Analysis:", EditorStyles.boldLabel);
142
-
143
- if (GUILayout.Button("Analyze Source & Destination"))
144
- {
145
- if (ArePathsValid())
146
- {
147
- AnalyzeAnimations();
148
- }
149
- else
150
- {
151
- EditorUtility.DisplayDialog(
152
- "Error",
153
- "Source or Destination path is not set or invalid.",
154
- "OK"
155
- );
156
- }
157
- }
158
-
159
- EditorGUILayout.Space();
160
-
161
- EditorGUILayout.LabelField(
162
- "Source Animations Found:",
163
- _sourceAnimations.Count.ToString()
164
- );
165
- EditorGUILayout.LabelField("- New:", _newAnimations.Count.ToString());
166
- EditorGUILayout.LabelField("- Changed:", _changedAnimations.Count.ToString());
167
- EditorGUILayout.LabelField(
168
- "- Unchanged (Duplicates):",
169
- _unchangedAnimations.Count.ToString()
170
- );
171
- }
172
-
173
- private void DrawCopySection()
174
- {
175
- EditorGUILayout.LabelField("Copy Actions:", EditorStyles.boldLabel);
176
-
177
- bool canAnalyze = ArePathsValid();
178
- bool analysisDone = !_analysisNeeded;
179
-
180
- bool canCopyNew = canAnalyze && analysisDone && _newAnimations.Any();
181
- bool canCopyChanged = canAnalyze && analysisDone && _changedAnimations.Any();
182
- bool canCopyAll = canAnalyze && analysisDone && _sourceAnimations.Any();
183
-
184
- EditorGUI.BeginDisabledGroup(!canCopyNew);
185
- if (GUILayout.Button($"Copy New ({_newAnimations.Count})"))
186
- {
187
- if (
188
- EditorUtility.DisplayDialog(
189
- "Confirm Copy New",
190
- $"Copy {_newAnimations.Count} new animations from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}'?",
191
- "Yes, Copy New",
192
- "Cancel"
193
- )
194
- )
195
- {
196
- CopyAnimationsInternal(CopyMode.New);
197
- }
198
- }
199
- EditorGUI.EndDisabledGroup();
200
-
201
- EditorGUI.BeginDisabledGroup(!canCopyChanged);
202
- if (GUILayout.Button($"Copy Changed ({_changedAnimations.Count})"))
203
- {
204
- if (
205
- EditorUtility.DisplayDialog(
206
- "Confirm Copy Changed",
207
- $"Copy {_changedAnimations.Count} changed animations from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}', overwriting existing files?",
208
- "Yes, Copy Changed",
209
- "Cancel"
210
- )
211
- )
212
- {
213
- CopyAnimationsInternal(CopyMode.Changed);
214
- }
215
- }
216
- EditorGUI.EndDisabledGroup();
217
-
218
- int totalToCopyAll =
219
- _newAnimations.Count + _changedAnimations.Count + _unchangedAnimations.Count;
220
- EditorGUI.BeginDisabledGroup(!canCopyAll);
221
- if (GUILayout.Button($"Copy All ({totalToCopyAll})"))
222
- {
223
- string overwriteWarning =
224
- _changedAnimations.Count + _unchangedAnimations.Count > 0
225
- ? $" This will overwrite {_changedAnimations.Count + _unchangedAnimations.Count} existing files."
226
- : "";
227
- if (
228
- EditorUtility.DisplayDialog(
229
- "Confirm Copy All",
230
- $"Copy {totalToCopyAll} animations from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}'?{overwriteWarning}",
231
- "Yes, Copy All",
232
- "Cancel"
233
- )
234
- )
235
- {
236
- CopyAnimationsInternal(CopyMode.All);
237
- }
238
- }
239
- EditorGUI.EndDisabledGroup();
240
- }
241
-
242
- private void DrawCleanupSection()
243
- {
244
- EditorGUILayout.LabelField("Cleanup Actions:", EditorStyles.boldLabel);
245
-
246
- bool canAnalyze = ArePathsValid();
247
- bool analysisDone = !_analysisNeeded;
248
- bool hasUnchanged = _unchangedAnimations.Any();
249
-
250
- if (canAnalyze && analysisDone && hasUnchanged)
251
- {
252
- Color originalColor = GUI.color;
253
- GUI.color = Color.red;
254
-
255
- string buttonText =
256
- $"Delete {_unchangedAnimations.Count} Unchanged Source Duplicates";
257
-
258
- if (GUILayout.Button(buttonText))
259
- {
260
- DeleteUnchangedSourceAnimations();
261
- }
262
-
263
- GUI.color = originalColor;
264
- }
265
- else
266
- {
267
- EditorGUI.BeginDisabledGroup(true);
268
- GUILayout.Button("Delete Unchanged Source Duplicates (None found)");
269
- EditorGUI.EndDisabledGroup();
270
- }
271
- }
272
-
273
- private void ValidatePaths()
274
- {
275
- _fullSourcePath = GetFullPathFromRelative(_animationSourcePathRelative);
276
- _fullDestinationPath = GetFullPathFromRelative(_animationDestinationPathRelative);
277
-
278
- if (_fullSourcePath == null || !Directory.Exists(_fullSourcePath))
279
- {
280
- this.LogWarn(
281
- $"Source path '{_animationSourcePathRelative}' is invalid or outside the project. Please set a valid path within Assets."
282
- );
283
- _fullSourcePath = null;
284
- _analysisNeeded = true;
285
- ClearAnalysisResults();
286
- }
287
- if (_fullDestinationPath == null)
288
- {
289
- this.LogWarn(
290
- $"Destination path '{_animationDestinationPathRelative}' is invalid or outside the project. Please set a valid path within Assets."
291
- );
292
- _analysisNeeded = true;
293
- ClearAnalysisResults();
294
- }
295
- else
296
- {
297
- string parentDir = Path.GetDirectoryName(_fullDestinationPath);
298
- if (!Directory.Exists(parentDir))
299
- {
300
- this.LogWarn(
301
- $"The parent directory for the destination path '{_animationDestinationPathRelative}' does not exist ('{parentDir}'). Copy operations may fail to create folders."
302
- );
303
- }
304
- }
305
- }
306
-
307
- private bool ArePathsValid()
308
- {
309
- return !string.IsNullOrWhiteSpace(_animationSourcePathRelative)
310
- && !string.IsNullOrWhiteSpace(_animationDestinationPathRelative)
311
- && _fullSourcePath != null
312
- && _fullDestinationPath != null
313
- && !string.Equals(
314
- _animationSourcePathRelative,
315
- _animationDestinationPathRelative,
316
- StringComparison.Ordinal
317
- );
318
- }
319
-
320
- private void AnalyzeAnimations()
321
- {
322
- if (!ArePathsValid())
323
- {
324
- this.LogError($"Cannot analyze: Paths are invalid.");
325
- ClearAnalysisResults();
326
- _analysisNeeded = false;
327
- Repaint();
328
- return;
329
- }
330
-
331
- if (_isAnalyzing || _isCopying || _isDeleting)
332
- {
333
- return;
334
- }
335
-
336
- this.Log($"Starting animation analysis...");
337
- _isAnalyzing = true;
338
- ClearAnalysisResults();
339
- Repaint();
340
-
341
- try
342
- {
343
- string[] sourceGuids = AssetDatabase.FindAssets(
344
- "t:AnimationClip",
345
- new[] { _animationSourcePathRelative }
346
- );
347
- _sourceAnimations.Clear();
348
-
349
- float total = sourceGuids.Length * 2;
350
- int current = 0;
351
-
352
- EditorUtility.DisplayProgressBar(
353
- "Analyzing Animations",
354
- "Gathering source files...",
355
- 0f
356
- );
357
-
358
- foreach (string guid in sourceGuids)
359
- {
360
- current++;
361
- string sourceRelPath = AssetDatabase.GUIDToAssetPath(guid);
362
- if (
363
- string.IsNullOrWhiteSpace(sourceRelPath)
364
- || !sourceRelPath.StartsWith(
365
- _animationSourcePathRelative,
366
- StringComparison.OrdinalIgnoreCase
367
- )
368
- )
369
- {
370
- continue;
371
- }
372
-
373
- string sourceFullPath = GetFullPathFromRelative(sourceRelPath);
374
- if (sourceFullPath == null || !File.Exists(sourceFullPath))
375
- {
376
- continue;
377
- }
378
-
379
- string directoryName = Path.GetDirectoryName(sourceRelPath);
380
- if (string.IsNullOrWhiteSpace(directoryName))
381
- {
382
- continue;
383
- }
384
- AnimationFileInfo fileInfo = new()
385
- {
386
- RelativePath = sourceRelPath,
387
- FullPath = sourceFullPath,
388
- FileName = Path.GetFileName(sourceRelPath),
389
- RelativeDirectory = GetRelativeSubPath(
390
- _animationSourcePathRelative,
391
- directoryName.SanitizePath()
392
- ),
393
- Hash = CalculateFileHash(sourceFullPath),
394
- };
395
- fileInfo.DestinationRelativePath = Path.Combine(
396
- _animationDestinationPathRelative,
397
- fileInfo.RelativeDirectory,
398
- fileInfo.FileName
399
- )
400
- .SanitizePath();
401
- _sourceAnimations.Add(fileInfo);
402
-
403
- EditorUtility.DisplayProgressBar(
404
- "Analyzing Animations",
405
- $"Hashing: {fileInfo.FileName}",
406
- current / total
407
- );
408
- }
409
-
410
- this.Log(
411
- $"Found {_sourceAnimations.Count} animations in source. Comparing with destination..."
412
- );
413
-
414
- for (int i = 0; i < _sourceAnimations.Count; i++)
415
- {
416
- AnimationFileInfo sourceInfo = _sourceAnimations[i];
417
- current++;
418
- EditorUtility.DisplayProgressBar(
419
- "Analyzing Animations",
420
- $"Comparing: {sourceInfo.FileName}",
421
- current / total
422
- );
423
-
424
- string destRelPath = sourceInfo.DestinationRelativePath;
425
- string destFullPath = GetFullPathFromRelative(destRelPath);
426
- bool destExists = destFullPath != null && File.Exists(destFullPath);
427
-
428
- if (!destExists)
429
- {
430
- sourceInfo.Status = AnimationStatus.New;
431
- _newAnimations.Add(sourceInfo);
432
- }
433
- else
434
- {
435
- string destHash = CalculateFileHash(destFullPath);
436
- if (
437
- string.IsNullOrWhiteSpace(sourceInfo.Hash)
438
- || string.IsNullOrWhiteSpace(destHash)
439
- )
440
- {
441
- this.LogWarn(
442
- $"Could not compare '{sourceInfo.FileName}' due to hashing error. Treating as 'Changed'."
443
- );
444
- sourceInfo.Status = AnimationStatus.Changed;
445
- _changedAnimations.Add(sourceInfo);
446
- }
447
- else if (
448
- sourceInfo.Hash.Equals(destHash, StringComparison.OrdinalIgnoreCase)
449
- )
450
- {
451
- sourceInfo.Status = AnimationStatus.Unchanged;
452
- _unchangedAnimations.Add(sourceInfo);
453
- }
454
- else
455
- {
456
- sourceInfo.Status = AnimationStatus.Changed;
457
- _changedAnimations.Add(sourceInfo);
458
- }
459
- }
460
- }
461
-
462
- this.Log(
463
- $"Analysis complete: {_newAnimations.Count} New, {_changedAnimations.Count} Changed, {_unchangedAnimations.Count} Unchanged."
464
- );
465
- }
466
- catch (Exception ex)
467
- {
468
- this.LogError($"Error during analysis: {ex.Message}\n{ex.StackTrace}");
469
- EditorUtility.DisplayDialog(
470
- "Analysis Error",
471
- $"An error occurred during analysis: {ex.Message}",
472
- "OK"
473
- );
474
- ClearAnalysisResults();
475
- }
476
- finally
477
- {
478
- _isAnalyzing = false;
479
- _analysisNeeded = false;
480
- EditorUtility.ClearProgressBar();
481
- Repaint();
482
- }
483
- }
484
-
485
- private void CopyAnimationsInternal(CopyMode mode)
486
- {
487
- if (!ArePathsValid() || _isAnalyzing || _isCopying || _isDeleting)
488
- {
489
- return;
490
- }
491
-
492
- List<AnimationFileInfo> animationsToCopy = new();
493
- switch (mode)
494
- {
495
- case CopyMode.All:
496
- animationsToCopy.AddRange(_newAnimations);
497
- animationsToCopy.AddRange(_changedAnimations);
498
- animationsToCopy.AddRange(_unchangedAnimations);
499
- break;
500
- case CopyMode.Changed:
501
- animationsToCopy.AddRange(_changedAnimations);
502
- break;
503
- case CopyMode.New:
504
- animationsToCopy.AddRange(_newAnimations);
505
- break;
506
- }
507
-
508
- if (animationsToCopy.Count == 0)
509
- {
510
- this.Log($"No animations to copy for the selected mode.");
511
- EditorUtility.DisplayDialog(
512
- "Nothing to Copy",
513
- "There are no animations matching the selected criteria.",
514
- "OK"
515
- );
516
- return;
517
- }
518
-
519
- this.Log(
520
- $"Starting copy operation (Mode: {mode}) for {animationsToCopy.Count} animations..."
521
- );
522
- _isCopying = true;
523
- Repaint();
524
-
525
- int successCount = 0;
526
- int errorCount = 0;
527
- foreach (AnimationFileInfo animInfo in animationsToCopy)
528
- {
529
- string destinationAssetPath = animInfo.DestinationRelativePath;
530
- string destDirectory = Path.GetDirectoryName(destinationAssetPath).SanitizePath();
531
-
532
- if (
533
- string.IsNullOrWhiteSpace(destDirectory)
534
- || AssetDatabase.IsValidFolder(destDirectory)
535
- )
536
- {
537
- continue;
538
- }
539
-
540
- try
541
- {
542
- DirectoryHelper.EnsureDirectoryExists(destDirectory);
543
- }
544
- catch (Exception ex)
545
- {
546
- this.LogError(
547
- $"Failed to create destination directory '{destDirectory}' for animation '{animInfo.FileName}'. Error: {ex.Message}. Skipping."
548
- );
549
- }
550
- }
551
-
552
- AssetDatabase.StartAssetEditing();
553
- try
554
- {
555
- for (int i = 0; i < animationsToCopy.Count; i++)
556
- {
557
- AnimationFileInfo animInfo = animationsToCopy[i];
558
- float progress = (float)(i + 1) / animationsToCopy.Count;
559
- bool userCancelled = EditorUtility.DisplayCancelableProgressBar(
560
- $"Copying Animations ({mode})",
561
- $"Copying: {animInfo.FileName} ({i + 1}/{animationsToCopy.Count})",
562
- progress
563
- );
564
-
565
- if (userCancelled)
566
- {
567
- this.LogWarn($"Copy operation cancelled by user.");
568
- break;
569
- }
570
-
571
- string sourceAssetPath = animInfo.RelativePath;
572
- string destinationAssetPath = animInfo.DestinationRelativePath;
573
- bool copySuccessful = AssetDatabase.CopyAsset(
574
- sourceAssetPath,
575
- destinationAssetPath
576
- );
577
-
578
- if (copySuccessful)
579
- {
580
- successCount++;
581
- }
582
- else
583
- {
584
- this.LogError(
585
- $"Failed to copy animation from '{sourceAssetPath}' to '{destinationAssetPath}'."
586
- );
587
- errorCount++;
588
- }
589
- }
590
- }
591
- catch (Exception ex)
592
- {
593
- this.LogError(
594
- $"An unexpected error occurred during the copy process: {ex.Message}\n{ex.StackTrace}"
595
- );
596
- errorCount = animationsToCopy.Count - successCount;
597
- }
598
- finally
599
- {
600
- AssetDatabase.StopAssetEditing();
601
- AssetDatabase.SaveAssets();
602
- AssetDatabase.Refresh();
603
- EditorUtility.ClearProgressBar();
604
- _isCopying = false;
605
- this.Log(
606
- $"Copy operation finished. Mode: {mode}. Success: {successCount}, Errors: {errorCount}."
607
- );
608
-
609
- EditorUtility.DisplayDialog(
610
- "Copy Complete",
611
- $"Copy operation finished.\nMode: {mode}\nSuccessfully copied: {successCount}\nErrors: {errorCount}\n\nSee console log for details.",
612
- "OK"
613
- );
614
-
615
- _analysisNeeded = true;
616
- Repaint();
617
- }
618
- }
619
-
620
- private void DeleteUnchangedSourceAnimations()
621
- {
622
- if (!ArePathsValid() || _isAnalyzing || _isCopying || _isDeleting)
623
- {
624
- return;
625
- }
626
-
627
- List<AnimationFileInfo> animationsToDelete = _unchangedAnimations.ToList();
628
-
629
- if (animationsToDelete.Count == 0)
630
- {
631
- this.Log($"No unchanged source animations to delete.");
632
-
633
- return;
634
- }
635
-
636
- this.Log(
637
- $"Starting delete operation for {animationsToDelete.Count} unchanged source animations..."
638
- );
639
- _isDeleting = true;
640
- Repaint();
641
-
642
- int successCount = 0;
643
- int errorCount = 0;
644
- AssetDatabase.StartAssetEditing();
645
-
646
- try
647
- {
648
- for (int i = 0; i < animationsToDelete.Count; i++)
649
- {
650
- AnimationFileInfo animInfo = animationsToDelete[i];
651
- float progress = (float)(i + 1) / animationsToDelete.Count;
652
- bool userCancelled = EditorUtility.DisplayCancelableProgressBar(
653
- "Deleting Source Duplicates",
654
- $"Deleting: {animInfo.FileName} ({i + 1}/{animationsToDelete.Count})",
655
- progress
656
- );
657
-
658
- if (userCancelled)
659
- {
660
- this.LogWarn($"Delete operation cancelled by user.");
661
- break;
662
- }
663
-
664
- string sourceAssetPath = animInfo.RelativePath;
665
-
666
- bool deleteSuccessful = AssetDatabase.DeleteAsset(sourceAssetPath);
667
-
668
- if (deleteSuccessful)
669
- {
670
- successCount++;
671
- }
672
- else
673
- {
674
- this.LogError(
675
- $"Failed to delete source duplicate: '{sourceAssetPath}'. It might have been moved or deleted already."
676
- );
677
- errorCount++;
678
- }
679
- }
680
- }
681
- catch (Exception ex)
682
- {
683
- this.LogError(
684
- $"An unexpected error occurred during the delete process: {ex.Message}\n{ex.StackTrace}"
685
- );
686
- errorCount = animationsToDelete.Count - successCount;
687
- }
688
- finally
689
- {
690
- AssetDatabase.StopAssetEditing();
691
-
692
- AssetDatabase.Refresh();
693
- EditorUtility.ClearProgressBar();
694
- _isDeleting = false;
695
- this.Log(
696
- $"Delete operation finished. Successfully deleted: {successCount}, Errors: {errorCount}."
697
- );
698
-
699
- _analysisNeeded = true;
700
- Repaint();
701
- }
702
- }
703
-
704
- private void ClearAnalysisResults()
705
- {
706
- _sourceAnimations.Clear();
707
- _newAnimations.Clear();
708
- _changedAnimations.Clear();
709
- _unchangedAnimations.Clear();
710
-
711
- Repaint();
712
- }
713
-
714
- private static string GetFullPathFromRelative(string relativePath)
715
- {
716
- if (string.IsNullOrWhiteSpace(relativePath))
717
- {
718
- return null;
719
- }
720
-
721
- if (relativePath.Equals("Assets", StringComparison.OrdinalIgnoreCase))
722
- {
723
- return Application.dataPath.SanitizePath();
724
- }
725
-
726
- if (relativePath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase))
727
- {
728
- string projectRoot = Application.dataPath.Substring(
729
- 0,
730
- Application.dataPath.Length - "Assets".Length
731
- );
732
- return (projectRoot + relativePath).SanitizePath();
733
- }
734
- return null;
735
- }
736
-
737
- private string GetRelativeSubPath(string basePath, string fullPath)
738
- {
739
- string normalizedBasePath = basePath.TrimEnd('/') + "/";
740
- string normalizedFullPath = fullPath.TrimEnd('/') + "/";
741
-
742
- if (
743
- normalizedFullPath.StartsWith(
744
- normalizedBasePath,
745
- StringComparison.OrdinalIgnoreCase
746
- )
747
- )
748
- {
749
- string subPath = normalizedFullPath
750
- .Substring(normalizedBasePath.Length)
751
- .TrimEnd('/');
752
- return subPath;
753
- }
754
-
755
- this.LogWarn(
756
- $"Path '{fullPath}' did not start with expected base '{basePath}'. Could not determine relative sub-path."
757
- );
758
- return string.Empty;
759
- }
760
-
761
- private string CalculateFileHash(string filePath)
762
- {
763
- try
764
- {
765
- using SHA256 hashProvider = SHA256.Create();
766
- using FileStream stream = File.OpenRead(filePath);
767
- byte[] hash = hashProvider.ComputeHash(stream);
768
- return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
769
- }
770
- catch (IOException ioEx)
771
- {
772
- this.LogError(
773
- $"[AnimationCopierWindow] IO Error calculating hash for {filePath}.",
774
- ioEx
775
- );
776
- return string.Empty;
777
- }
778
- catch (Exception ex)
779
- {
780
- this.LogError(
781
- $"[AnimationCopierWindow] Error calculating hash for {filePath}.",
782
- ex
783
- );
784
- return string.Empty;
785
- }
786
- }
787
- }
788
- #endif
789
- }
1
+ namespace WallstopStudios.UnityHelpers.Editor.Sprites
2
+ {
3
+ #if UNITY_EDITOR
4
+ using System;
5
+ using System.Collections.Generic;
6
+ using System.IO;
7
+ using System.Linq;
8
+ using System.Text;
9
+ using System.Text.RegularExpressions;
10
+ using UnityEditor;
11
+ using UnityEngine;
12
+ using CustomEditors;
13
+ using WallstopStudios.UnityHelpers.Core.Extension;
14
+ using WallstopStudios.UnityHelpers.Core.Helper;
15
+ using WallstopStudios.UnityHelpers.Utils;
16
+
17
+ public sealed class AnimationCopierWindow : EditorWindow
18
+ {
19
+ // Test-friendly: allow suppressing modal prompts and progress UI
20
+ internal static bool SuppressUserPrompts { get; set; }
21
+
22
+ static AnimationCopierWindow()
23
+ {
24
+ try
25
+ {
26
+ if (Application.isBatchMode || IsInvokedByTestRunner())
27
+ {
28
+ SuppressUserPrompts = true;
29
+ }
30
+ }
31
+ catch { }
32
+ }
33
+
34
+ private static bool IsInvokedByTestRunner()
35
+ {
36
+ string[] args = Environment.GetCommandLineArgs();
37
+ for (int i = 0; i < args.Length; ++i)
38
+ {
39
+ string a = args[i];
40
+ if (
41
+ a.IndexOf("runTests", StringComparison.OrdinalIgnoreCase) >= 0
42
+ || a.IndexOf("testResults", StringComparison.OrdinalIgnoreCase) >= 0
43
+ || a.IndexOf("testPlatform", StringComparison.OrdinalIgnoreCase) >= 0
44
+ )
45
+ {
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+
52
+ internal string AnimationSourcePathRelative
53
+ {
54
+ get => _animationSourcePathRelative;
55
+ set
56
+ {
57
+ _animationSourcePathRelative = value;
58
+ // Quiet validation when changed programmatically (e.g., tests)
59
+ ValidatePaths(false);
60
+ _analysisNeeded = true;
61
+ }
62
+ }
63
+
64
+ internal string AnimationDestinationPathRelative
65
+ {
66
+ get => _animationDestinationPathRelative;
67
+ set
68
+ {
69
+ _animationDestinationPathRelative = value;
70
+ // Quiet validation when changed programmatically (e.g., tests)
71
+ ValidatePaths(false);
72
+ _analysisNeeded = true;
73
+ }
74
+ }
75
+
76
+ internal bool DryRun
77
+ {
78
+ get => _dryRun;
79
+ set => _dryRun = value;
80
+ }
81
+
82
+ internal int NewCount => _newAnimations.Count;
83
+ internal int ChangedCount => _changedAnimations.Count;
84
+ internal int UnchangedCount => _unchangedAnimations.Count;
85
+ internal int OrphansCount => _destinationOrphans.Count;
86
+
87
+ [SerializeField]
88
+ private string _animationSourcePathRelative = "Assets/Sprites";
89
+
90
+ [SerializeField]
91
+ private string _animationDestinationPathRelative = "Assets/Animations";
92
+ private string _fullSourcePath = "";
93
+ private string _fullDestinationPath = "";
94
+
95
+ private bool _analysisNeeded = true;
96
+ private bool _isAnalyzing;
97
+ private bool _isCopying;
98
+ private bool _isDeleting;
99
+
100
+ private SerializedObject _serializedObject;
101
+ private SerializedProperty _animationSourcesPathProperty;
102
+ private SerializedProperty _animationDestinationPathProperty;
103
+
104
+ private readonly List<AnimationFileInfo> _sourceAnimations = new();
105
+ private readonly List<AnimationFileInfo> _newAnimations = new();
106
+ private readonly List<AnimationFileInfo> _changedAnimations = new();
107
+ private readonly List<AnimationFileInfo> _unchangedAnimations = new();
108
+ private readonly List<AnimationFileInfo> _destinationOrphans = new();
109
+
110
+ // Preview and options
111
+ [SerializeField]
112
+ private bool _dryRun;
113
+
114
+ [SerializeField]
115
+ private bool _includeUnchangedInCopyAll;
116
+ private bool _previewFoldout;
117
+ private bool _newFoldout = true;
118
+ private bool _changedFoldout = true;
119
+ private bool _unchangedFoldout;
120
+ private bool _orphansFoldout;
121
+ private Vector2 _previewScroll;
122
+ private string _filterText = string.Empty;
123
+ private bool _filterUseRegex;
124
+ private bool _sortAscending = true;
125
+
126
+ private enum AnimationStatus
127
+ {
128
+ Unknown,
129
+ New,
130
+ Changed,
131
+ Unchanged,
132
+ }
133
+
134
+ internal enum CopyMode
135
+ {
136
+ All,
137
+ Changed,
138
+ New,
139
+ }
140
+
141
+ private sealed class AnimationFileInfo
142
+ {
143
+ public string RelativePath { get; set; }
144
+ public string FullPath { get; set; }
145
+ public string FileName { get; set; }
146
+ public string RelativeDirectory { get; set; }
147
+ public string Hash { get; set; }
148
+ public AnimationStatus Status { get; set; } = AnimationStatus.Unknown;
149
+ public string DestinationRelativePath { get; set; }
150
+ public bool Selected { get; set; } = true;
151
+ }
152
+
153
+ [MenuItem("Tools/Wallstop Studios/Unity Helpers/Animation Copier", priority = -2)]
154
+ public static void ShowWindow()
155
+ {
156
+ GetWindow<AnimationCopierWindow>("Animation Copier");
157
+ }
158
+
159
+ private void OnEnable()
160
+ {
161
+ _serializedObject = new SerializedObject(this);
162
+ _animationSourcesPathProperty = _serializedObject.FindProperty(
163
+ nameof(_animationSourcePathRelative)
164
+ );
165
+ _animationDestinationPathProperty = _serializedObject.FindProperty(
166
+ nameof(_animationDestinationPathRelative)
167
+ );
168
+ // Avoid noisy logs during editor reloads or tests
169
+ ValidatePaths(false);
170
+ _analysisNeeded = true;
171
+ }
172
+
173
+ private void OnGUI()
174
+ {
175
+ _serializedObject.Update();
176
+ bool operationInProgress = _isAnalyzing || _isCopying || _isDeleting;
177
+
178
+ if (operationInProgress)
179
+ {
180
+ string status =
181
+ _isAnalyzing ? "Analyzing..."
182
+ : _isCopying ? "Copying..."
183
+ : "Deleting...";
184
+ EditorGUILayout.LabelField(status, EditorStyles.centeredGreyMiniLabel);
185
+ }
186
+
187
+ EditorGUI.BeginDisabledGroup(operationInProgress);
188
+
189
+ // Detect path changes to revalidate and trigger re-analysis
190
+ EditorGUI.BeginChangeCheck();
191
+ PersistentDirectoryGUI.PathSelectorString(
192
+ _animationSourcesPathProperty,
193
+ nameof(AnimationCopierWindow),
194
+ "Source Path",
195
+ new GUIContent("Source Path")
196
+ );
197
+ EditorGUILayout.Separator();
198
+ PersistentDirectoryGUI.PathSelectorString(
199
+ _animationDestinationPathProperty,
200
+ nameof(AnimationCopierWindow),
201
+ "Destination Path",
202
+ new GUIContent("Destination Path")
203
+ );
204
+ if (EditorGUI.EndChangeCheck())
205
+ {
206
+ // User-initiated change: allow warnings to surface
207
+ ValidatePaths(true);
208
+ _analysisNeeded = true;
209
+ ClearAnalysisResults();
210
+ }
211
+ using (new EditorGUILayout.HorizontalScope())
212
+ {
213
+ if (GUILayout.Button("Open Source Folder", GUILayout.Width(160)))
214
+ {
215
+ RevealFolder(_animationSourcePathRelative);
216
+ }
217
+ if (GUILayout.Button("Open Destination Folder", GUILayout.Width(180)))
218
+ {
219
+ RevealFolder(_animationDestinationPathRelative);
220
+ }
221
+ }
222
+ EditorGUILayout.Separator();
223
+
224
+ DrawAnalysisSection();
225
+ EditorGUILayout.Separator();
226
+ DrawPreviewSection();
227
+ EditorGUILayout.Separator();
228
+ DrawCopySection();
229
+ EditorGUILayout.Separator();
230
+ DrawCleanupSection();
231
+
232
+ EditorGUI.EndDisabledGroup();
233
+
234
+ // Always keep paths validated and analyze when needed (quietly)
235
+ ValidatePaths(false);
236
+ if (!operationInProgress && _analysisNeeded && Event.current.type == EventType.Layout)
237
+ {
238
+ if (ArePathsValid())
239
+ {
240
+ AnalyzeAnimations();
241
+ }
242
+ else
243
+ {
244
+ ClearAnalysisResults();
245
+ }
246
+ _analysisNeeded = false;
247
+ Repaint();
248
+ }
249
+ }
250
+
251
+ private void DrawAnalysisSection()
252
+ {
253
+ EditorGUILayout.LabelField("Analysis:", EditorStyles.boldLabel);
254
+
255
+ if (GUILayout.Button("Analyze Source & Destination"))
256
+ {
257
+ if (ArePathsValid())
258
+ {
259
+ AnalyzeAnimations();
260
+ }
261
+ else
262
+ {
263
+ Info("Error", "Source or Destination path is not set or invalid.");
264
+ }
265
+ }
266
+
267
+ EditorGUILayout.Space();
268
+
269
+ EditorGUILayout.LabelField(
270
+ "Source Animations Found:",
271
+ _sourceAnimations.Count.ToString()
272
+ );
273
+ EditorGUILayout.LabelField("- New:", _newAnimations.Count.ToString());
274
+ EditorGUILayout.LabelField("- Changed:", _changedAnimations.Count.ToString());
275
+ EditorGUILayout.LabelField(
276
+ "- Unchanged (Duplicates):",
277
+ _unchangedAnimations.Count.ToString()
278
+ );
279
+ }
280
+
281
+ private void DrawCopySection()
282
+ {
283
+ EditorGUILayout.LabelField("Copy Actions:", EditorStyles.boldLabel);
284
+
285
+ _dryRun = EditorGUILayout.ToggleLeft("Dry Run (no changes)", _dryRun);
286
+ _includeUnchangedInCopyAll = EditorGUILayout.ToggleLeft(
287
+ "Include Unchanged in Copy All (force replace)",
288
+ _includeUnchangedInCopyAll
289
+ );
290
+
291
+ bool canAnalyze = ArePathsValid();
292
+ bool analysisDone = !_analysisNeeded;
293
+
294
+ int selectedNew = _newAnimations.Count(a => a.Selected);
295
+ int selectedChanged = _changedAnimations.Count(a => a.Selected);
296
+ int selectedAll =
297
+ selectedNew
298
+ + selectedChanged
299
+ + (_includeUnchangedInCopyAll ? _unchangedAnimations.Count(a => a.Selected) : 0);
300
+
301
+ bool canCopyNew = canAnalyze && analysisDone && selectedNew > 0;
302
+ bool canCopyChanged = canAnalyze && analysisDone && selectedChanged > 0;
303
+ bool canCopyAll = canAnalyze && analysisDone && selectedAll > 0;
304
+
305
+ EditorGUI.BeginDisabledGroup(!canCopyNew);
306
+ if (GUILayout.Button($"Copy New ({selectedNew})"))
307
+ {
308
+ if (
309
+ Confirm(
310
+ "Confirm Copy New",
311
+ $"Copy {selectedNew} new animation(s) from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}'{(_dryRun ? " (dry run)" : string.Empty)}?",
312
+ "Yes, Copy New",
313
+ "Cancel"
314
+ )
315
+ )
316
+ {
317
+ CopyAnimationsInternal(CopyMode.New);
318
+ }
319
+ }
320
+ EditorGUI.EndDisabledGroup();
321
+
322
+ EditorGUI.BeginDisabledGroup(!canCopyChanged);
323
+ if (GUILayout.Button($"Copy Changed ({selectedChanged})"))
324
+ {
325
+ if (
326
+ Confirm(
327
+ "Confirm Copy Changed",
328
+ $"Copy {selectedChanged} changed animation(s) from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}', overwriting existing files{(_dryRun ? " (dry run)" : string.Empty)}?",
329
+ "Yes, Copy Changed",
330
+ "Cancel"
331
+ )
332
+ )
333
+ {
334
+ CopyAnimationsInternal(CopyMode.Changed);
335
+ }
336
+ }
337
+ EditorGUI.EndDisabledGroup();
338
+
339
+ // Copy All will optionally include unchanged if requested
340
+ int totalToCopyAll = selectedAll;
341
+ EditorGUI.BeginDisabledGroup(!canCopyAll);
342
+ if (GUILayout.Button($"Copy All ({totalToCopyAll})"))
343
+ {
344
+ string overwriteWarning =
345
+ selectedChanged
346
+ + (
347
+ _includeUnchangedInCopyAll
348
+ ? _unchangedAnimations.Count(a => a.Selected)
349
+ : 0
350
+ )
351
+ > 0
352
+ ? $" This will overwrite {selectedChanged + (_includeUnchangedInCopyAll ? _unchangedAnimations.Count(a => a.Selected) : 0)} existing files."
353
+ : "";
354
+ if (
355
+ Confirm(
356
+ "Confirm Copy All",
357
+ $"Copy {totalToCopyAll} animation(s) from '{_animationSourcePathRelative}' to '{_animationDestinationPathRelative}'?{overwriteWarning}{(_dryRun ? " (dry run)" : string.Empty)}",
358
+ "Yes, Copy All",
359
+ "Cancel"
360
+ )
361
+ )
362
+ {
363
+ CopyAnimationsInternal(CopyMode.All);
364
+ }
365
+ }
366
+ EditorGUI.EndDisabledGroup();
367
+ }
368
+
369
+ private void DrawCleanupSection()
370
+ {
371
+ EditorGUILayout.LabelField("Cleanup Actions:", EditorStyles.boldLabel);
372
+
373
+ bool canAnalyze = ArePathsValid();
374
+ bool analysisDone = !_analysisNeeded;
375
+ bool hasUnchanged = _unchangedAnimations.Any();
376
+ bool hasOrphans = _destinationOrphans.Any();
377
+
378
+ _dryRun = EditorGUILayout.ToggleLeft("Dry Run (no changes)", _dryRun);
379
+
380
+ if (canAnalyze && analysisDone && hasUnchanged)
381
+ {
382
+ Color originalColor = GUI.color;
383
+ GUI.color = Color.red;
384
+
385
+ string buttonText =
386
+ $"Delete {_unchangedAnimations.Count} Unchanged Source Duplicates";
387
+
388
+ if (GUILayout.Button(buttonText))
389
+ {
390
+ DeleteUnchangedSourceAnimations();
391
+ }
392
+
393
+ GUI.color = originalColor;
394
+ }
395
+ else
396
+ {
397
+ EditorGUI.BeginDisabledGroup(true);
398
+ GUILayout.Button("Delete Unchanged Source Duplicates (None found)");
399
+ EditorGUI.EndDisabledGroup();
400
+ }
401
+
402
+ EditorGUILayout.Space();
403
+ // Mirror delete destination-only clips
404
+ if (canAnalyze && analysisDone && hasOrphans)
405
+ {
406
+ Color originalColor = GUI.color;
407
+ GUI.color = new Color(1f, 0.5f, 0f); // orange
408
+
409
+ string buttonText =
410
+ $"Mirror Delete Destination Orphans ({_destinationOrphans.Count})";
411
+ if (GUILayout.Button(buttonText))
412
+ {
413
+ MirrorDeleteDestinationAnimations();
414
+ }
415
+
416
+ GUI.color = originalColor;
417
+ }
418
+ else
419
+ {
420
+ EditorGUI.BeginDisabledGroup(true);
421
+ GUILayout.Button("Mirror Delete Destination Orphans (None found)");
422
+ EditorGUI.EndDisabledGroup();
423
+ }
424
+ }
425
+
426
+ private void ValidatePaths(bool logWarnings = false)
427
+ {
428
+ _fullSourcePath = GetFullPathFromRelative(_animationSourcePathRelative);
429
+ _fullDestinationPath = GetFullPathFromRelative(_animationDestinationPathRelative);
430
+
431
+ if (_fullSourcePath == null || !Directory.Exists(_fullSourcePath))
432
+ {
433
+ if (logWarnings && !SuppressUserPrompts)
434
+ {
435
+ this.LogWarn(
436
+ $"Source path '{_animationSourcePathRelative}' is invalid or outside the project. Please set a valid path within Assets."
437
+ );
438
+ }
439
+ _fullSourcePath = null;
440
+ _analysisNeeded = true;
441
+ ClearAnalysisResults();
442
+ }
443
+ if (_fullDestinationPath == null)
444
+ {
445
+ if (logWarnings && !SuppressUserPrompts)
446
+ {
447
+ this.LogWarn(
448
+ $"Destination path '{_animationDestinationPathRelative}' is invalid or outside the project. Please set a valid path within Assets."
449
+ );
450
+ }
451
+ _analysisNeeded = true;
452
+ ClearAnalysisResults();
453
+ }
454
+ else
455
+ {
456
+ string parentDir = Path.GetDirectoryName(_fullDestinationPath);
457
+ if (!Directory.Exists(parentDir))
458
+ {
459
+ if (logWarnings && !SuppressUserPrompts)
460
+ {
461
+ this.LogWarn(
462
+ $"The parent directory for the destination path '{_animationDestinationPathRelative}' does not exist ('{parentDir}'). Copy operations may fail to create folders."
463
+ );
464
+ }
465
+ }
466
+ }
467
+ }
468
+
469
+ private bool ArePathsValid()
470
+ {
471
+ return !string.IsNullOrWhiteSpace(_animationSourcePathRelative)
472
+ && !string.IsNullOrWhiteSpace(_animationDestinationPathRelative)
473
+ && _fullSourcePath != null
474
+ && _fullDestinationPath != null
475
+ && !string.Equals(
476
+ _animationSourcePathRelative,
477
+ _animationDestinationPathRelative,
478
+ StringComparison.Ordinal
479
+ );
480
+ }
481
+
482
+ internal void AnalyzeAnimations()
483
+ {
484
+ if (!ArePathsValid())
485
+ {
486
+ this.LogError($"Cannot analyze: Paths are invalid.");
487
+ ClearAnalysisResults();
488
+ _analysisNeeded = false;
489
+ Repaint();
490
+ return;
491
+ }
492
+
493
+ if (_isAnalyzing || _isCopying || _isDeleting)
494
+ {
495
+ return;
496
+ }
497
+
498
+ this.Log($"Starting animation analysis...");
499
+ _isAnalyzing = true;
500
+ ClearAnalysisResults();
501
+ Repaint();
502
+
503
+ try
504
+ {
505
+ string[] sourceGuids = AssetDatabase.FindAssets(
506
+ "t:AnimationClip",
507
+ new[] { _animationSourcePathRelative }
508
+ );
509
+ _sourceAnimations.Clear();
510
+ // Pre-size to reduce reallocations
511
+ if (sourceGuids != null)
512
+ {
513
+ _sourceAnimations.Capacity = Math.Max(
514
+ _sourceAnimations.Capacity,
515
+ sourceGuids.Length
516
+ );
517
+ _newAnimations.Capacity = Math.Max(_newAnimations.Capacity, sourceGuids.Length);
518
+ _changedAnimations.Capacity = Math.Max(
519
+ _changedAnimations.Capacity,
520
+ sourceGuids.Length
521
+ );
522
+ _unchangedAnimations.Capacity = Math.Max(
523
+ _unchangedAnimations.Capacity,
524
+ sourceGuids.Length
525
+ );
526
+ }
527
+
528
+ if (sourceGuids != null)
529
+ {
530
+ float total = sourceGuids.Length * 2;
531
+ int current = 0;
532
+
533
+ ShowProgress("Analyzing Animations", "Gathering source files...", 0f);
534
+
535
+ int throttleCounter = 0;
536
+ foreach (string guid in sourceGuids)
537
+ {
538
+ current++;
539
+ string sourceRelPath = AssetDatabase.GUIDToAssetPath(guid);
540
+ if (
541
+ string.IsNullOrWhiteSpace(sourceRelPath)
542
+ || !sourceRelPath.StartsWith(
543
+ _animationSourcePathRelative,
544
+ StringComparison.OrdinalIgnoreCase
545
+ )
546
+ )
547
+ {
548
+ continue;
549
+ }
550
+
551
+ string sourceFullPath = GetFullPathFromRelative(sourceRelPath);
552
+ if (sourceFullPath == null || !File.Exists(sourceFullPath))
553
+ {
554
+ continue;
555
+ }
556
+
557
+ string directoryName = Path.GetDirectoryName(sourceRelPath);
558
+ if (string.IsNullOrWhiteSpace(directoryName))
559
+ {
560
+ continue;
561
+ }
562
+ AnimationFileInfo fileInfo = new()
563
+ {
564
+ RelativePath = sourceRelPath,
565
+ FullPath = sourceFullPath,
566
+ FileName = Path.GetFileName(sourceRelPath),
567
+ RelativeDirectory = GetRelativeSubPath(
568
+ _animationSourcePathRelative,
569
+ directoryName.SanitizePath()
570
+ ),
571
+ Hash = GetDependencyHashString(sourceRelPath),
572
+ };
573
+ fileInfo.DestinationRelativePath = Path.Combine(
574
+ _animationDestinationPathRelative,
575
+ fileInfo.RelativeDirectory,
576
+ fileInfo.FileName
577
+ )
578
+ .SanitizePath();
579
+ _sourceAnimations.Add(fileInfo);
580
+
581
+ // Throttle progress updates
582
+ if (++throttleCounter % 10 == 0)
583
+ {
584
+ ShowProgress(
585
+ "Analyzing Animations",
586
+ $"Hashing: {fileInfo.FileName}",
587
+ current / total
588
+ );
589
+ }
590
+ }
591
+
592
+ this.Log(
593
+ $"Found {_sourceAnimations.Count} animations in source. Comparing with destination..."
594
+ );
595
+
596
+ for (int i = 0; i < _sourceAnimations.Count; i++)
597
+ {
598
+ AnimationFileInfo sourceInfo = _sourceAnimations[i];
599
+ current++;
600
+ if (i % 10 == 0 || i == _sourceAnimations.Count - 1)
601
+ {
602
+ ShowProgress(
603
+ "Analyzing Animations",
604
+ $"Comparing: {sourceInfo.FileName}",
605
+ current / total
606
+ );
607
+ }
608
+
609
+ string destRelPath = sourceInfo.DestinationRelativePath;
610
+ string destFullPath = GetFullPathFromRelative(destRelPath);
611
+ bool destExists = destFullPath != null && File.Exists(destFullPath);
612
+
613
+ if (!destExists)
614
+ {
615
+ sourceInfo.Status = AnimationStatus.New;
616
+ _newAnimations.Add(sourceInfo);
617
+ }
618
+ else
619
+ {
620
+ string destHash = GetDependencyHashString(destRelPath);
621
+ if (
622
+ string.IsNullOrWhiteSpace(sourceInfo.Hash)
623
+ || string.IsNullOrWhiteSpace(destHash)
624
+ )
625
+ {
626
+ this.LogWarn(
627
+ $"Could not compare '{sourceInfo.FileName}' due to hashing error. Treating as 'Changed'."
628
+ );
629
+ sourceInfo.Status = AnimationStatus.Changed;
630
+ _changedAnimations.Add(sourceInfo);
631
+ }
632
+ else if (
633
+ sourceInfo.Hash.Equals(destHash, StringComparison.OrdinalIgnoreCase)
634
+ )
635
+ {
636
+ sourceInfo.Status = AnimationStatus.Unchanged;
637
+ _unchangedAnimations.Add(sourceInfo);
638
+ }
639
+ else
640
+ {
641
+ sourceInfo.Status = AnimationStatus.Changed;
642
+ _changedAnimations.Add(sourceInfo);
643
+ }
644
+ }
645
+ }
646
+
647
+ // Compute destination-only (orphans) for mirror delete
648
+ try
649
+ {
650
+ _destinationOrphans.Clear();
651
+ HashSet<string> expectedDestPaths = new(StringComparer.OrdinalIgnoreCase);
652
+ foreach (AnimationFileInfo info in _sourceAnimations)
653
+ {
654
+ if (!string.IsNullOrWhiteSpace(info.DestinationRelativePath))
655
+ {
656
+ expectedDestPaths.Add(info.DestinationRelativePath);
657
+ }
658
+ }
659
+
660
+ string[] destGuids = AssetDatabase.FindAssets(
661
+ "t:AnimationClip",
662
+ new[] { _animationDestinationPathRelative }
663
+ );
664
+ int local = 0;
665
+ foreach (string dGuid in destGuids)
666
+ {
667
+ local++;
668
+ string destRelPath = AssetDatabase.GUIDToAssetPath(dGuid);
669
+ if (string.IsNullOrWhiteSpace(destRelPath))
670
+ {
671
+ continue;
672
+ }
673
+ if (expectedDestPaths.Contains(destRelPath))
674
+ {
675
+ continue;
676
+ }
677
+ string destFullPath = GetFullPathFromRelative(destRelPath);
678
+ AnimationFileInfo orphan = new()
679
+ {
680
+ RelativePath = null,
681
+ FullPath = destFullPath,
682
+ FileName = Path.GetFileName(destRelPath),
683
+ RelativeDirectory = GetRelativeSubPath(
684
+ _animationDestinationPathRelative,
685
+ Path.GetDirectoryName(destRelPath).SanitizePath()
686
+ ),
687
+ Hash = GetDependencyHashString(destRelPath),
688
+ Status = AnimationStatus.Unknown,
689
+ DestinationRelativePath = destRelPath,
690
+ Selected = true,
691
+ };
692
+ _destinationOrphans.Add(orphan);
693
+
694
+ if (local % 20 == 0)
695
+ {
696
+ ShowProgress(
697
+ "Analyzing Animations",
698
+ $"Scanning destination: {orphan.FileName}",
699
+ current / total
700
+ );
701
+ }
702
+ }
703
+ }
704
+ catch (Exception ex)
705
+ {
706
+ this.LogError(
707
+ $"Error while scanning destination for orphans: {ex.Message}"
708
+ );
709
+ }
710
+ }
711
+
712
+ this.Log(
713
+ $"Analysis complete: {_newAnimations.Count} New, {_changedAnimations.Count} Changed, {_unchangedAnimations.Count} Unchanged, {_destinationOrphans.Count} Orphans."
714
+ );
715
+ }
716
+ catch (Exception ex)
717
+ {
718
+ this.LogError($"Error during analysis: {ex.Message}\n{ex.StackTrace}");
719
+ Info("Analysis Error", $"An error occurred during analysis: {ex.Message}");
720
+ ClearAnalysisResults();
721
+ }
722
+ finally
723
+ {
724
+ _isAnalyzing = false;
725
+ _analysisNeeded = false;
726
+ ClearProgress();
727
+ Repaint();
728
+ }
729
+ }
730
+
731
+ internal void CopyAnimationsInternal(CopyMode mode)
732
+ {
733
+ if (!ArePathsValid() || _isAnalyzing || _isCopying || _isDeleting)
734
+ {
735
+ return;
736
+ }
737
+
738
+ using PooledResource<List<AnimationFileInfo>> pooled =
739
+ Buffers<AnimationFileInfo>.List.Get(out List<AnimationFileInfo> animationsToCopy);
740
+ switch (mode)
741
+ {
742
+ case CopyMode.All:
743
+ // Skip unchanged by default to avoid needless errors
744
+ animationsToCopy.AddRange(_newAnimations);
745
+ animationsToCopy.AddRange(_changedAnimations);
746
+ break;
747
+ case CopyMode.Changed:
748
+ animationsToCopy.AddRange(_changedAnimations);
749
+ break;
750
+ case CopyMode.New:
751
+ animationsToCopy.AddRange(_newAnimations);
752
+ break;
753
+ }
754
+
755
+ if (animationsToCopy.Count == 0)
756
+ {
757
+ this.Log($"No animations to copy for the selected mode.");
758
+ Info("Nothing to Copy", "There are no animations matching the selected criteria.");
759
+ return;
760
+ }
761
+
762
+ // Respect user selection
763
+ animationsToCopy.RemoveAll(info => info == null || !info.Selected);
764
+ if (animationsToCopy.Count == 0)
765
+ {
766
+ Info("Nothing Selected", "No animations are selected for the operation.");
767
+ return;
768
+ }
769
+
770
+ this.Log(
771
+ $"Starting copy operation (Mode: {mode}) for {animationsToCopy.Count} animations..."
772
+ );
773
+ _isCopying = true;
774
+ Repaint();
775
+
776
+ int successCount = 0;
777
+ int errorCount = 0;
778
+ foreach (AnimationFileInfo animInfo in animationsToCopy)
779
+ {
780
+ string destinationAssetPath = animInfo.DestinationRelativePath;
781
+ string destDirectory = Path.GetDirectoryName(destinationAssetPath).SanitizePath();
782
+
783
+ if (
784
+ string.IsNullOrWhiteSpace(destDirectory)
785
+ || AssetDatabase.IsValidFolder(destDirectory)
786
+ )
787
+ {
788
+ continue;
789
+ }
790
+
791
+ try
792
+ {
793
+ DirectoryHelper.EnsureDirectoryExists(destDirectory);
794
+ }
795
+ catch (Exception ex)
796
+ {
797
+ this.LogError(
798
+ $"Failed to create destination directory '{destDirectory}' for animation '{animInfo.FileName}'. Error: {ex.Message}. Skipping."
799
+ );
800
+ }
801
+ }
802
+
803
+ AssetDatabase.StartAssetEditing();
804
+ try
805
+ {
806
+ for (int i = 0; i < animationsToCopy.Count; i++)
807
+ {
808
+ AnimationFileInfo animInfo = animationsToCopy[i];
809
+ float progress = (float)(i + 1) / animationsToCopy.Count;
810
+ bool userCancelled = false;
811
+ if (i == 0 || i % 10 == 0 || i == animationsToCopy.Count - 1)
812
+ {
813
+ userCancelled = CancelableProgress(
814
+ $"Copying Animations ({mode})",
815
+ $"Copying: {animInfo.FileName} ({i + 1}/{animationsToCopy.Count})",
816
+ progress
817
+ );
818
+ }
819
+
820
+ if (userCancelled)
821
+ {
822
+ this.LogWarn($"Copy operation cancelled by user.");
823
+ break;
824
+ }
825
+
826
+ string sourceAssetPath = animInfo.RelativePath;
827
+ string destinationAssetPath = animInfo.DestinationRelativePath;
828
+ bool operationSuccessful = false;
829
+ try
830
+ {
831
+ string destFullPath = GetFullPathFromRelative(destinationAssetPath);
832
+ bool destExists =
833
+ !string.IsNullOrWhiteSpace(destFullPath) && File.Exists(destFullPath);
834
+
835
+ if (_dryRun)
836
+ {
837
+ // Simulate
838
+ operationSuccessful = true;
839
+ }
840
+ else if (!destExists || animInfo.Status == AnimationStatus.New)
841
+ {
842
+ operationSuccessful = AssetDatabase.CopyAsset(
843
+ sourceAssetPath,
844
+ destinationAssetPath
845
+ );
846
+ }
847
+ else if (animInfo.Status == AnimationStatus.Changed)
848
+ {
849
+ // Preserve GUID: replace file on disk and reimport
850
+ string sourceFullPath = animInfo.FullPath;
851
+ if (
852
+ !string.IsNullOrWhiteSpace(sourceFullPath)
853
+ && !string.IsNullOrWhiteSpace(destFullPath)
854
+ )
855
+ {
856
+ FileUtil.ReplaceFile(sourceFullPath, destFullPath);
857
+ AssetDatabase.ImportAsset(
858
+ destinationAssetPath,
859
+ ImportAssetOptions.ForceUpdate
860
+ );
861
+ operationSuccessful = true;
862
+ }
863
+ }
864
+ else
865
+ {
866
+ // Unchanged
867
+ if (_includeUnchangedInCopyAll && mode == CopyMode.All)
868
+ {
869
+ string sourceFullPath = animInfo.FullPath;
870
+ if (
871
+ !string.IsNullOrWhiteSpace(sourceFullPath)
872
+ && !string.IsNullOrWhiteSpace(destFullPath)
873
+ )
874
+ {
875
+ FileUtil.ReplaceFile(sourceFullPath, destFullPath);
876
+ AssetDatabase.ImportAsset(
877
+ destinationAssetPath,
878
+ ImportAssetOptions.ForceUpdate
879
+ );
880
+ operationSuccessful = true;
881
+ }
882
+ }
883
+ else
884
+ {
885
+ // skip unchanged by default
886
+ operationSuccessful = true;
887
+ }
888
+ }
889
+ }
890
+ catch (Exception ex)
891
+ {
892
+ this.LogError(
893
+ $"Failed to copy/replace '{sourceAssetPath}' -> '{destinationAssetPath}'. {ex.Message}"
894
+ );
895
+ operationSuccessful = false;
896
+ }
897
+
898
+ if (operationSuccessful)
899
+ {
900
+ successCount++;
901
+ }
902
+ else
903
+ {
904
+ errorCount++;
905
+ }
906
+ }
907
+ }
908
+ catch (Exception ex)
909
+ {
910
+ this.LogError(
911
+ $"An unexpected error occurred during the copy process: {ex.Message}\n{ex.StackTrace}"
912
+ );
913
+ errorCount = animationsToCopy.Count - successCount;
914
+ }
915
+ finally
916
+ {
917
+ AssetDatabase.StopAssetEditing();
918
+ if (!_dryRun)
919
+ {
920
+ AssetDatabase.SaveAssets();
921
+ AssetDatabase.Refresh();
922
+ }
923
+ ClearProgress();
924
+ _isCopying = false;
925
+ this.Log(
926
+ $"Copy operation finished{(_dryRun ? " (dry run)" : string.Empty)}. Mode: {mode}. Success: {successCount}, Errors: {errorCount}."
927
+ );
928
+
929
+ Info(
930
+ "Copy Complete",
931
+ $"Copy operation finished{(_dryRun ? " (dry run)" : string.Empty)}.\nMode: {mode}\nItems processed: {successCount + errorCount}\nSuccessful: {successCount}\nErrors: {errorCount}\n\nSee console log for details."
932
+ );
933
+
934
+ _analysisNeeded = true;
935
+ Repaint();
936
+ }
937
+ }
938
+
939
+ private void DeleteUnchangedSourceAnimations()
940
+ {
941
+ if (!ArePathsValid() || _isAnalyzing || _isCopying || _isDeleting)
942
+ {
943
+ return;
944
+ }
945
+
946
+ List<AnimationFileInfo> animationsToDelete = _unchangedAnimations
947
+ .Where(a => a is { Selected: true })
948
+ .ToList();
949
+
950
+ if (animationsToDelete.Count == 0)
951
+ {
952
+ this.Log($"No unchanged source animations to delete.");
953
+
954
+ return;
955
+ }
956
+
957
+ bool confirm = Confirm(
958
+ "Confirm Delete Unchanged",
959
+ $"Delete {animationsToDelete.Count} unchanged source animation(s) from '{_animationSourcePathRelative}'?\n\nThese files are duplicates of the destination and will be moved to Trash.{(_dryRun ? "\n\nDry run is ON: no files will be changed." : string.Empty)}",
960
+ _dryRun ? "OK" : "Yes, Delete",
961
+ "Cancel"
962
+ );
963
+ if (!confirm)
964
+ {
965
+ return;
966
+ }
967
+
968
+ this.Log(
969
+ $"Starting delete operation for {animationsToDelete.Count} unchanged source animations..."
970
+ );
971
+ _isDeleting = true;
972
+ Repaint();
973
+
974
+ int successCount = 0;
975
+ int errorCount = 0;
976
+ if (!_dryRun)
977
+ {
978
+ AssetDatabase.StartAssetEditing();
979
+ }
980
+
981
+ try
982
+ {
983
+ for (int i = 0; i < animationsToDelete.Count; i++)
984
+ {
985
+ AnimationFileInfo animInfo = animationsToDelete[i];
986
+ float progress = (float)(i + 1) / animationsToDelete.Count;
987
+ bool userCancelled = false;
988
+ if (i == 0 || i % 10 == 0 || i == animationsToDelete.Count - 1)
989
+ {
990
+ userCancelled = CancelableProgress(
991
+ "Deleting Source Duplicates",
992
+ $"Deleting: {animInfo.FileName} ({i + 1}/{animationsToDelete.Count})",
993
+ progress
994
+ );
995
+ }
996
+
997
+ if (userCancelled)
998
+ {
999
+ this.LogWarn($"Delete operation cancelled by user.");
1000
+ break;
1001
+ }
1002
+
1003
+ bool deleteSuccessful = true;
1004
+ string sourceAssetPath = animInfo.RelativePath;
1005
+ if (!_dryRun)
1006
+ {
1007
+ deleteSuccessful = AssetDatabase.DeleteAsset(sourceAssetPath);
1008
+ }
1009
+
1010
+ if (deleteSuccessful)
1011
+ {
1012
+ successCount++;
1013
+ }
1014
+ else
1015
+ {
1016
+ this.LogError(
1017
+ $"Failed to delete source duplicate: '{sourceAssetPath}'. It might have been moved or deleted already."
1018
+ );
1019
+ errorCount++;
1020
+ }
1021
+ }
1022
+ }
1023
+ catch (Exception ex)
1024
+ {
1025
+ this.LogError(
1026
+ $"An unexpected error occurred during the delete process: {ex.Message}\n{ex.StackTrace}"
1027
+ );
1028
+ errorCount = animationsToDelete.Count - successCount;
1029
+ }
1030
+ finally
1031
+ {
1032
+ if (!_dryRun)
1033
+ {
1034
+ AssetDatabase.StopAssetEditing();
1035
+ AssetDatabase.Refresh();
1036
+ }
1037
+ ClearProgress();
1038
+ _isDeleting = false;
1039
+ this.Log(
1040
+ $"Delete operation finished{(_dryRun ? " (dry run)" : string.Empty)}. Successfully processed: {successCount}, Errors: {errorCount}."
1041
+ );
1042
+
1043
+ _analysisNeeded = true;
1044
+ Repaint();
1045
+ }
1046
+ }
1047
+
1048
+ private void ClearAnalysisResults()
1049
+ {
1050
+ _sourceAnimations.Clear();
1051
+ _newAnimations.Clear();
1052
+ _changedAnimations.Clear();
1053
+ _unchangedAnimations.Clear();
1054
+ _destinationOrphans.Clear();
1055
+
1056
+ Repaint();
1057
+ }
1058
+
1059
+ private static string GetFullPathFromRelative(string relativePath)
1060
+ {
1061
+ if (string.IsNullOrWhiteSpace(relativePath))
1062
+ {
1063
+ return null;
1064
+ }
1065
+
1066
+ if (relativePath.Equals("Assets", StringComparison.OrdinalIgnoreCase))
1067
+ {
1068
+ return Application.dataPath.SanitizePath();
1069
+ }
1070
+
1071
+ if (relativePath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase))
1072
+ {
1073
+ string projectRoot = Application.dataPath.Substring(
1074
+ 0,
1075
+ Application.dataPath.Length - "Assets".Length
1076
+ );
1077
+ return (projectRoot + relativePath).SanitizePath();
1078
+ }
1079
+ return null;
1080
+ }
1081
+
1082
+ private string GetRelativeSubPath(string basePath, string fullPath)
1083
+ {
1084
+ string normalizedBasePath = basePath.TrimEnd('/') + "/";
1085
+ string normalizedFullPath = fullPath.TrimEnd('/') + "/";
1086
+
1087
+ if (
1088
+ normalizedFullPath.StartsWith(
1089
+ normalizedBasePath,
1090
+ StringComparison.OrdinalIgnoreCase
1091
+ )
1092
+ )
1093
+ {
1094
+ string subPath = normalizedFullPath
1095
+ .Substring(normalizedBasePath.Length)
1096
+ .TrimEnd('/');
1097
+ return subPath;
1098
+ }
1099
+
1100
+ this.LogWarn(
1101
+ $"Path '{fullPath}' did not start with expected base '{basePath}'. Could not determine relative sub-path."
1102
+ );
1103
+ return string.Empty;
1104
+ }
1105
+
1106
+ private string GetDependencyHashString(string assetPath)
1107
+ {
1108
+ try
1109
+ {
1110
+ if (string.IsNullOrWhiteSpace(assetPath))
1111
+ {
1112
+ return string.Empty;
1113
+ }
1114
+ Hash128 hash = AssetDatabase.GetAssetDependencyHash(assetPath);
1115
+ return hash.ToString();
1116
+ }
1117
+ catch (Exception ex)
1118
+ {
1119
+ this.LogError(
1120
+ $"[AnimationCopierWindow] Error getting dependency hash for {assetPath}.",
1121
+ ex
1122
+ );
1123
+ return string.Empty;
1124
+ }
1125
+ }
1126
+
1127
+ private void DrawPreviewSection()
1128
+ {
1129
+ EditorGUILayout.LabelField("Preview", EditorStyles.boldLabel);
1130
+ _dryRun = EditorGUILayout.ToggleLeft("Dry Run (no changes)", _dryRun);
1131
+ using (new EditorGUILayout.HorizontalScope())
1132
+ {
1133
+ _filterText = EditorGUILayout.TextField(new GUIContent("Filter"), _filterText);
1134
+ _filterUseRegex = EditorGUILayout.ToggleLeft(
1135
+ "Regex",
1136
+ _filterUseRegex,
1137
+ GUILayout.Width(60)
1138
+ );
1139
+ _sortAscending = EditorGUILayout.ToggleLeft(
1140
+ "Sort Asc",
1141
+ _sortAscending,
1142
+ GUILayout.Width(80)
1143
+ );
1144
+ if (GUILayout.Button("Export Preview Report", GUILayout.Width(180)))
1145
+ {
1146
+ ExportPreviewReport();
1147
+ }
1148
+ }
1149
+ _previewFoldout = EditorGUILayout.Foldout(_previewFoldout, "Show Preview Lists", true);
1150
+ if (!_previewFoldout)
1151
+ {
1152
+ return;
1153
+ }
1154
+
1155
+ using (new EditorGUILayout.VerticalScope(GUILayout.Height(250)))
1156
+ {
1157
+ _previewScroll = EditorGUILayout.BeginScrollView(_previewScroll);
1158
+
1159
+ DrawPreviewGroup(ref _newFoldout, "New", _newAnimations, useSourcePath: true);
1160
+ DrawPreviewGroup(
1161
+ ref _changedFoldout,
1162
+ "Changed",
1163
+ _changedAnimations,
1164
+ useSourcePath: true
1165
+ );
1166
+ DrawPreviewGroup(
1167
+ ref _unchangedFoldout,
1168
+ "Unchanged (Source Duplicates)",
1169
+ _unchangedAnimations,
1170
+ useSourcePath: true
1171
+ );
1172
+ DrawPreviewGroup(
1173
+ ref _orphansFoldout,
1174
+ "Destination Orphans",
1175
+ _destinationOrphans,
1176
+ useSourcePath: false
1177
+ );
1178
+
1179
+ EditorGUILayout.EndScrollView();
1180
+ }
1181
+ }
1182
+
1183
+ private void DrawPreviewGroup(
1184
+ ref bool foldout,
1185
+ string inputTitle,
1186
+ List<AnimationFileInfo> items,
1187
+ bool useSourcePath
1188
+ )
1189
+ {
1190
+ if (items == null)
1191
+ {
1192
+ return;
1193
+ }
1194
+ IEnumerable<AnimationFileInfo> filtered = ApplyFilterAndSort(items);
1195
+ AnimationFileInfo[] animationFileInfos =
1196
+ filtered as AnimationFileInfo[] ?? filtered.ToArray();
1197
+ int count = animationFileInfos.Length;
1198
+ if (count == 0)
1199
+ {
1200
+ using (new EditorGUILayout.HorizontalScope())
1201
+ {
1202
+ GUILayout.Space(10);
1203
+ EditorGUILayout.LabelField($"{inputTitle}: None", EditorStyles.miniLabel);
1204
+ }
1205
+ return;
1206
+ }
1207
+
1208
+ foldout = EditorGUILayout.Foldout(foldout, $"{inputTitle} ({count})", true);
1209
+ if (!foldout)
1210
+ {
1211
+ return;
1212
+ }
1213
+
1214
+ using (new EditorGUI.IndentLevelScope())
1215
+ {
1216
+ using (new EditorGUILayout.HorizontalScope())
1217
+ {
1218
+ if (GUILayout.Button("Select All", GUILayout.Width(100)))
1219
+ {
1220
+ foreach (AnimationFileInfo info in animationFileInfos)
1221
+ {
1222
+ info.Selected = true;
1223
+ }
1224
+ }
1225
+ if (GUILayout.Button("Select None", GUILayout.Width(100)))
1226
+ {
1227
+ foreach (AnimationFileInfo info in animationFileInfos)
1228
+ {
1229
+ info.Selected = false;
1230
+ }
1231
+ }
1232
+ if (GUILayout.Button("Select Filtered", GUILayout.Width(120)))
1233
+ {
1234
+ foreach (AnimationFileInfo info in animationFileInfos)
1235
+ {
1236
+ info.Selected = true;
1237
+ }
1238
+ }
1239
+ if (GUILayout.Button("Clear Filtered", GUILayout.Width(120)))
1240
+ {
1241
+ foreach (AnimationFileInfo info in animationFileInfos)
1242
+ {
1243
+ info.Selected = false;
1244
+ }
1245
+ }
1246
+ }
1247
+
1248
+ foreach (AnimationFileInfo info in animationFileInfos)
1249
+ {
1250
+ using (new EditorGUILayout.HorizontalScope())
1251
+ {
1252
+ info.Selected = EditorGUILayout.Toggle(info.Selected, GUILayout.Width(20));
1253
+ EditorGUILayout.LabelField(info.FileName, GUILayout.MinWidth(100));
1254
+ if (GUILayout.Button("Ping", GUILayout.Width(60)))
1255
+ {
1256
+ string assetPath = useSourcePath
1257
+ ? info.RelativePath
1258
+ : info.DestinationRelativePath;
1259
+ if (!string.IsNullOrWhiteSpace(assetPath))
1260
+ {
1261
+ UnityEngine.Object obj = AssetDatabase.LoadMainAssetAtPath(
1262
+ assetPath
1263
+ );
1264
+ if (obj != null)
1265
+ {
1266
+ EditorGUIUtility.PingObject(obj);
1267
+ }
1268
+ }
1269
+ }
1270
+ }
1271
+ }
1272
+ }
1273
+ }
1274
+
1275
+ private IEnumerable<AnimationFileInfo> ApplyFilterAndSort(List<AnimationFileInfo> items)
1276
+ {
1277
+ IEnumerable<AnimationFileInfo> query = items;
1278
+ if (!string.IsNullOrWhiteSpace(_filterText))
1279
+ {
1280
+ if (_filterUseRegex)
1281
+ {
1282
+ try
1283
+ {
1284
+ Regex rx = new(_filterText, RegexOptions.IgnoreCase);
1285
+ query = query.Where(i =>
1286
+ i is { FileName: not null } && rx.IsMatch(i.FileName)
1287
+ );
1288
+ }
1289
+ catch (Exception ex)
1290
+ {
1291
+ this.LogWarn($"Invalid regex '{_filterText}': {ex.Message}");
1292
+ query = Enumerable.Empty<AnimationFileInfo>();
1293
+ }
1294
+ }
1295
+ else
1296
+ {
1297
+ query = query.Where(i =>
1298
+ i is { FileName: not null }
1299
+ && i.FileName.IndexOf(_filterText, StringComparison.OrdinalIgnoreCase) >= 0
1300
+ );
1301
+ }
1302
+ }
1303
+ query = _sortAscending
1304
+ ? query.OrderBy(i => i.FileName, StringComparer.OrdinalIgnoreCase)
1305
+ : query.OrderByDescending(i => i.FileName, StringComparer.OrdinalIgnoreCase);
1306
+ return query;
1307
+ }
1308
+
1309
+ internal void MirrorDeleteDestinationAnimations()
1310
+ {
1311
+ if (!ArePathsValid() || _isAnalyzing || _isCopying || _isDeleting)
1312
+ {
1313
+ return;
1314
+ }
1315
+
1316
+ List<AnimationFileInfo> toDelete = _destinationOrphans
1317
+ .Where(a => a is { Selected: true })
1318
+ .ToList();
1319
+ if (toDelete.Count == 0)
1320
+ {
1321
+ Info("Nothing to Delete", "No destination orphans are selected.");
1322
+ return;
1323
+ }
1324
+
1325
+ bool confirm = Confirm(
1326
+ "Confirm Mirror Delete",
1327
+ $"Delete {toDelete.Count} destination-only animation(s) from '{_animationDestinationPathRelative}'.{(_dryRun ? "\n\nDry run is ON: no files will be changed." : string.Empty)}",
1328
+ _dryRun ? "OK" : "Yes, Delete",
1329
+ "Cancel"
1330
+ );
1331
+ if (!confirm)
1332
+ {
1333
+ return;
1334
+ }
1335
+
1336
+ this.Log($"Starting mirror delete for {toDelete.Count} orphan animations...");
1337
+ _isDeleting = true;
1338
+ Repaint();
1339
+
1340
+ int success = 0;
1341
+ int errors = 0;
1342
+ if (!_dryRun)
1343
+ {
1344
+ AssetDatabase.StartAssetEditing();
1345
+ }
1346
+ try
1347
+ {
1348
+ for (int i = 0; i < toDelete.Count; i++)
1349
+ {
1350
+ AnimationFileInfo info = toDelete[i];
1351
+ float progress = (float)(i + 1) / toDelete.Count;
1352
+ bool userCancelled = false;
1353
+ if (i == 0 || i % 10 == 0 || i == toDelete.Count - 1)
1354
+ {
1355
+ userCancelled = CancelableProgress(
1356
+ "Mirror Deleting Destination Orphans",
1357
+ $"Deleting: {info.FileName} ({i + 1}/{toDelete.Count})",
1358
+ progress
1359
+ );
1360
+ }
1361
+ if (userCancelled)
1362
+ {
1363
+ this.LogWarn($"Mirror delete cancelled by user.");
1364
+ break;
1365
+ }
1366
+
1367
+ bool ok = true;
1368
+ if (!_dryRun)
1369
+ {
1370
+ ok = AssetDatabase.DeleteAsset(info.DestinationRelativePath);
1371
+ }
1372
+ if (ok)
1373
+ {
1374
+ success++;
1375
+ }
1376
+ else
1377
+ {
1378
+ errors++;
1379
+ }
1380
+ }
1381
+ }
1382
+ catch (Exception ex)
1383
+ {
1384
+ this.LogError($"Error during mirror delete: {ex.Message}\n{ex.StackTrace}");
1385
+ errors = toDelete.Count - success;
1386
+ }
1387
+ finally
1388
+ {
1389
+ if (!_dryRun)
1390
+ {
1391
+ AssetDatabase.StopAssetEditing();
1392
+ AssetDatabase.Refresh();
1393
+ }
1394
+ ClearProgress();
1395
+ _isDeleting = false;
1396
+ this.Log(
1397
+ $"Mirror delete finished{(_dryRun ? " (dry run)" : string.Empty)}. Success: {success}, Errors: {errors}."
1398
+ );
1399
+ _analysisNeeded = true;
1400
+ Repaint();
1401
+ }
1402
+ }
1403
+
1404
+ // Convenience wrappers for tests
1405
+ internal void CopyChanged() => CopyAnimationsInternal(CopyMode.Changed);
1406
+
1407
+ internal void CopyNew() => CopyAnimationsInternal(CopyMode.New);
1408
+
1409
+ internal void CopyAll() => CopyAnimationsInternal(CopyMode.All);
1410
+
1411
+ private static bool Confirm(string title, string message, string ok, string cancel)
1412
+ {
1413
+ return Utils.EditorUi.Confirm(title, message, ok, cancel, defaultWhenSuppressed: true);
1414
+ }
1415
+
1416
+ private static void Info(string title, string message)
1417
+ {
1418
+ Utils.EditorUi.Info(title, message);
1419
+ }
1420
+
1421
+ private static void ShowProgress(string title, string info, float progress)
1422
+ {
1423
+ Utils.EditorUi.ShowProgress(title, info, progress);
1424
+ }
1425
+
1426
+ private static bool CancelableProgress(string title, string info, float progress)
1427
+ {
1428
+ return Utils.EditorUi.CancelableProgress(title, info, progress);
1429
+ }
1430
+
1431
+ private static void ClearProgress()
1432
+ {
1433
+ Utils.EditorUi.ClearProgress();
1434
+ }
1435
+
1436
+ private void ExportPreviewReport()
1437
+ {
1438
+ try
1439
+ {
1440
+ StringBuilder sb = new(4096);
1441
+ sb.AppendLine(
1442
+ $"Animation Copier Preview Report - {DateTime.Now:yyyy-MM-dd HH:mm:ss}"
1443
+ );
1444
+ sb.AppendLine($"Source: {_animationSourcePathRelative}");
1445
+ sb.AppendLine($"Destination: {_animationDestinationPathRelative}");
1446
+ sb.AppendLine($"Dry Run: {_dryRun}");
1447
+ sb.AppendLine($"Include Unchanged in Copy All: {_includeUnchangedInCopyAll}");
1448
+ sb.AppendLine(
1449
+ $"Filter: '{_filterText}' (Regex={_filterUseRegex}) SortAsc={_sortAscending}"
1450
+ );
1451
+ sb.AppendLine();
1452
+
1453
+ void DumpGroup(
1454
+ string inputTitle,
1455
+ IEnumerable<AnimationFileInfo> list,
1456
+ bool useSource
1457
+ )
1458
+ {
1459
+ AnimationFileInfo[] arr = ApplyFilterAndSort(list.ToList()).ToArray();
1460
+ sb.AppendLine($"== {inputTitle} ({arr.Length}) ==");
1461
+ foreach (AnimationFileInfo info in arr)
1462
+ {
1463
+ string path = useSource ? info.RelativePath : info.DestinationRelativePath;
1464
+ sb.AppendLine(
1465
+ $"[{(info.Selected ? 'x' : ' ')}] {info.FileName} -> {path}"
1466
+ );
1467
+ }
1468
+ sb.AppendLine();
1469
+ }
1470
+
1471
+ DumpGroup("New", _newAnimations, true);
1472
+ DumpGroup("Changed", _changedAnimations, true);
1473
+ DumpGroup("Unchanged (Source Duplicates)", _unchangedAnimations, true);
1474
+ DumpGroup("Destination Orphans", _destinationOrphans, false);
1475
+
1476
+ string savePath = EditorUtility.SaveFilePanel(
1477
+ "Export Preview Report",
1478
+ Application.dataPath,
1479
+ "AnimationCopierReport.txt",
1480
+ "txt"
1481
+ );
1482
+ if (!string.IsNullOrWhiteSpace(savePath))
1483
+ {
1484
+ File.WriteAllText(savePath, sb.ToString());
1485
+ EditorUtility.RevealInFinder(savePath);
1486
+ }
1487
+ }
1488
+ catch (Exception ex)
1489
+ {
1490
+ this.LogError($"Failed to export preview report: {ex.Message}\n{ex.StackTrace}");
1491
+ }
1492
+ }
1493
+
1494
+ private void RevealFolder(string relativeAssetsPath)
1495
+ {
1496
+ try
1497
+ {
1498
+ string full = GetFullPathFromRelative(relativeAssetsPath);
1499
+ if (
1500
+ !string.IsNullOrWhiteSpace(full)
1501
+ && (Directory.Exists(full) || File.Exists(full))
1502
+ )
1503
+ {
1504
+ EditorUtility.RevealInFinder(full);
1505
+ }
1506
+ else
1507
+ {
1508
+ this.LogWarn($"Cannot open folder: '{relativeAssetsPath}'");
1509
+ }
1510
+ }
1511
+ catch (Exception ex)
1512
+ {
1513
+ this.LogError($"Failed to open folder '{relativeAssetsPath}': {ex.Message}");
1514
+ }
1515
+ }
1516
+ }
1517
+ #endif
1518
+ }