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

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 (1500) 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 +75 -0
  7. package/.githooks/pre-push +50 -0
  8. package/.github/dependabot.yml +32 -10
  9. package/.github/scripts/check-markdown-links.ps1 +77 -0
  10. package/.github/scripts/check_markdown_links.py +89 -0
  11. package/.github/scripts/check_markdown_url_encoding.py +74 -0
  12. package/.github/scripts/validate_markdown_links.py +194 -0
  13. package/.github/workflows/csharpier-autofix.yml +152 -0
  14. package/.github/workflows/format-on-demand.yml +305 -0
  15. package/.github/workflows/lint-doc-links.yml +30 -0
  16. package/.github/workflows/markdown-json.yml +45 -0
  17. package/.github/workflows/npm-publish.yml +75 -75
  18. package/.github/workflows/prettier-autofix.yml +195 -0
  19. package/.github/workflows/update-dotnet-tools.yml +80 -0
  20. package/.github/workflows/yaml-format-lint.yml +41 -0
  21. package/.lychee.toml +26 -0
  22. package/.markdownlint.json +21 -0
  23. package/.markdownlint.jsonc +21 -0
  24. package/.markdownlintignore +8 -0
  25. package/.pre-commit-config.yaml +47 -22
  26. package/.prettierignore +22 -0
  27. package/.prettierrc.json +20 -0
  28. package/.yamllint.yaml +31 -0
  29. package/AGENTS.md +56 -0
  30. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  31. package/CHANGELOG.md +11 -0
  32. package/CHANGELOG.md.meta +7 -7
  33. package/CONTRIBUTING.md +49 -0
  34. package/CONTRIBUTING.md.meta +7 -0
  35. package/DATA_STRUCTURES.md +324 -0
  36. package/DATA_STRUCTURES.md.meta +7 -0
  37. package/Docs/Images/attribute_resolution.svg +40 -0
  38. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  39. package/Docs/Images/bitset.svg +47 -0
  40. package/Docs/Images/bitset.svg.meta +7 -0
  41. package/Docs/Images/concave_hull.svg +30 -0
  42. package/Docs/Images/concave_hull.svg.meta +7 -0
  43. package/Docs/Images/convex_hull.svg +29 -0
  44. package/Docs/Images/convex_hull.svg.meta +7 -0
  45. package/Docs/Images/cyclic_buffer.svg +37 -0
  46. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  47. package/Docs/Images/data_distribution_decision.svg +88 -0
  48. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  49. package/Docs/Images/deque.svg +64 -0
  50. package/Docs/Images/deque.svg.meta +7 -0
  51. package/Docs/Images/deque_queue.svg +107 -0
  52. package/Docs/Images/deque_queue.svg.meta +7 -0
  53. package/Docs/Images/disjoint_set.svg +47 -0
  54. package/Docs/Images/disjoint_set.svg.meta +7 -0
  55. package/Docs/Images/effects_pipeline.svg +59 -0
  56. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  57. package/Docs/Images/geometry_edge_cases.svg +61 -0
  58. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  59. package/Docs/Images/heap.svg +56 -0
  60. package/Docs/Images/heap.svg.meta +7 -0
  61. package/Docs/Images/kdtree_2d.svg +38 -0
  62. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  63. package/Docs/Images/kdtree_3d.svg +83 -0
  64. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  65. package/Docs/Images/octree_3d.svg +79 -0
  66. package/Docs/Images/octree_3d.svg.meta +7 -0
  67. package/Docs/Images/polyline_simplify.svg +18 -0
  68. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  69. package/Docs/Images/quadtree_2d.svg +37 -0
  70. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  71. package/Docs/Images/query_boundaries.svg +38 -0
  72. package/Docs/Images/query_boundaries.svg.meta +7 -0
  73. package/Docs/Images/random_generators.svg +105 -0
  74. package/Docs/Images/random_generators.svg.meta +7 -0
  75. package/Docs/Images/reflection_scan.svg +33 -0
  76. package/Docs/Images/reflection_scan.svg.meta +7 -0
  77. package/Docs/Images/relational_wiring.svg +75 -0
  78. package/Docs/Images/relational_wiring.svg.meta +7 -0
  79. package/Docs/Images/rtree_2d.svg +27 -0
  80. package/Docs/Images/rtree_2d.svg.meta +7 -0
  81. package/Docs/Images/rtree_3d.svg +79 -0
  82. package/Docs/Images/rtree_3d.svg.meta +7 -0
  83. package/Docs/Images/serialization_flow.svg +50 -0
  84. package/Docs/Images/serialization_flow.svg.meta +7 -0
  85. package/Docs/Images/singletons_lifecycle.svg +54 -0
  86. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  87. package/Docs/Images/sparse_set.svg +54 -0
  88. package/Docs/Images/sparse_set.svg.meta +7 -0
  89. package/Docs/Images/trie.svg +55 -0
  90. package/Docs/Images/trie.svg.meta +7 -0
  91. package/Docs/Images.meta +8 -0
  92. package/Docs.meta +8 -0
  93. package/EDITOR_TOOLS_GUIDE.md +1980 -0
  94. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  95. package/EFFECTS_SYSTEM.md +242 -0
  96. package/EFFECTS_SYSTEM.md.meta +7 -0
  97. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  98. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  99. package/Editor/AnimationEventEditor.cs +1570 -874
  100. package/Editor/AnimationEventEditor.cs.meta +11 -11
  101. package/Editor/AssemblyInfo.cs +4 -0
  102. package/Editor/AssemblyInfo.cs.meta +3 -0
  103. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  104. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  105. package/Editor/AssetProcessors.meta +2 -2
  106. package/Editor/Core/Helper/AnimationEventHelpers.cs +230 -0
  107. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  108. package/Editor/Core/Helper.meta +8 -0
  109. package/Editor/Core.meta +8 -0
  110. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  111. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  112. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  113. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  114. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  115. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  116. package/Editor/CustomDrawers.meta +2 -2
  117. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  118. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  119. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +808 -799
  120. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  121. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  122. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  123. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  124. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  125. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +155 -0
  126. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  127. package/Editor/CustomEditors.meta +2 -2
  128. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  129. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  130. package/Editor/Extensions/UnityExtensions.cs +50 -26
  131. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  132. package/Editor/Extensions.meta +2 -2
  133. package/Editor/FitTextureSizeWindow.cs +809 -332
  134. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  135. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  136. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  137. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  138. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  139. package/Editor/Persistence.meta +8 -0
  140. package/Editor/PersistentDirectorySettings.cs +581 -248
  141. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  142. package/Editor/PrefabChecker.cs +1396 -741
  143. package/Editor/PrefabChecker.cs.meta +11 -11
  144. package/Editor/Sprites/AnimationCopier.cs +1594 -789
  145. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  146. package/Editor/Sprites/AnimationCreator.cs +1573 -881
  147. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  148. package/Editor/Sprites/AnimationViewerWindow.cs +1670 -1522
  149. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  150. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  151. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  152. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  153. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  154. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  155. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  156. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  157. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  158. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  159. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  160. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  161. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  162. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  163. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  164. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  165. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  166. package/Editor/Sprites/TexturePlatformNameHelper.cs +89 -0
  167. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  168. package/Editor/Sprites/TextureResizerWizard.cs +456 -175
  169. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  170. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  171. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  172. package/Editor/Sprites/TextureSettingsApplierWindow.cs +668 -0
  173. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  174. package/Editor/Sprites.meta +2 -2
  175. package/Editor/Styles/AnimationViewer.uss +115 -115
  176. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  177. package/Editor/Styles/AnimationViewer.uxml +56 -56
  178. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  179. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  180. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  181. package/Editor/Styles.meta +2 -2
  182. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  183. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  184. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  185. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  186. package/Editor/Tags.meta +8 -0
  187. package/Editor/Tools/ImageBlurTool.cs +522 -409
  188. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  189. package/Editor/Tools.meta +2 -2
  190. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  191. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  192. package/Editor/Utils/EditorUi.cs +228 -0
  193. package/Editor/Utils/EditorUi.cs.meta +11 -0
  194. package/Editor/Utils/EditorUtilities.cs +22 -22
  195. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  196. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  197. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  198. package/Editor/Utils.meta +8 -8
  199. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  200. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  201. package/Editor/Visuals.meta +2 -2
  202. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  203. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  204. package/Editor.meta +8 -8
  205. package/GETTING_STARTED.md +409 -0
  206. package/GETTING_STARTED.md.meta +7 -0
  207. package/GLOSSARY.md +313 -0
  208. package/GLOSSARY.md.meta +7 -0
  209. package/HULLS.md +45 -0
  210. package/HULLS.md.meta +7 -0
  211. package/INDEX.md +429 -0
  212. package/INDEX.md.meta +7 -0
  213. package/LICENSE +21 -21
  214. package/LICENSE.md +7 -7
  215. package/LICENSE.md.meta +7 -7
  216. package/LICENSE.meta +7 -7
  217. package/MATH_AND_EXTENSIONS.md +316 -0
  218. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  219. package/RANDOM_PERFORMANCE.md +140 -0
  220. package/RANDOM_PERFORMANCE.md.meta +7 -0
  221. package/README.md +1183 -188
  222. package/README.md.meta +7 -7
  223. package/REFLECTION_HELPERS.md +272 -0
  224. package/REFLECTION_HELPERS.md.meta +7 -0
  225. package/RELATIONAL_COMPONENTS.md +552 -0
  226. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  227. package/Runtime/AssemblyInfo.cs +9 -0
  228. package/Runtime/AssemblyInfo.cs.meta +11 -0
  229. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  230. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  231. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  232. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  233. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  234. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  235. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  236. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  237. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  238. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  239. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  240. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  241. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  242. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  243. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  244. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  245. package/Runtime/Binaries.meta +8 -8
  246. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  247. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  249. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  250. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  251. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  252. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  253. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  254. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  255. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  256. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  257. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  259. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  261. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/NotNullAttribute.cs +30 -32
  263. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  265. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  266. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +152 -0
  267. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  268. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  269. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  270. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  271. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  272. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  273. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  274. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  275. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  276. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  277. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  278. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  279. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  280. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  281. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  282. package/Runtime/Core/Attributes.meta +8 -8
  283. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  284. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  285. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  286. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  287. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  288. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  289. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  290. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  291. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  292. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  293. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  295. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  297. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  298. package/Runtime/Core/DataStructure/CyclicBuffer.cs +488 -266
  299. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  300. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  301. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  303. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  305. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  307. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  309. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  310. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  311. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  312. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  313. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  315. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  316. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  317. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  319. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  321. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  322. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  323. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  324. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  325. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  326. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  327. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  328. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  329. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  330. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  331. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  332. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  333. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  334. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  335. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  336. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  337. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  338. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  339. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  340. package/Runtime/Core/DataStructure.meta +8 -8
  341. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  342. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  344. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  345. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  346. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  347. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  348. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  349. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  350. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  352. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  354. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  355. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  356. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  357. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  358. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  359. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  360. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  361. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  362. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  363. package/Runtime/Core/Extension/RandomExtensions.cs +1006 -109
  364. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  365. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  366. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  367. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  368. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  369. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +287 -245
  370. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  371. package/Runtime/Core/Extension.meta +8 -8
  372. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  373. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  374. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  375. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  376. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  377. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  378. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  379. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  380. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  381. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  383. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  384. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  385. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  386. package/Runtime/Core/Helper/Geometry.cs +65 -43
  387. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  388. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  389. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  390. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  391. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  392. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  393. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  394. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  395. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  396. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  397. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  398. package/Runtime/Core/Helper/Logging.meta +2 -2
  399. package/Runtime/Core/Helper/Objects.cs +477 -769
  400. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  401. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  402. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  403. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  404. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  405. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +509 -400
  406. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  407. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  408. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  409. package/Runtime/Core/Helper/Partials.meta +2 -2
  410. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  411. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  412. package/Runtime/Core/Helper/ReflectionHelpers.cs +5298 -1963
  413. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  414. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  415. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  416. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  417. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  418. package/Runtime/Core/Helper/SpriteHelpers.cs +52 -41
  419. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  420. package/Runtime/Core/Helper/StringInList.cs +61 -35
  421. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  422. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  423. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  424. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +144 -82
  425. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  426. package/Runtime/Core/Helper/WallMath.cs +672 -166
  427. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  428. package/Runtime/Core/Helper.meta +8 -8
  429. package/Runtime/Core/Math/Line2D.cs +263 -0
  430. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  431. package/Runtime/Core/Math/Line3D.cs +452 -0
  432. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  433. package/Runtime/Core/Math/Parabola.cs +241 -47
  434. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  435. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  436. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  437. package/Runtime/Core/Math/Range.cs +157 -92
  438. package/Runtime/Core/Math/Range.cs.meta +11 -11
  439. package/Runtime/Core/Math.meta +8 -8
  440. package/Runtime/Core/Model/Direction.cs +25 -43
  441. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  442. package/Runtime/Core/Model.meta +8 -8
  443. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  444. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  445. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  446. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  447. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  448. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  449. package/Runtime/Core/OneOf/None.cs +30 -4
  450. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  451. package/Runtime/Core/OneOf.meta +8 -8
  452. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  453. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  455. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  456. package/Runtime/Core/Random/IRandom.cs +203 -161
  457. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  458. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  459. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  460. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  461. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  462. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  463. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  464. package/Runtime/Core/Random/PRNG.cs +21 -7
  465. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  466. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  467. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  469. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  470. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  471. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  472. package/Runtime/Core/Random/RandomState.cs +206 -131
  473. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  474. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  475. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  476. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  477. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  478. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  479. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  480. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  481. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  482. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  483. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  484. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  485. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  486. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  487. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  488. package/Runtime/Core/Random/WyRandom.cs +158 -121
  489. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  490. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  491. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  492. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  493. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  494. package/Runtime/Core/Random.meta +8 -8
  495. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  496. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  497. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  498. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  500. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  502. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  504. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  506. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  507. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  508. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  510. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  511. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  512. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  514. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  516. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  518. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  519. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +44 -36
  520. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  521. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  522. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  524. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  526. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  528. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  530. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  532. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  533. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  534. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  536. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  538. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  540. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  548. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  550. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  552. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  554. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  556. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  557. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  558. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  559. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  560. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  562. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  563. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  564. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  566. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  567. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  568. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  569. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  570. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  571. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  572. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  573. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  574. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  575. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  576. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  577. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  578. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  579. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  580. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  581. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  582. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  583. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  584. package/Runtime/Core/Serialization/Serializer.cs +2121 -195
  585. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  586. package/Runtime/Core/Serialization.meta +8 -8
  587. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  588. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  589. package/Runtime/Core/Threading.meta +8 -8
  590. package/Runtime/Core.meta +8 -8
  591. package/Runtime/Integrations/VContainer/AssemblyInfo.cs +9 -0
  592. package/Runtime/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
  593. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +281 -0
  594. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  595. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +189 -0
  596. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  597. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +90 -0
  598. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  599. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs +114 -0
  600. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs.meta +11 -0
  601. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +95 -0
  602. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  603. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs +241 -0
  604. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs.meta +11 -0
  605. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  606. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  607. package/Runtime/Integrations/VContainer.meta +8 -0
  608. package/Runtime/Integrations/Zenject/AssemblyInfo.cs +9 -0
  609. package/Runtime/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
  610. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +247 -0
  611. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  612. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +182 -0
  613. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  614. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +94 -0
  615. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  616. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs +44 -0
  617. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs.meta +11 -0
  618. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +93 -0
  619. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  620. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs +243 -0
  621. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs.meta +11 -0
  622. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  623. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  624. package/Runtime/Integrations/Zenject.meta +8 -0
  625. package/Runtime/Integrations.meta +8 -0
  626. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  627. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  628. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  629. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  630. package/Runtime/Protobuf-Net.meta +8 -8
  631. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  632. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  633. package/Runtime/Tags/Attribute.cs +399 -205
  634. package/Runtime/Tags/Attribute.cs.meta +2 -2
  635. package/Runtime/Tags/AttributeEffect.cs +372 -281
  636. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  637. package/Runtime/Tags/AttributeMetadataCache.cs +500 -0
  638. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  639. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  640. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  641. package/Runtime/Tags/AttributeModification.cs +132 -48
  642. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  643. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  644. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  645. package/Runtime/Tags/AttributesComponent.cs +237 -163
  646. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  647. package/Runtime/Tags/CollisionSenses.cs +117 -91
  648. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  649. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  650. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  651. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  652. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  653. package/Runtime/Tags/EffectHandle.cs +150 -65
  654. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  655. package/Runtime/Tags/EffectHandler.cs +470 -393
  656. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  657. package/Runtime/Tags/ModificationAction.cs +60 -9
  658. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  659. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  660. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  661. package/Runtime/Tags/TagHandler.cs +373 -158
  662. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  663. package/Runtime/Tags.meta +2 -2
  664. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  665. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  666. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  667. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  668. package/Runtime/Utils/Ascii85.cs +132 -115
  669. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  670. package/Runtime/Utils/Buffers.cs +1151 -550
  671. package/Runtime/Utils/Buffers.cs.meta +11 -11
  672. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  673. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  674. package/Runtime/Utils/ChildSpawner.cs +250 -157
  675. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  676. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  677. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  678. package/Runtime/Utils/CollisionProxy.cs +48 -48
  679. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  680. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  681. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  682. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  683. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  684. package/Runtime/Utils/LZMA.cs +276 -53
  685. package/Runtime/Utils/LZMA.cs.meta +2 -2
  686. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  687. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  688. package/Runtime/Utils/MatchTransform.cs +99 -82
  689. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  690. package/Runtime/Utils/Oscillator.cs +27 -27
  691. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  692. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  693. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  694. package/Runtime/Utils/RuntimeSingleton.cs +139 -89
  695. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  696. package/Runtime/Utils/ScriptableObjectSingleton.cs +225 -85
  697. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  698. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  699. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  700. package/Runtime/Utils/SetTextureImportData.cs +71 -69
  701. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  702. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  703. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  704. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  705. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  706. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  707. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  708. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  709. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  710. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  711. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  712. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  713. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  714. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  715. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  716. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  717. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  718. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  719. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  720. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  721. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  722. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  723. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  724. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  725. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  726. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  727. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  728. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  729. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  730. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  731. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  732. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  733. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  734. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  735. package/Runtime/Utils/SevenZip.meta +2 -2
  736. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  737. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  738. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  739. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  740. package/Runtime/Utils/StartTracker.cs +15 -15
  741. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  742. package/Runtime/Utils/TextureScale.cs +364 -179
  743. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  744. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  745. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  746. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  747. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  748. package/Runtime/Utils.meta +8 -8
  749. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  750. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  751. package/Runtime/Visuals/UGUI/EnhancedImage.cs +224 -85
  752. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  753. package/Runtime/Visuals/UGUI.meta +2 -2
  754. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +784 -484
  755. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  756. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  757. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  758. package/Runtime/Visuals/UIToolkit.meta +2 -2
  759. package/Runtime/Visuals.meta +2 -2
  760. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  761. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  762. package/Runtime.meta +8 -8
  763. package/SERIALIZATION.md +663 -0
  764. package/SERIALIZATION.md.meta +7 -0
  765. package/SINGLETONS.md +427 -0
  766. package/SINGLETONS.md.meta +7 -0
  767. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  768. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  769. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  770. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  771. package/SPATIAL_TREE_2D_PERFORMANCE.md +241 -0
  772. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  773. package/SPATIAL_TREE_3D_PERFORMANCE.md +243 -0
  774. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  775. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  776. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  777. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  778. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  779. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  780. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  781. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  782. package/Samples~/DI - VContainer/README.md +515 -0
  783. package/Samples~/DI - VContainer/README.md.meta +8 -0
  784. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  785. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  786. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  787. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +42 -0
  788. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  789. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +24 -0
  790. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  791. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  792. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  793. package/Samples~/DI - VContainer/Scripts/Spawner.cs +130 -0
  794. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  795. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  796. package/Samples~/DI - VContainer.meta +9 -0
  797. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  798. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  799. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  800. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  801. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  802. package/Samples~/DI - Zenject/README.md +553 -0
  803. package/Samples~/DI - Zenject/README.md.meta +7 -0
  804. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  805. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  806. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  807. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +22 -0
  808. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  809. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs +37 -0
  810. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs.meta +12 -0
  811. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  812. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  813. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  814. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  815. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +91 -0
  816. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  817. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  818. package/Samples~/DI - Zenject.meta +9 -0
  819. package/Samples~/Random - PRNG/README.md +13 -0
  820. package/Samples~/Random - PRNG/README.md.meta +8 -0
  821. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  822. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  823. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  824. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  825. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  826. package/Samples~/Random - PRNG.meta +9 -0
  827. package/Samples~/Relational Components - Basic/README.md +21 -0
  828. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  829. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  830. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  831. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  832. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  833. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  834. package/Samples~/Relational Components - Basic.meta +9 -0
  835. package/Samples~/Serialization - JSON/README.md +14 -0
  836. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  837. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  838. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  839. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  840. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  841. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  842. package/Samples~/Serialization - JSON.meta +9 -0
  843. package/Samples~/Spatial Structures - 2D and 3D/README.md +14 -0
  844. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  845. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  846. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  847. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  848. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  849. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  850. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  851. package/Samples~/UGUI - EnhancedImage/README.md +13 -0
  852. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  853. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  854. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  855. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  856. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  857. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  858. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  859. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +13 -0
  860. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  861. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  862. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  863. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  864. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  865. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  866. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  867. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  868. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  869. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  870. package/Shaders/Materials.meta +8 -8
  871. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  872. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  873. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  874. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  875. package/Shaders/ShaderGraph.meta +8 -8
  876. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  877. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  878. package/Shaders/Support.meta +8 -0
  879. package/Shaders.meta +8 -8
  880. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  881. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  882. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  883. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  884. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  885. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  886. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  887. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  888. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  889. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  890. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  891. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  892. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  893. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  894. package/Styles/Elements/Progress.meta +2 -2
  895. package/Styles/Elements.meta +2 -2
  896. package/Styles/USS/ArcedProgressBar.uss +18 -18
  897. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  898. package/Styles/USS/CirclularProgressBar.uss +17 -17
  899. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  900. package/Styles/USS/RegularProgressBar.uss +32 -32
  901. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  902. package/Styles/USS/WigglyProgressBar.uss +16 -16
  903. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  904. package/Styles/USS.meta +2 -2
  905. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  906. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  907. package/Styles.meta +2 -2
  908. package/THIRD_PARTY_NOTICES.md +74 -0
  909. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  910. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +171 -0
  911. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  912. package/Tests/Editor/Attributes.meta +8 -0
  913. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  914. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  915. package/Tests/Editor/Core/Attributes.meta +8 -0
  916. package/Tests/Editor/Core.meta +8 -0
  917. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  918. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  919. package/Tests/Editor/Extensions.meta +3 -0
  920. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  921. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  922. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  923. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  924. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  925. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  926. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  927. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  928. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  929. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  930. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  931. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  932. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  933. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  935. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  936. package/Tests/Editor/Helper.meta +3 -0
  937. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  938. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  939. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +81 -0
  940. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  941. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs +170 -0
  942. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs.meta +11 -0
  943. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +37 -0
  944. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  945. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  946. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +37 -0
  947. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  948. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  949. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  950. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs +131 -0
  951. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs.meta +11 -0
  952. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +80 -0
  953. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  954. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  955. package/Tests/Editor/Integrations.meta +8 -0
  956. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  957. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  958. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  959. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  960. package/Tests/Editor/PersistentDirectorySettingsTests.cs +59 -0
  961. package/Tests/Editor/PersistentDirectorySettingsTests.cs.meta +11 -0
  962. package/Tests/Editor/PrefabCheckerReportTests.cs +32 -0
  963. package/Tests/Editor/PrefabCheckerReportTests.cs.meta +11 -0
  964. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs +64 -0
  965. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs.meta +11 -0
  966. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  967. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  968. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs +38 -0
  969. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  971. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  972. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  973. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  974. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  975. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  976. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  977. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  978. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  979. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  980. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +46 -0
  981. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  982. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  983. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  984. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  985. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  986. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  987. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  988. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  989. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  990. package/Tests/Editor/Sprites.meta +8 -0
  991. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  992. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  993. package/Tests/Editor/TestComponents.meta +8 -0
  994. package/Tests/Editor/Tools/ImageBlurToolTests.cs +47 -0
  995. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  996. package/Tests/Editor/Tools.meta +8 -0
  997. package/Tests/Editor/Utils/CommonTestBase.cs +250 -0
  998. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  999. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  1000. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  1001. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  1002. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  1003. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  1004. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  1005. package/Tests/Editor/Utils.meta +3 -0
  1006. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  1007. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  1008. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +773 -0
  1009. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  1010. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  1011. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  1012. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  1013. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  1014. package/Tests/Editor/Windows.meta +8 -0
  1015. package/Tests/Editor.meta +8 -0
  1016. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  1017. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  1018. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  1019. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  1020. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  1021. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  1022. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  1023. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  1024. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  1025. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  1026. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  1027. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  1028. package/Tests/Runtime/Attributes/Components.meta +2 -2
  1029. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  1030. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  1031. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  1032. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  1034. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  1035. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  1036. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  1037. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  1038. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  1039. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1040. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1041. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1042. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1043. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +98 -0
  1044. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1045. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1046. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1047. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1048. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1049. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1050. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1051. package/Tests/Runtime/Attributes.meta +2 -2
  1052. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1053. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1054. package/Tests/Runtime/Core/Random.meta +8 -0
  1055. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1056. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1057. package/Tests/Runtime/Core/Threading.meta +2 -2
  1058. package/Tests/Runtime/Core.meta +2 -2
  1059. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1060. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1061. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1062. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1064. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1065. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1066. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1068. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1070. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1071. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1072. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1073. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1074. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1075. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1076. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1078. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1080. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1081. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1082. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1084. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1085. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1086. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1088. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1089. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1090. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1091. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1092. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1093. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1094. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1095. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1096. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1097. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1098. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1099. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1100. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1101. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1102. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1103. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1104. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1105. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1106. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1107. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1108. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1109. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1110. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1111. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1112. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1113. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1114. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1115. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1116. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1117. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1118. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1119. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1120. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1121. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1122. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1123. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1124. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1125. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1126. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1127. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1128. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1129. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1130. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1131. package/Tests/Runtime/DataStructures.meta +8 -8
  1132. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1133. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1135. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1136. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1137. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1138. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1139. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1140. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1141. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1142. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1143. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1144. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1145. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1146. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1147. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1148. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1149. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1150. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1151. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1152. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1153. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1154. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1155. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1156. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1157. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1158. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1159. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1160. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1161. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1162. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1163. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1164. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1165. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1166. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1167. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1168. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1169. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1170. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1171. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1172. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1173. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1174. package/Tests/Runtime/Extensions.meta +2 -2
  1175. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1176. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1177. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1178. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1179. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1180. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1181. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1182. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1184. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1185. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1186. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1187. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1188. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1190. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1191. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1192. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1194. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1196. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1198. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1199. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1200. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1201. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1202. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1203. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1204. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1205. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1206. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1207. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1208. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1209. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1210. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1211. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1212. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1213. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1214. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1215. package/Tests/Runtime/Helper.meta +2 -2
  1216. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +601 -0
  1217. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs +86 -0
  1219. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs.meta +11 -0
  1220. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1221. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1222. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1223. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +619 -0
  1224. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1225. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1226. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1227. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1228. package/Tests/Runtime/Integrations.meta +8 -0
  1229. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1230. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1231. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1232. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1233. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1234. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1235. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1236. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1237. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1238. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1239. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1240. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1241. package/Tests/Runtime/Math.meta +8 -0
  1242. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1243. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1244. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1245. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1246. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1247. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1248. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1249. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1250. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1251. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1252. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1253. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1254. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1255. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1256. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +697 -0
  1257. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1258. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +653 -0
  1259. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1260. package/Tests/Runtime/Performance.meta +8 -8
  1261. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1262. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1263. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1264. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1265. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1266. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1267. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1268. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1269. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1270. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1271. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1272. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1273. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1274. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1275. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1276. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1277. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1278. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1279. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1280. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1281. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1282. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1283. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1284. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1285. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1286. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1287. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1288. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1289. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1290. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1291. package/Tests/Runtime/Random.meta +8 -8
  1292. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1293. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1294. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1295. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1296. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1297. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1298. package/Tests/Runtime/Scenes.meta +2 -2
  1299. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1300. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1301. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1302. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1303. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1304. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1305. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1306. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1307. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1308. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1309. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs +30 -0
  1310. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs.meta +11 -0
  1311. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1153 -0
  1312. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1313. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1314. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1315. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1316. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +167 -156
  1318. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1319. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1320. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1321. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1322. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1323. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1324. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1325. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1326. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1327. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1328. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1329. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1330. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1331. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1332. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1333. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +907 -0
  1334. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1335. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs +105 -0
  1336. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1338. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs +247 -0
  1340. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Serialization.meta +2 -2
  1342. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1343. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1344. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1345. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1346. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1347. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1348. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1349. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1350. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1351. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1352. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1353. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1354. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1355. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1356. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1357. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1358. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1359. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1360. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1361. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1362. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1363. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1364. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1365. package/Tests/Runtime/Tags.meta +8 -0
  1366. package/Tests/Runtime/TestUtils/CommonTestBase.cs +301 -0
  1367. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1368. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1369. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1370. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1371. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1372. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1373. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1374. package/Tests/Runtime/TestUtils.meta +8 -0
  1375. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1376. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1378. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1379. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1380. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1381. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1382. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1384. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1386. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1388. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1389. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1390. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1391. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1392. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1393. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1394. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1395. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1396. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1397. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1398. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1399. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1400. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1401. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1402. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1403. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1404. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1405. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1406. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1407. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1408. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1409. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1410. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1411. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1412. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1413. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1414. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1415. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1416. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1417. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1418. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1419. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1420. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1421. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1422. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1423. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1424. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1425. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1426. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1427. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1428. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1429. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1430. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1431. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1432. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1433. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1434. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1435. package/Tests/Runtime/Utils.meta +2 -2
  1436. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1437. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1438. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +153 -0
  1439. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1440. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1441. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1442. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +125 -0
  1443. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1444. package/Tests/Runtime/Visuals.meta +3 -0
  1445. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1446. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1447. package/Tests/Runtime.meta +8 -8
  1448. package/Tests.meta +8 -8
  1449. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1450. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1451. package/URP/VolumeProfiles.meta +8 -8
  1452. package/URP.meta +8 -8
  1453. package/node_modules.meta +8 -0
  1454. package/package-lock.json.meta +7 -0
  1455. package/package.json +99 -38
  1456. package/package.json.meta +7 -7
  1457. package/scripts/check-eol.ps1 +51 -0
  1458. package/scripts/check-eol.ps1.meta +7 -0
  1459. package/scripts/clean-nul.ps1 +29 -0
  1460. package/scripts/clean-nul.ps1.meta +7 -0
  1461. package/scripts/lint-doc-links.ps1 +80 -0
  1462. package/scripts/lint-doc-links.ps1.meta +7 -0
  1463. package/scripts/lint-tests.ps1 +156 -0
  1464. package/scripts/lint-tests.ps1.meta +7 -0
  1465. package/scripts/normalize-eol.ps1 +68 -0
  1466. package/scripts/normalize-eol.ps1.meta +7 -0
  1467. package/scripts.meta +8 -0
  1468. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1469. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1470. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1471. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1472. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1473. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1474. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1475. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1476. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1477. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1478. package/Runtime/Core/Math/Line.cs +0 -55
  1479. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1480. package/Runtime/Core/Math/XXHash.cs +0 -310
  1481. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1482. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1483. package/Tests/Runtime/Components.meta +0 -3
  1484. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1485. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1486. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1487. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1488. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1489. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1490. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1491. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1492. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1493. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1494. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1495. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1496. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1497. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1498. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1499. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1500. package/Third Party Notices.md +0 -1
@@ -1,874 +1,1570 @@
1
- namespace WallstopStudios.UnityHelpers.Editor
2
- {
3
- #if UNITY_EDITOR
4
- using System;
5
- using System.Collections.Generic;
6
- using System.Linq;
7
- using System.Reflection;
8
- using UnityEditor;
9
- using UnityEngine;
10
- using Core.Attributes;
11
- using Core.Helper;
12
- using WallstopStudios.UnityHelpers.Utils;
13
-
14
- // https://gist.githubusercontent.com/yujen/5e1cd78e2a341260b38029de08a449da/raw/ac60c1002e0e14375de5b2b0a167af00df3f74b4/SeniaAnimationEventEditor.cs
15
- public sealed class AnimationEventEditor : EditorWindow
16
- {
17
- private static readonly IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> TypesToMethods;
18
-
19
- static AnimationEventEditor()
20
- {
21
- Dictionary<Type, IReadOnlyList<MethodInfo>> typesToMethods = AppDomain
22
- .CurrentDomain.GetAssemblies()
23
- .SelectMany(assembly => assembly.GetTypes())
24
- .Where(type => type.IsClass)
25
- .Where(type => typeof(MonoBehaviour).IsAssignableFrom(type))
26
- .ToDictionary(
27
- type => type,
28
- type => (IReadOnlyList<MethodInfo>)type.GetPossibleAnimatorEventsForType()
29
- );
30
- foreach (KeyValuePair<Type, IReadOnlyList<MethodInfo>> entry in typesToMethods.ToList())
31
- {
32
- if (entry.Value.Count <= 0)
33
- {
34
- _ = typesToMethods.Remove(entry.Key);
35
- }
36
- }
37
-
38
- TypesToMethods = typesToMethods;
39
- }
40
-
41
- [MenuItem("Tools/Wallstop Studios/Unity Helpers/AnimationEvent Editor")]
42
- private static void AnimationEventEditorMenu()
43
- {
44
- GetWindow(typeof(AnimationEventEditor));
45
- }
46
-
47
- public class AnimationEventItem
48
- {
49
- public AnimationEventItem(AnimationEvent animationEvent)
50
- {
51
- this.animationEvent = animationEvent;
52
- search = string.Empty;
53
- }
54
-
55
- public Type selectedType;
56
- public MethodInfo selectedMethod;
57
- public string search;
58
- public AnimationEvent animationEvent;
59
- public Texture2D texture;
60
- public bool isTextureReadable;
61
- public bool isInvalidTextureRect;
62
- public Sprite sprite;
63
- public int? originalIndex;
64
- public bool overrideEnumValues;
65
- }
66
-
67
- private IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> Lookup =>
68
- _explicitMode ? AnimationEventHelpers.TypesToMethods : TypesToMethods;
69
-
70
- private int MaxFrameIndex =>
71
- _currentClip == null
72
- ? 0
73
- : (int)Math.Round(_currentClip.frameRate * _currentClip.length);
74
-
75
- private Vector2 _scrollPosition;
76
- private Animator _sourceAnimator;
77
- private AnimationClip _currentClip;
78
- private bool _explicitMode = true;
79
- private bool _controlFrameTime;
80
- private string _animationSearchString = string.Empty;
81
- private List<ObjectReferenceKeyframe> _referenceCurve;
82
-
83
- private readonly List<AnimationEvent> _baseClipEvents = new();
84
- private readonly List<AnimationEventItem> _state = new();
85
- private readonly Dictionary<AnimationEventItem, string> _lastSeenSearch = new();
86
-
87
- private readonly Dictionary<
88
- AnimationEventItem,
89
- IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>>
90
- > _lookups = new();
91
-
92
- private int _selectedFrameIndex = -1;
93
-
94
- private void OnGUI()
95
- {
96
- Animator tmpAnimator =
97
- EditorGUILayout.ObjectField(
98
- "Animator Object",
99
- _sourceAnimator,
100
- typeof(Animator),
101
- true
102
- ) as Animator;
103
- if (tmpAnimator == null)
104
- {
105
- _sourceAnimator = null;
106
- _state.Clear();
107
- return;
108
- }
109
-
110
- if (_sourceAnimator != tmpAnimator)
111
- {
112
- _sourceAnimator = tmpAnimator;
113
- _currentClip = null;
114
- }
115
-
116
- _explicitMode = EditorGUILayout.Toggle(
117
- new GUIContent(
118
- "Explicit Mode",
119
- "If true, restricts results to only those that explicitly with [AnimationEvent]"
120
- ),
121
- _explicitMode
122
- );
123
- _controlFrameTime = EditorGUILayout.Toggle(
124
- new GUIContent(
125
- "Control Frame Time",
126
- "Select to edit precise time of animation events instead of snapping to nearest frame"
127
- ),
128
- _controlFrameTime
129
- );
130
-
131
- AnimationClip selectedClip = DrawAndFilterAnimationClips();
132
- if (selectedClip == null)
133
- {
134
- return;
135
- }
136
-
137
- if (_currentClip != selectedClip)
138
- {
139
- _currentClip = selectedClip;
140
- RefreshAnimationEvents();
141
- }
142
-
143
- _selectedFrameIndex = EditorGUILayout.IntField("FrameIndex", _selectedFrameIndex);
144
-
145
- float frameRate = _currentClip.frameRate;
146
- float oldFrameRate = frameRate;
147
- if (GUILayout.Button("Add Event"))
148
- {
149
- if (0 <= _selectedFrameIndex)
150
- {
151
- _state.Add(
152
- new AnimationEventItem(
153
- new AnimationEvent { time = _selectedFrameIndex / frameRate }
154
- )
155
- );
156
- }
157
- }
158
-
159
- frameRate = _currentClip.frameRate = EditorGUILayout.FloatField("FrameRate", frameRate);
160
- DrawGuiLine(height: 5, color: new Color(0f, 0.5f, 1f, 1f));
161
- _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
162
-
163
- // Need a copy because we might be mutating it
164
- List<AnimationEventItem> stateCopy = _state.ToList();
165
- for (int i = 0; i < stateCopy.Count; ++i)
166
- {
167
- AnimationEventItem item = stateCopy[i];
168
- AnimationEvent animEvent = item.animationEvent;
169
-
170
- int frame = Mathf.RoundToInt(animEvent.time * oldFrameRate);
171
- EditorGUILayout.PrefixLabel("Frame " + frame);
172
-
173
- DrawSpritePreview(item);
174
-
175
- using (new EditorGUI.IndentLevelScope())
176
- {
177
- RenderAnimationEventItem(item, frame, frameRate);
178
- if (i != stateCopy.Count - 1)
179
- {
180
- DrawGuiLine(height: 3, color: new Color(0f, 1f, 0.3f, 1f));
181
- EditorGUILayout.Space();
182
- }
183
- }
184
- }
185
-
186
- EditorGUILayout.EndScrollView();
187
-
188
- DrawControlButtons();
189
- }
190
-
191
- private AnimationClip DrawAndFilterAnimationClips()
192
- {
193
- _animationSearchString = EditorGUILayout.TextField(
194
- "Animation Search",
195
- _animationSearchString
196
- );
197
- List<AnimationClip> animationClips =
198
- _sourceAnimator.runtimeAnimatorController.animationClips.ToList();
199
- int selectedIndex;
200
- if (string.IsNullOrEmpty(_animationSearchString) || _animationSearchString == "*")
201
- {
202
- selectedIndex = EditorGUILayout.Popup(
203
- "Animation",
204
- animationClips.IndexOf(_currentClip),
205
- animationClips.Select(clip => clip.name).ToArray()
206
- );
207
- }
208
- else
209
- {
210
- List<string> searchTerms = _animationSearchString
211
- .Split(" ")
212
- .Select(searchPart => searchPart.ToLowerInvariant().Trim())
213
- .Where(trimmed => !string.IsNullOrEmpty(trimmed) && trimmed != "*")
214
- .ToList();
215
-
216
- if (0 < searchTerms.Count)
217
- {
218
- foreach (AnimationClip animationClip in animationClips.ToList())
219
- {
220
- if (_currentClip == animationClip)
221
- {
222
- continue;
223
- }
224
-
225
- foreach (string searchTerm in searchTerms)
226
- {
227
- if (animationClip.name.ToLowerInvariant().Contains(searchTerm))
228
- {
229
- continue;
230
- }
231
-
232
- animationClips.Remove(animationClip);
233
- }
234
- }
235
- }
236
-
237
- selectedIndex = EditorGUILayout.Popup(
238
- "Animation",
239
- animationClips.IndexOf(_currentClip),
240
- animationClips.Select(clip => clip.name).ToArray()
241
- );
242
- }
243
-
244
- if (selectedIndex < 0)
245
- {
246
- _currentClip = null;
247
- RefreshAnimationEvents();
248
- return null;
249
- }
250
-
251
- return animationClips[selectedIndex];
252
- }
253
-
254
- private int AnimationEventComparison(AnimationEventItem lhs, AnimationEventItem rhs)
255
- {
256
- if (ReferenceEquals(lhs, rhs))
257
- {
258
- return 0;
259
- }
260
-
261
- if (ReferenceEquals(null, rhs))
262
- {
263
- return -1;
264
- }
265
-
266
- if (ReferenceEquals(null, lhs))
267
- {
268
- return 1;
269
- }
270
-
271
- return AnimationEventEqualityComparer.Instance.Compare(
272
- lhs.animationEvent,
273
- rhs.animationEvent
274
- );
275
- }
276
-
277
- private void DrawControlButtons()
278
- {
279
- if (
280
- _baseClipEvents.SequenceEqual(
281
- _state.Select(item => item.animationEvent),
282
- AnimationEventEqualityComparer.Instance
283
- )
284
- )
285
- {
286
- GUILayout.Label("No changes detected...");
287
- return;
288
- }
289
-
290
- Color oldColor = GUI.color;
291
- GUI.color = Color.green;
292
- if (GUILayout.Button("Save"))
293
- {
294
- SaveAnimation();
295
- }
296
-
297
- GUI.color = oldColor;
298
- if (GUILayout.Button("Reset"))
299
- {
300
- RefreshAnimationEvents();
301
- }
302
-
303
- if (
304
- !_state.SequenceEqual(
305
- _state.OrderBy(
306
- item => item.animationEvent,
307
- AnimationEventEqualityComparer.Instance
308
- )
309
- )
310
- )
311
- {
312
- if (GUILayout.Button("Re-Order"))
313
- {
314
- _state.Sort(AnimationEventComparison);
315
- }
316
- }
317
- }
318
-
319
- private void RenderAnimationEventItem(AnimationEventItem item, int frame, float frameRate)
320
- {
321
- int index = _state.IndexOf(item);
322
- using (new EditorGUILayout.HorizontalScope())
323
- {
324
- if (
325
- 1 <= index
326
- && Math.Abs(_state[index - 1].animationEvent.time - item.animationEvent.time)
327
- < 0.001f
328
- && GUILayout.Button("Move Up")
329
- )
330
- {
331
- _state.RemoveAt(index);
332
- _state.Insert(index - 1, item);
333
- }
334
-
335
- if (
336
- index < _state.Count - 1
337
- && Math.Abs(_state[index + 1].animationEvent.time - item.animationEvent.time)
338
- < 0.001f
339
- && GUILayout.Button("Move Down")
340
- )
341
- {
342
- _state.RemoveAt(index);
343
- _state.Insert(index + 1, item);
344
- }
345
-
346
- if (
347
- 0 <= index
348
- && index < _baseClipEvents.Count
349
- && !AnimationEventEqualityComparer.Instance.Equals(
350
- item.animationEvent,
351
- _baseClipEvents[index]
352
- )
353
- && GUILayout.Button("Reset")
354
- )
355
- {
356
- AnimationEventEqualityComparer.Instance.CopyInto(
357
- item.animationEvent,
358
- _baseClipEvents[index]
359
- );
360
- item.selectedType = null;
361
- item.selectedMethod = null;
362
- }
363
-
364
- if (GUILayout.Button($"Remove Event at frame {frame}"))
365
- {
366
- _state.Remove(item);
367
- return;
368
- }
369
- }
370
-
371
- IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup = FilterLookup(item);
372
-
373
- TryPopulateTypeAndMethod(item, lookup);
374
-
375
- List<Type> orderedTypes = lookup.Keys.OrderBy(type => type.FullName).Take(20).ToList();
376
- if (item.selectedType != null && !orderedTypes.Contains(item.selectedType))
377
- {
378
- orderedTypes.Add(item.selectedType);
379
- }
380
-
381
- string[] orderedTypeNames = orderedTypes.Select(type => type.FullName).ToArray();
382
-
383
- SelectFrameTime(item, frame, frameRate);
384
-
385
- SelectFunctionName(item);
386
-
387
- if (!SelectTypes(item, orderedTypes, orderedTypeNames))
388
- {
389
- return;
390
- }
391
-
392
- if (!SelectMethods(item, lookup))
393
- {
394
- return;
395
- }
396
-
397
- RenderEventParameters(item);
398
- }
399
-
400
- private void SelectFrameTime(AnimationEventItem item, int frame, float frameRate)
401
- {
402
- AnimationEvent animEvent = item.animationEvent;
403
- float previousTime = animEvent.time;
404
- if (_controlFrameTime)
405
- {
406
- float proposedFrameTime = EditorGUILayout.FloatField("FrameTime", animEvent.time);
407
- animEvent.time = Mathf.Clamp(proposedFrameTime, 0, _currentClip.length);
408
- }
409
- else
410
- {
411
- int proposedFrame = EditorGUILayout.IntField("FrameIndex", frame);
412
- animEvent.time = Mathf.Clamp(proposedFrame, 0, MaxFrameIndex) / frameRate;
413
- }
414
-
415
- // ReSharper disable once CompareOfFloatsByEqualityOperator
416
- if (previousTime != animEvent.time)
417
- {
418
- item.texture = null;
419
- }
420
- }
421
-
422
- private void SelectFunctionName(AnimationEventItem item)
423
- {
424
- AnimationEvent animEvent = item.animationEvent;
425
- animEvent.functionName = EditorGUILayout.TextField(
426
- "FunctionName",
427
- animEvent.functionName ?? string.Empty
428
- );
429
- if (!_explicitMode)
430
- {
431
- item.search = EditorGUILayout.TextField("Search", item.search);
432
- }
433
- }
434
-
435
- private void TryPopulateTypeAndMethod(
436
- AnimationEventItem item,
437
- IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
438
- )
439
- {
440
- if (item.selectedType != null)
441
- {
442
- return;
443
- }
444
-
445
- AnimationEvent animEvent = item.animationEvent;
446
- foreach (
447
- KeyValuePair<Type, IReadOnlyList<MethodInfo>> entry in lookup.OrderBy(kvp =>
448
- kvp.Key.FullName
449
- )
450
- )
451
- {
452
- foreach (MethodInfo method in entry.Value)
453
- {
454
- if (
455
- string.Equals(method.Name, animEvent.functionName, StringComparison.Ordinal)
456
- )
457
- {
458
- item.selectedType = entry.Key;
459
- item.selectedMethod = method;
460
- return;
461
- }
462
- }
463
- }
464
- }
465
-
466
- private bool SelectTypes(
467
- AnimationEventItem item,
468
- IList<Type> orderedTypes,
469
- string[] orderedTypeNames
470
- )
471
- {
472
- int existingIndex = orderedTypes.IndexOf(item.selectedType);
473
- int selectedTypeIndex = EditorGUILayout.Popup(
474
- "TypeName",
475
- existingIndex,
476
- orderedTypeNames
477
- );
478
- item.selectedType = selectedTypeIndex < 0 ? null : orderedTypes[selectedTypeIndex];
479
- if (existingIndex != selectedTypeIndex)
480
- {
481
- item.selectedMethod = null;
482
- }
483
-
484
- return item.selectedType != null;
485
- }
486
-
487
- private bool SelectMethods(
488
- AnimationEventItem item,
489
- IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
490
- )
491
- {
492
- AnimationEvent animEvent = item.animationEvent;
493
- if (!lookup.TryGetValue(item.selectedType, out IReadOnlyList<MethodInfo> methods))
494
- {
495
- methods = new List<MethodInfo>(0);
496
- }
497
-
498
- if (item.selectedMethod == null || !methods.Contains(item.selectedMethod))
499
- {
500
- foreach (MethodInfo method in methods)
501
- {
502
- if (
503
- string.Equals(method.Name, animEvent.functionName, StringComparison.Ordinal)
504
- )
505
- {
506
- item.selectedMethod = method;
507
- break;
508
- }
509
- }
510
-
511
- if (item.selectedMethod != null && !methods.Contains(item.selectedMethod))
512
- {
513
- methods = methods.Concat(Enumerables.Of(item.selectedMethod)).ToList();
514
- }
515
- }
516
-
517
- int selectedMethodIndex = EditorGUILayout.Popup(
518
- "MethodName",
519
- methods.ToList().IndexOf(item.selectedMethod),
520
- methods.Select(method => method.Name).ToArray()
521
- );
522
- if (0 <= selectedMethodIndex)
523
- {
524
- item.selectedMethod = methods[selectedMethodIndex];
525
- animEvent.functionName = item.selectedMethod.Name;
526
- return true;
527
- }
528
-
529
- return false;
530
- }
531
-
532
- private void RenderEventParameters(AnimationEventItem item)
533
- {
534
- AnimationEvent animEvent = item.animationEvent;
535
- ParameterInfo[] arrayParameterInfo = item.selectedMethod.GetParameters();
536
- if (arrayParameterInfo.Length == 1)
537
- {
538
- using EditorGUI.IndentLevelScope indent = new();
539
-
540
- Type paramType = arrayParameterInfo[0].ParameterType;
541
- if (paramType == typeof(int))
542
- {
543
- animEvent.intParameter = EditorGUILayout.IntField(
544
- "IntParameter",
545
- animEvent.intParameter
546
- );
547
- }
548
- else if (paramType.BaseType == typeof(Enum))
549
- {
550
- string[] enumNamesArray = Enum.GetNames(paramType);
551
- List<string> enumNames = enumNamesArray.ToList();
552
- string enumName = Enum.GetName(paramType, animEvent.intParameter);
553
-
554
- int index = EditorGUILayout.Popup(
555
- $"{paramType.Name}",
556
- enumNames.IndexOf(enumName),
557
- enumNamesArray
558
- );
559
- if (0 <= index)
560
- {
561
- animEvent.intParameter = (int)Enum.Parse(paramType, enumNames[index]);
562
- }
563
-
564
- item.overrideEnumValues = EditorGUILayout.Toggle(
565
- "Override",
566
- item.overrideEnumValues
567
- );
568
- if (item.overrideEnumValues)
569
- {
570
- animEvent.intParameter = EditorGUILayout.IntField(
571
- "IntParameter",
572
- animEvent.intParameter
573
- );
574
- }
575
- }
576
- else if (paramType == typeof(float))
577
- {
578
- animEvent.floatParameter = EditorGUILayout.FloatField(
579
- "FloatParameter",
580
- animEvent.floatParameter
581
- );
582
- }
583
- else if (paramType == typeof(string))
584
- {
585
- animEvent.stringParameter = EditorGUILayout.TextField(
586
- "StringParameter",
587
- animEvent.stringParameter
588
- );
589
- }
590
- else if (paramType == typeof(UnityEngine.Object))
591
- {
592
- animEvent.objectReferenceParameter = EditorGUILayout.ObjectField(
593
- "ObjectReferenceParameter",
594
- animEvent.objectReferenceParameter,
595
- typeof(UnityEngine.Object),
596
- true
597
- );
598
- }
599
- }
600
- }
601
-
602
- private IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> FilterLookup(
603
- AnimationEventItem item
604
- )
605
- {
606
- IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup;
607
- if (!_explicitMode)
608
- {
609
- if (
610
- !_lastSeenSearch.TryGetValue(item, out string lastSearch)
611
- || !string.Equals(
612
- lastSearch,
613
- item.search,
614
- StringComparison.InvariantCultureIgnoreCase
615
- )
616
- || !_lookups.TryGetValue(item, out lookup)
617
- )
618
- {
619
- Dictionary<Type, List<MethodInfo>> filtered = Lookup.ToDictionary(
620
- kvp => kvp.Key,
621
- kvp => kvp.Value.ToList()
622
- );
623
- List<string> searchTerms = item
624
- .search.Split(" ")
625
- .Select(searchTerm => searchTerm.Trim().ToLowerInvariant())
626
- .Where(trimmed => !string.IsNullOrEmpty(trimmed) && trimmed != "*")
627
- .ToList();
628
-
629
- if (0 < searchTerms.Count)
630
- {
631
- foreach (KeyValuePair<Type, List<MethodInfo>> entry in filtered.ToList())
632
- {
633
- foreach (string searchTerm in searchTerms)
634
- {
635
- if (entry.Key.FullName.ToLowerInvariant().Contains(searchTerm))
636
- {
637
- continue;
638
- }
639
-
640
- if (
641
- entry.Value.Any(methodInfo =>
642
- methodInfo.Name.ToLowerInvariant().Contains(searchTerm)
643
- )
644
- )
645
- {
646
- continue;
647
- }
648
-
649
- _ = filtered.Remove(entry.Key);
650
- break;
651
- }
652
- }
653
- }
654
-
655
- _lookups[item] = lookup = filtered.ToDictionary(
656
- kvp => kvp.Key,
657
- kvp => (IReadOnlyList<MethodInfo>)kvp.Value
658
- );
659
- _lastSeenSearch[item] = item.search;
660
- }
661
- }
662
- else
663
- {
664
- lookup = Lookup;
665
- }
666
-
667
- return lookup;
668
- }
669
-
670
- private void DrawSpritePreview(AnimationEventItem item)
671
- {
672
- SetupPreviewData(item);
673
-
674
- string spriteName = item.sprite == null ? string.Empty : item.sprite.name;
675
- if (item.texture != null)
676
- {
677
- GUILayout.Label(item.texture);
678
- }
679
- else if (!item.isTextureReadable && !string.IsNullOrEmpty(spriteName))
680
- {
681
- using (new EditorGUILayout.HorizontalScope())
682
- {
683
- GUILayout.Label($"Sprite '{spriteName}' required \"Read/Write\" enabled");
684
- if (item.sprite != null && GUILayout.Button("Fix"))
685
- {
686
- string assetPath = AssetDatabase.GetAssetPath(item.sprite.texture);
687
- if (string.IsNullOrEmpty(assetPath))
688
- {
689
- return;
690
- }
691
-
692
- TextureImporter tImporter =
693
- AssetImporter.GetAtPath(assetPath) as TextureImporter;
694
- if (tImporter == null)
695
- {
696
- return;
697
- }
698
-
699
- tImporter.isReadable = true;
700
- EditorUtility.SetDirty(tImporter);
701
- tImporter.SaveAndReimport();
702
- EditorUtility.SetDirty(item.sprite);
703
- }
704
- }
705
- }
706
- else if (item.isInvalidTextureRect && !string.IsNullOrEmpty(spriteName))
707
- {
708
- GUILayout.Label($"Sprite '{spriteName}' is packed too tightly inside its texture");
709
- }
710
- }
711
-
712
- private void SetupPreviewData(AnimationEventItem item)
713
- {
714
- if (item.texture != null)
715
- {
716
- return;
717
- }
718
-
719
- if (TryFindSpriteForEvent(item, out Sprite currentSprite))
720
- {
721
- item.sprite = currentSprite;
722
- item.isTextureReadable = currentSprite.texture.isReadable;
723
- item.isInvalidTextureRect = false;
724
- if (item.isTextureReadable)
725
- {
726
- Rect? maybeTextureRect = null;
727
- try
728
- {
729
- maybeTextureRect = currentSprite.textureRect;
730
- }
731
- catch
732
- {
733
- item.isInvalidTextureRect = true;
734
- }
735
-
736
- if (maybeTextureRect != null)
737
- {
738
- Rect textureRect = maybeTextureRect.Value;
739
- item.texture = CopyTexture(textureRect, currentSprite.texture);
740
- }
741
- }
742
- }
743
- else
744
- {
745
- item.sprite = null;
746
- item.isTextureReadable = false;
747
- }
748
- }
749
-
750
- private bool TryFindSpriteForEvent(AnimationEventItem item, out Sprite sprite)
751
- {
752
- sprite = null;
753
- foreach (
754
- ObjectReferenceKeyframe keyFrame in _referenceCurve
755
- ?? Enumerable.Empty<ObjectReferenceKeyframe>()
756
- )
757
- {
758
- if (keyFrame.time <= item.animationEvent.time)
759
- {
760
- Sprite frameSprite = keyFrame.value as Sprite;
761
- if (frameSprite == null)
762
- {
763
- continue;
764
- }
765
-
766
- sprite = frameSprite;
767
- continue;
768
- }
769
-
770
- return sprite != null;
771
- }
772
-
773
- return sprite != null;
774
- }
775
-
776
- private Texture2D CopyTexture(Rect textureRect, Texture2D sourceTexture)
777
- {
778
- int width = (int)Math.Ceiling(textureRect.width);
779
- int height = (int)Math.Ceiling(textureRect.height);
780
- Texture2D texture = new(width, height)
781
- {
782
- wrapMode = TextureWrapMode.Clamp,
783
- filterMode = FilterMode.Point,
784
- };
785
- Vector2 offset = textureRect.position;
786
- int offsetX = (int)Math.Ceiling(offset.x);
787
- int offsetY = (int)Math.Ceiling(offset.y);
788
- for (int x = 0; x < width; ++x)
789
- {
790
- for (int y = 0; y < height; ++y)
791
- {
792
- Color sourcePixel = sourceTexture.GetPixel(offsetX + x, offsetY + y);
793
- texture.SetPixel(x, y, sourcePixel);
794
- }
795
- }
796
-
797
- texture.Apply();
798
- return texture;
799
- }
800
-
801
- private void RefreshAnimationEvents()
802
- {
803
- _state.Clear();
804
- _baseClipEvents.Clear();
805
- _lookups.Clear();
806
- _lastSeenSearch.Clear();
807
- if (_currentClip == null)
808
- {
809
- return;
810
- }
811
-
812
- for (int i = 0; i < _currentClip.events.Length; i++)
813
- {
814
- AnimationEvent animEvent = _currentClip.events[i];
815
- _state.Add(new AnimationEventItem(animEvent) { originalIndex = i });
816
- _baseClipEvents.Add(AnimationEventEqualityComparer.Instance.Copy(animEvent));
817
- }
818
-
819
- _selectedFrameIndex = MaxFrameIndex;
820
- _referenceCurve = AnimationUtility
821
- .GetObjectReferenceCurve(
822
- _currentClip,
823
- EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite")
824
- )
825
- .ToList();
826
- _referenceCurve.Sort(
827
- (lhs, rhs) =>
828
- {
829
- int comparison = lhs.time.CompareTo(rhs.time);
830
- if (comparison != 0)
831
- {
832
- return comparison;
833
- }
834
-
835
- string lhsName =
836
- lhs.value == null ? string.Empty : lhs.value.name ?? string.Empty;
837
- string rhsName =
838
- rhs.value == null ? string.Empty : rhs.value.name ?? string.Empty;
839
- return string.Compare(lhsName, rhsName, StringComparison.OrdinalIgnoreCase);
840
- }
841
- );
842
- }
843
-
844
- private void SaveAnimation()
845
- {
846
- if (_currentClip != null)
847
- {
848
- AnimationUtility.SetAnimationEvents(
849
- _currentClip,
850
- _state.Select(item => item.animationEvent).ToArray()
851
- );
852
- EditorUtility.SetDirty(_currentClip);
853
- AssetDatabase.SaveAssetIfDirty(_currentClip);
854
- _baseClipEvents.Clear();
855
- foreach (AnimationEventItem item in _state)
856
- {
857
- _baseClipEvents.Add(
858
- AnimationEventEqualityComparer.Instance.Copy(item.animationEvent)
859
- );
860
- }
861
- }
862
- }
863
-
864
- private void DrawGuiLine(int height = 1, Color? color = null)
865
- {
866
- Rect rect = EditorGUILayout.GetControlRect(false, height);
867
- rect.height = height;
868
- int minusWidth = EditorGUI.indentLevel * 16;
869
- rect.xMin += minusWidth;
870
- EditorGUI.DrawRect(rect, color ?? new Color(0.5f, 0.5f, 0.5f, 1f));
871
- }
872
- }
873
- #endif
874
- }
1
+ namespace WallstopStudios.UnityHelpers.Editor
2
+ {
3
+ #if UNITY_EDITOR
4
+ using System;
5
+ using System.Collections.Generic;
6
+ using System.Reflection;
7
+ using UnityEditor;
8
+ using UnityEngine;
9
+ using WallstopStudios.UnityHelpers.Editor.Core.Helper;
10
+ using WallstopStudios.UnityHelpers.Utils;
11
+
12
+ // https://gist.githubusercontent.com/yujen/5e1cd78e2a341260b38029de08a449da/raw/ac60c1002e0e14375de5b2b0a167af00df3f74b4/SeniaAnimationEventEditor.cs
13
+ /// <summary>
14
+ /// Interactive editor window for inspecting, creating, editing, validating, and reordering
15
+ /// <see cref="AnimationEvent"/> entries on an <see cref="AnimationClip"/>.
16
+ /// </summary>
17
+ /// <remarks>
18
+ /// <para>
19
+ /// Problems this solves:
20
+ /// </para>
21
+ /// <para>
22
+ /// - Discoverability: Quickly lists all methods on <see cref="MonoBehaviour"/>s that are valid
23
+ /// animation event handlers. In Explicit Mode, only methods decorated with
24
+ /// <c>[AnimationEvent]</c> are shown, keeping choices intentional and type-safe.
25
+ /// </para>
26
+ /// <para>
27
+ /// - Efficiency: Add, duplicate, re-order, and bulk edit events with frame snapping, optional
28
+ /// precise time control, keyboard shortcuts, and sprite previews for quick visual context.
29
+ /// </para>
30
+ /// <para>
31
+ /// - Safety: Validates method existence, parameter compatibility, and warns for mismatches.
32
+ /// </para>
33
+ /// <para>
34
+ /// How it works:
35
+ /// </para>
36
+ /// <para>
37
+ /// - Uses <see cref="UnityEditor.TypeCache"/> to scan <see cref="MonoBehaviour"/> types and find
38
+ /// viable event handlers via <see cref="AnimationEventHelpers"/>. In
39
+ /// Explicit Mode, only methods with <c>[AnimationEvent]</c> are included; it respects
40
+ /// <c>ignoreDerived</c> to limit inherited exposure.
41
+ /// </para>
42
+ /// <para>
43
+ /// - Presents a searchable clip list from the current Animator, then renders each event with
44
+ /// method/type selection and parameter editors matching the selected signature.
45
+ /// </para>
46
+ /// <para>
47
+ /// - Supports keyboard shortcuts: Delete (remove), Ctrl+D (duplicate), Up/Down (navigate).
48
+ /// </para>
49
+ /// <para>
50
+ /// Usage scenarios:
51
+ /// </para>
52
+ /// <list type="bullet">
53
+ /// <item>
54
+ /// <description>Authoring complex 2D/3D animation behaviors with strongly-typed methods.</description>
55
+ /// </item>
56
+ /// <item>
57
+ /// <description>Retrofitting existing clips with validated events and consistent frame timing.</description>
58
+ /// </item>
59
+ /// <item>
60
+ /// <description>Bulk reviewing events across clips to catch missing handlers.</description>
61
+ /// </item>
62
+ /// </list>
63
+ /// <para>
64
+ /// Pros:
65
+ /// </para>
66
+ /// <list type="bullet">
67
+ /// <item><description>Fast discovery of valid methods and signatures.</description></item>
68
+ /// <item><description>Explicit Mode reduces accidental misuse.</description></item>
69
+ /// <item><description>Sprite previews aid visual alignment.</description></item>
70
+ /// </list>
71
+ /// <para>
72
+ /// Cons / Caveats:
73
+ /// </para>
74
+ /// <list type="bullet">
75
+ /// <item><description>Only scans assemblies available to the editor domain.</description></item>
76
+ /// <item><description>Methods must have void return and a supported single parameter or none.</description></item>
77
+ /// <item><description>Changing frame rate affects timing; save to persist.</description></item>
78
+ /// </list>
79
+ /// <example>
80
+ /// <![CDATA[
81
+ /// using WallstopStudios.UnityHelpers.Core.Attributes;
82
+ /// using UnityEngine;
83
+ ///
84
+ /// public class EnemyEvents : MonoBehaviour
85
+ /// {
86
+ /// [AnimationEvent] // Will show in Explicit Mode
87
+ /// private void Footstep() { /* play SFX */ }
88
+ ///
89
+ /// [AnimationEvent(ignoreDerived: true)]
90
+ /// private void AttackFrame(int damageFrame) { /* trigger damage */ }
91
+ ///
92
+ /// // Supported signatures: (), (int), (float), (string), (Enum), (UnityEngine.Object)
93
+ /// }
94
+ ///
95
+ /// // Open from menu: Tools/Wallstop Studios/Unity Helpers/AnimationEvent Editor
96
+ /// // Or from code:
97
+ /// UnityEditor.EditorWindow.GetWindow<WallstopStudios.UnityHelpers.Editor.AnimationEventEditor>();
98
+ /// ]]>
99
+ /// </example>
100
+ public sealed class AnimationEventEditor : EditorWindow
101
+ {
102
+ private static IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> _cachedTypesToMethods;
103
+
104
+ private static IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> TypesToMethods
105
+ {
106
+ get
107
+ {
108
+ if (_cachedTypesToMethods == null)
109
+ {
110
+ InitializeTypeCache();
111
+ }
112
+ return _cachedTypesToMethods;
113
+ }
114
+ }
115
+
116
+ private static void InitializeTypeCache()
117
+ {
118
+ Dictionary<Type, IReadOnlyList<MethodInfo>> typesToMethods = new();
119
+ IEnumerable<Type> types =
120
+ WallstopStudios.UnityHelpers.Core.Helper.ReflectionHelpers.GetTypesDerivedFrom<MonoBehaviour>(
121
+ includeAbstract: false
122
+ );
123
+ foreach (Type type in types)
124
+ {
125
+ if (type == null)
126
+ {
127
+ continue;
128
+ }
129
+ List<MethodInfo> methods = AnimationEventHelpers.GetPossibleAnimatorEventsForType(
130
+ type
131
+ );
132
+ if (methods != null && methods.Count > 0)
133
+ {
134
+ typesToMethods[type] = methods;
135
+ }
136
+ }
137
+
138
+ using (
139
+ Buffers<KeyValuePair<Type, IReadOnlyList<MethodInfo>>>.List.Get(
140
+ out List<KeyValuePair<Type, IReadOnlyList<MethodInfo>>> snapshot
141
+ )
142
+ )
143
+ {
144
+ foreach (KeyValuePair<Type, IReadOnlyList<MethodInfo>> kvp in typesToMethods)
145
+ {
146
+ snapshot.Add(kvp);
147
+ }
148
+ for (int i = 0; i < snapshot.Count; i++)
149
+ {
150
+ KeyValuePair<Type, IReadOnlyList<MethodInfo>> entry = snapshot[i];
151
+ if (entry.Value == null || entry.Value.Count <= 0)
152
+ {
153
+ _ = typesToMethods.Remove(entry.Key);
154
+ }
155
+ }
156
+ }
157
+
158
+ _cachedTypesToMethods = typesToMethods;
159
+ }
160
+
161
+ [MenuItem("Tools/Wallstop Studios/Unity Helpers/AnimationEvent Editor")]
162
+ private static void AnimationEventEditorMenu()
163
+ {
164
+ GetWindow(typeof(AnimationEventEditor));
165
+ }
166
+
167
+ public class AnimationEventItem
168
+ {
169
+ public AnimationEventItem(AnimationEvent animationEvent)
170
+ {
171
+ this.animationEvent = animationEvent;
172
+ search = string.Empty;
173
+ typeSearch = string.Empty;
174
+ }
175
+
176
+ public Type selectedType;
177
+ public MethodInfo selectedMethod;
178
+ public string search;
179
+ public string typeSearch;
180
+ public readonly AnimationEvent animationEvent;
181
+ public Texture2D texture;
182
+ public bool isTextureReadable;
183
+ public bool isInvalidTextureRect;
184
+ public Sprite sprite;
185
+ public int? originalIndex;
186
+ public bool overrideEnumValues;
187
+ public bool isValid = true;
188
+ public string validationMessage = string.Empty;
189
+
190
+ // Cache for filtered lookup
191
+ public IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> cachedLookup;
192
+ public string lastSearchForCache;
193
+ }
194
+
195
+ private IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> Lookup =>
196
+ _explicitMode ? AnimationEventHelpers.TypesToMethods : TypesToMethods;
197
+
198
+ private int MaxFrameIndex =>
199
+ _currentClip == null
200
+ ? 0
201
+ : (int)Math.Round(_currentClip.frameRate * _currentClip.length);
202
+
203
+ private Vector2 _scrollPosition;
204
+ private Animator _sourceAnimator;
205
+ private AnimationClip _currentClip;
206
+ private bool _explicitMode = true;
207
+ private bool _controlFrameTime;
208
+ private string _animationSearchString = string.Empty;
209
+ private List<ObjectReferenceKeyframe> _referenceCurve;
210
+
211
+ // Cached frame rate to detect changes
212
+ private float _cachedFrameRate;
213
+ private bool _frameRateChanged;
214
+
215
+ private readonly List<AnimationEvent> _baseClipEvents = new();
216
+ private readonly List<AnimationEventItem> _state = new();
217
+
218
+ // Cache for sprite previews
219
+ private readonly Dictionary<Sprite, Texture2D> _spriteTextureCache = new();
220
+
221
+ // Cache for filtered animation clips
222
+ private List<AnimationClip> _filteredClips;
223
+ private string _lastAnimationSearch;
224
+
225
+ private int _selectedFrameIndex = -1;
226
+
227
+ // Keyboard shortcut state
228
+ private int _focusedEventIndex = -1;
229
+
230
+ private void OnGUI()
231
+ {
232
+ HandleKeyboardShortcuts();
233
+
234
+ Animator tmpAnimator =
235
+ EditorGUILayout.ObjectField(
236
+ "Animator Object",
237
+ _sourceAnimator,
238
+ typeof(Animator),
239
+ true
240
+ ) as Animator;
241
+ if (tmpAnimator == null)
242
+ {
243
+ _sourceAnimator = null;
244
+ _state.Clear();
245
+ return;
246
+ }
247
+
248
+ if (_sourceAnimator != tmpAnimator)
249
+ {
250
+ _sourceAnimator = tmpAnimator;
251
+ _currentClip = null;
252
+ }
253
+
254
+ _explicitMode = EditorGUILayout.Toggle(
255
+ new GUIContent(
256
+ "Explicit Mode",
257
+ "If true, restricts results to only those that explicitly with [AnimationEvent]"
258
+ ),
259
+ _explicitMode
260
+ );
261
+ _controlFrameTime = EditorGUILayout.Toggle(
262
+ new GUIContent(
263
+ "Control Frame Time",
264
+ "Select to edit precise time of animation events instead of snapping to nearest frame"
265
+ ),
266
+ _controlFrameTime
267
+ );
268
+
269
+ AnimationClip selectedClip = DrawAndFilterAnimationClips();
270
+ if (selectedClip == null)
271
+ {
272
+ return;
273
+ }
274
+
275
+ if (_currentClip != selectedClip)
276
+ {
277
+ _currentClip = selectedClip;
278
+ _cachedFrameRate = _currentClip.frameRate;
279
+ RefreshAnimationEvents();
280
+ }
281
+
282
+ _selectedFrameIndex = EditorGUILayout.IntField("FrameIndex", _selectedFrameIndex);
283
+
284
+ using (new EditorGUILayout.HorizontalScope())
285
+ {
286
+ if (GUILayout.Button("Add Event"))
287
+ {
288
+ if (0 <= _selectedFrameIndex)
289
+ {
290
+ AddNewEvent(_selectedFrameIndex / _cachedFrameRate);
291
+ }
292
+ }
293
+
294
+ if (GUILayout.Button("Add Event at Time 0"))
295
+ {
296
+ AddNewEvent(0f);
297
+ }
298
+ }
299
+
300
+ // Frame rate with change detection and undo support
301
+ EditorGUI.BeginChangeCheck();
302
+ float newFrameRate = EditorGUILayout.FloatField("FrameRate", _cachedFrameRate);
303
+ if (EditorGUI.EndChangeCheck())
304
+ {
305
+ _frameRateChanged = true;
306
+ _cachedFrameRate = newFrameRate;
307
+ }
308
+
309
+ if (_frameRateChanged)
310
+ {
311
+ EditorGUILayout.HelpBox(
312
+ "Frame rate will be saved when you click 'Save'. Click 'Reset' to revert.",
313
+ MessageType.Info
314
+ );
315
+ }
316
+
317
+ DrawGuiLine(height: 5, color: new Color(0f, 0.5f, 1f, 1f));
318
+ _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
319
+
320
+ // Use cached list to avoid allocations
321
+ int stateCount = _state.Count;
322
+ for (int i = 0; i < stateCount; ++i)
323
+ {
324
+ AnimationEventItem item = _state[i];
325
+ AnimationEvent animEvent = item.animationEvent;
326
+
327
+ int frame = Mathf.RoundToInt(animEvent.time * _cachedFrameRate);
328
+
329
+ // Highlight focused event
330
+ Color oldBgColor = GUI.backgroundColor;
331
+ if (i == _focusedEventIndex)
332
+ {
333
+ GUI.backgroundColor = new Color(0.3f, 0.6f, 1f, 0.3f);
334
+ }
335
+
336
+ EditorGUILayout.BeginVertical(EditorStyles.helpBox);
337
+ GUI.backgroundColor = oldBgColor;
338
+
339
+ EditorGUILayout.PrefixLabel("Frame " + frame);
340
+
341
+ DrawSpritePreview(item);
342
+
343
+ using (new EditorGUI.IndentLevelScope())
344
+ {
345
+ RenderAnimationEventItem(item, frame, i);
346
+ if (i != stateCount - 1)
347
+ {
348
+ DrawGuiLine(height: 3, color: new Color(0f, 1f, 0.3f, 1f));
349
+ EditorGUILayout.Space();
350
+ }
351
+ }
352
+
353
+ EditorGUILayout.EndVertical();
354
+ }
355
+
356
+ EditorGUILayout.EndScrollView();
357
+
358
+ DrawControlButtons();
359
+
360
+ // Show keyboard shortcuts help
361
+ EditorGUILayout.Space();
362
+ EditorGUILayout.LabelField(
363
+ "Shortcuts: Delete (remove event), Ctrl+D (duplicate), Up/Down (navigate)",
364
+ EditorStyles.miniLabel
365
+ );
366
+ }
367
+
368
+ private void HandleKeyboardShortcuts()
369
+ {
370
+ Event e = Event.current;
371
+ if (e.type != EventType.KeyDown)
372
+ {
373
+ return;
374
+ }
375
+
376
+ if (_state.Count == 0)
377
+ {
378
+ return;
379
+ }
380
+
381
+ // Ensure focused index is valid
382
+ if (_focusedEventIndex < 0 || _focusedEventIndex >= _state.Count)
383
+ {
384
+ _focusedEventIndex = 0;
385
+ }
386
+
387
+ switch (e.keyCode)
388
+ {
389
+ case KeyCode.Delete:
390
+ if (_focusedEventIndex >= 0 && _focusedEventIndex < _state.Count)
391
+ {
392
+ RecordUndo("Delete Animation Event");
393
+ _state.RemoveAt(_focusedEventIndex);
394
+ _focusedEventIndex = Mathf.Clamp(_focusedEventIndex, 0, _state.Count - 1);
395
+ e.Use();
396
+ Repaint();
397
+ }
398
+ break;
399
+
400
+ case KeyCode.D:
401
+ if (e.control && _focusedEventIndex >= 0 && _focusedEventIndex < _state.Count)
402
+ {
403
+ RecordUndo("Duplicate Animation Event");
404
+ AnimationEventItem original = _state[_focusedEventIndex];
405
+ AnimationEvent duplicated = AnimationEventEqualityComparer.Instance.Copy(
406
+ original.animationEvent
407
+ );
408
+ _state.Insert(_focusedEventIndex + 1, new AnimationEventItem(duplicated));
409
+ _focusedEventIndex++;
410
+ e.Use();
411
+ Repaint();
412
+ }
413
+ break;
414
+
415
+ case KeyCode.UpArrow:
416
+ _focusedEventIndex = Mathf.Max(0, _focusedEventIndex - 1);
417
+ e.Use();
418
+ Repaint();
419
+ break;
420
+
421
+ case KeyCode.DownArrow:
422
+ _focusedEventIndex = Mathf.Min(_state.Count - 1, _focusedEventIndex + 1);
423
+ e.Use();
424
+ Repaint();
425
+ break;
426
+ }
427
+ }
428
+
429
+ private void AddNewEvent(float time)
430
+ {
431
+ RecordUndo("Add Animation Event");
432
+ _state.Add(new AnimationEventItem(new AnimationEvent { time = time }));
433
+ }
434
+
435
+ private AnimationClip DrawAndFilterAnimationClips()
436
+ {
437
+ EditorGUI.BeginChangeCheck();
438
+ _animationSearchString = EditorGUILayout.TextField(
439
+ "Animation Search",
440
+ _animationSearchString
441
+ );
442
+ bool searchChanged = EditorGUI.EndChangeCheck();
443
+
444
+ // Cache filtered clips
445
+ if (
446
+ _filteredClips == null
447
+ || searchChanged
448
+ || _lastAnimationSearch != _animationSearchString
449
+ )
450
+ {
451
+ AnimationClip[] clips = _sourceAnimator.runtimeAnimatorController.animationClips;
452
+ _filteredClips = FilterAnimationClips(clips);
453
+ _lastAnimationSearch = _animationSearchString;
454
+ }
455
+
456
+ int curIndex = _filteredClips.IndexOf(_currentClip);
457
+ string[] names = new string[_filteredClips.Count];
458
+ for (int i = 0; i < _filteredClips.Count; i++)
459
+ {
460
+ names[i] = _filteredClips[i] != null ? _filteredClips[i].name : string.Empty;
461
+ }
462
+ int selectedIndex = EditorGUILayout.Popup("Animation", curIndex, names);
463
+
464
+ if (selectedIndex < 0)
465
+ {
466
+ _currentClip = null;
467
+ RefreshAnimationEvents();
468
+ return null;
469
+ }
470
+
471
+ return _filteredClips[selectedIndex];
472
+ }
473
+
474
+ private List<AnimationClip> FilterAnimationClips(AnimationClip[] clips)
475
+ {
476
+ if (
477
+ string.IsNullOrEmpty(_animationSearchString)
478
+ || string.Equals(_animationSearchString, "*", StringComparison.Ordinal)
479
+ )
480
+ {
481
+ return new List<AnimationClip>(clips);
482
+ }
483
+ string[] parts = _animationSearchString.Split(' ');
484
+ using (Buffers<string>.List.Get(out List<string> searchTerms))
485
+ {
486
+ for (int i = 0; i < parts.Length; i++)
487
+ {
488
+ string s = parts[i];
489
+ if (string.IsNullOrEmpty(s))
490
+ {
491
+ continue;
492
+ }
493
+ s = s.Trim();
494
+ if (s.Length == 0 || s == "*")
495
+ {
496
+ continue;
497
+ }
498
+ s = s.ToLowerInvariant();
499
+ searchTerms.Add(s);
500
+ }
501
+
502
+ if (searchTerms.Count == 0)
503
+ {
504
+ return new List<AnimationClip>(clips);
505
+ }
506
+
507
+ List<AnimationClip> filtered = new();
508
+ for (int ci = 0; ci < clips.Length; ci++)
509
+ {
510
+ AnimationClip clip = clips[ci];
511
+ if (clip == null)
512
+ {
513
+ continue;
514
+ }
515
+ bool matches = true;
516
+ string nameLower =
517
+ clip.name != null ? clip.name.ToLowerInvariant() : string.Empty;
518
+ for (int si = 0; si < searchTerms.Count; si++)
519
+ {
520
+ if (nameLower.IndexOf(searchTerms[si], StringComparison.Ordinal) < 0)
521
+ {
522
+ matches = false;
523
+ break;
524
+ }
525
+ }
526
+
527
+ if (matches || clip == _currentClip)
528
+ {
529
+ filtered.Add(clip);
530
+ }
531
+ }
532
+
533
+ return filtered;
534
+ }
535
+ }
536
+
537
+ private int AnimationEventComparison(AnimationEventItem lhs, AnimationEventItem rhs)
538
+ {
539
+ if (ReferenceEquals(lhs, rhs))
540
+ {
541
+ return 0;
542
+ }
543
+
544
+ if (ReferenceEquals(null, rhs))
545
+ {
546
+ return -1;
547
+ }
548
+
549
+ if (ReferenceEquals(null, lhs))
550
+ {
551
+ return 1;
552
+ }
553
+
554
+ return AnimationEventEqualityComparer.Instance.Compare(
555
+ lhs.animationEvent,
556
+ rhs.animationEvent
557
+ );
558
+ }
559
+
560
+ private void DrawControlButtons()
561
+ {
562
+ bool equalLists = false;
563
+ if (_baseClipEvents.Count == _state.Count)
564
+ {
565
+ equalLists = true;
566
+ for (int i = 0; i < _baseClipEvents.Count; i++)
567
+ {
568
+ if (
569
+ !AnimationEventEqualityComparer.Instance.Equals(
570
+ _baseClipEvents[i],
571
+ _state[i].animationEvent
572
+ )
573
+ )
574
+ {
575
+ equalLists = false;
576
+ break;
577
+ }
578
+ }
579
+ }
580
+ if (equalLists && !_frameRateChanged)
581
+ {
582
+ GUILayout.Label("No changes detected...");
583
+ return;
584
+ }
585
+
586
+ Color oldColor = GUI.color;
587
+ GUI.color = Color.green;
588
+ if (GUILayout.Button("Save"))
589
+ {
590
+ SaveAnimation();
591
+ }
592
+
593
+ GUI.color = oldColor;
594
+ if (GUILayout.Button("Reset"))
595
+ {
596
+ RefreshAnimationEvents();
597
+ }
598
+
599
+ bool outOfOrder = false;
600
+ for (int i = 1; i < _state.Count; i++)
601
+ {
602
+ if (
603
+ AnimationEventEqualityComparer.Instance.Compare(
604
+ _state[i - 1].animationEvent,
605
+ _state[i].animationEvent
606
+ ) > 0
607
+ )
608
+ {
609
+ outOfOrder = true;
610
+ break;
611
+ }
612
+ }
613
+ if (outOfOrder)
614
+ {
615
+ if (GUILayout.Button("Re-Order"))
616
+ {
617
+ RecordUndo("Re-order Animation Events");
618
+ _state.Sort(AnimationEventComparison);
619
+ }
620
+ }
621
+ }
622
+
623
+ private void RenderAnimationEventItem(AnimationEventItem item, int frame, int itemIndex)
624
+ {
625
+ int index = itemIndex;
626
+ using (new EditorGUILayout.HorizontalScope())
627
+ {
628
+ if (
629
+ 1 <= index
630
+ && Math.Abs(_state[index - 1].animationEvent.time - item.animationEvent.time)
631
+ < 0.001f
632
+ && GUILayout.Button("Move Up")
633
+ )
634
+ {
635
+ RecordUndo("Move Animation Event Up");
636
+ _state.RemoveAt(index);
637
+ _state.Insert(index - 1, item);
638
+ _focusedEventIndex = index - 1;
639
+ }
640
+
641
+ if (
642
+ index < _state.Count - 1
643
+ && Math.Abs(_state[index + 1].animationEvent.time - item.animationEvent.time)
644
+ < 0.001f
645
+ && GUILayout.Button("Move Down")
646
+ )
647
+ {
648
+ RecordUndo("Move Animation Event Down");
649
+ _state.RemoveAt(index);
650
+ _state.Insert(index + 1, item);
651
+ _focusedEventIndex = index + 1;
652
+ }
653
+
654
+ if (
655
+ item.originalIndex is >= 0
656
+ && item.originalIndex.Value < _baseClipEvents.Count
657
+ && !AnimationEventEqualityComparer.Instance.Equals(
658
+ item.animationEvent,
659
+ _baseClipEvents[item.originalIndex.Value]
660
+ )
661
+ && GUILayout.Button("Reset")
662
+ )
663
+ {
664
+ RecordUndo("Reset Animation Event");
665
+ AnimationEventEqualityComparer.Instance.CopyInto(
666
+ item.animationEvent,
667
+ _baseClipEvents[item.originalIndex.Value]
668
+ );
669
+ item.selectedType = null;
670
+ item.selectedMethod = null;
671
+ item.cachedLookup = null;
672
+ }
673
+
674
+ if (GUILayout.Button($"Remove Event at frame {frame}"))
675
+ {
676
+ RecordUndo("Remove Animation Event");
677
+ _state.Remove(item);
678
+ return;
679
+ }
680
+
681
+ if (GUILayout.Button("Duplicate", GUILayout.Width(80)))
682
+ {
683
+ RecordUndo("Duplicate Animation Event");
684
+ AnimationEvent duplicated = AnimationEventEqualityComparer.Instance.Copy(
685
+ item.animationEvent
686
+ );
687
+ _state.Insert(index + 1, new AnimationEventItem(duplicated));
688
+ }
689
+ }
690
+
691
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup = FilterLookup(item);
692
+
693
+ TryPopulateTypeAndMethod(item, lookup);
694
+ ValidateEvent(item, lookup);
695
+
696
+ SelectFrameTime(item, frame);
697
+
698
+ SelectFunctionName(item);
699
+
700
+ // Show validation status
701
+ if (!item.isValid)
702
+ {
703
+ EditorGUILayout.HelpBox(item.validationMessage, MessageType.Warning);
704
+ }
705
+
706
+ if (!SelectTypes(item, lookup))
707
+ {
708
+ return;
709
+ }
710
+
711
+ if (!SelectMethods(item, lookup))
712
+ {
713
+ return;
714
+ }
715
+
716
+ RenderEventParameters(item);
717
+ }
718
+
719
+ private void SelectFrameTime(AnimationEventItem item, int frame)
720
+ {
721
+ AnimationEvent animEvent = item.animationEvent;
722
+ EditorGUI.BeginChangeCheck();
723
+ float proposedTime;
724
+
725
+ if (_controlFrameTime)
726
+ {
727
+ proposedTime = EditorGUILayout.FloatField("FrameTime", animEvent.time);
728
+ proposedTime = Mathf.Clamp(proposedTime, 0, _currentClip.length);
729
+ }
730
+ else
731
+ {
732
+ int proposedFrame = EditorGUILayout.IntField("FrameIndex", frame);
733
+ proposedTime = Mathf.Clamp(proposedFrame, 0, MaxFrameIndex) / _cachedFrameRate;
734
+ }
735
+
736
+ if (EditorGUI.EndChangeCheck())
737
+ {
738
+ RecordUndo("Change Animation Event Time");
739
+ animEvent.time = proposedTime;
740
+ // Invalidate texture cache when time changes
741
+ item.texture = null;
742
+ }
743
+ }
744
+
745
+ private void SelectFunctionName(AnimationEventItem item)
746
+ {
747
+ AnimationEvent animEvent = item.animationEvent;
748
+ EditorGUI.BeginChangeCheck();
749
+ string newFunctionName = EditorGUILayout.TextField(
750
+ "FunctionName",
751
+ animEvent.functionName ?? string.Empty
752
+ );
753
+ if (EditorGUI.EndChangeCheck())
754
+ {
755
+ RecordUndo("Change Animation Event Function");
756
+ animEvent.functionName = newFunctionName;
757
+ item.selectedType = null;
758
+ item.selectedMethod = null;
759
+ }
760
+
761
+ if (!_explicitMode)
762
+ {
763
+ EditorGUI.BeginChangeCheck();
764
+ item.search = EditorGUILayout.TextField("Method Search", item.search);
765
+ if (EditorGUI.EndChangeCheck())
766
+ {
767
+ item.cachedLookup = null;
768
+ }
769
+
770
+ EditorGUI.BeginChangeCheck();
771
+ item.typeSearch = EditorGUILayout.TextField("Type Search", item.typeSearch);
772
+ if (EditorGUI.EndChangeCheck())
773
+ {
774
+ item.cachedLookup = null;
775
+ }
776
+ }
777
+ }
778
+
779
+ private void ValidateEvent(
780
+ AnimationEventItem item,
781
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
782
+ )
783
+ {
784
+ item.isValid = true;
785
+ item.validationMessage = string.Empty;
786
+
787
+ if (string.IsNullOrEmpty(item.animationEvent.functionName))
788
+ {
789
+ item.isValid = false;
790
+ item.validationMessage = "Function name is empty";
791
+ return;
792
+ }
793
+
794
+ if (item.selectedType == null || item.selectedMethod == null)
795
+ {
796
+ // Try to find matching method
797
+ bool found = false;
798
+ foreach (KeyValuePair<Type, IReadOnlyList<MethodInfo>> entry in lookup)
799
+ {
800
+ foreach (MethodInfo method in entry.Value)
801
+ {
802
+ if (
803
+ string.Equals(
804
+ method.Name,
805
+ item.animationEvent.functionName,
806
+ StringComparison.Ordinal
807
+ )
808
+ )
809
+ {
810
+ found = true;
811
+ break;
812
+ }
813
+ }
814
+ if (found)
815
+ {
816
+ break;
817
+ }
818
+ }
819
+
820
+ if (!found)
821
+ {
822
+ item.isValid = false;
823
+ item.validationMessage =
824
+ $"No method named '{item.animationEvent.functionName}' found in available types";
825
+ }
826
+ }
827
+ }
828
+
829
+ private void TryPopulateTypeAndMethod(
830
+ AnimationEventItem item,
831
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
832
+ )
833
+ {
834
+ if (item.selectedType != null)
835
+ {
836
+ return;
837
+ }
838
+
839
+ if (lookup == null)
840
+ {
841
+ return;
842
+ }
843
+
844
+ AnimationEvent animEvent = item.animationEvent;
845
+ using (Buffers<Type>.List.Get(out List<Type> types))
846
+ {
847
+ foreach (Type t in lookup.Keys)
848
+ {
849
+ types.Add(t);
850
+ }
851
+ types.Sort(
852
+ static (a, b) =>
853
+ string.Compare(a.FullName, b.FullName, StringComparison.Ordinal)
854
+ );
855
+ for (int ti = 0; ti < types.Count; ti++)
856
+ {
857
+ Type type = types[ti];
858
+ if (!lookup.TryGetValue(type, out IReadOnlyList<MethodInfo> methods))
859
+ {
860
+ continue;
861
+ }
862
+ for (int mi = 0; mi < methods.Count; mi++)
863
+ {
864
+ MethodInfo method = methods[mi];
865
+ if (
866
+ string.Equals(
867
+ method.Name,
868
+ animEvent.functionName,
869
+ StringComparison.Ordinal
870
+ )
871
+ )
872
+ {
873
+ item.selectedType = type;
874
+ item.selectedMethod = method;
875
+ return;
876
+ }
877
+ }
878
+ }
879
+ }
880
+ }
881
+
882
+ private bool SelectTypes(
883
+ AnimationEventItem item,
884
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
885
+ )
886
+ {
887
+ if (lookup == null || lookup.Count == 0)
888
+ {
889
+ EditorGUILayout.HelpBox(
890
+ "No types with animation event methods found",
891
+ MessageType.Info
892
+ );
893
+ return false;
894
+ }
895
+
896
+ // Get all types, but prioritize the selected one and filter by search
897
+ List<Type> allTypes;
898
+ using (Buffers<Type>.List.Get(out allTypes))
899
+ using (Buffers<Type>.List.Get(out List<Type> filteredTypes))
900
+ {
901
+ foreach (Type t in lookup.Keys)
902
+ {
903
+ allTypes.Add(t);
904
+ }
905
+ allTypes.Sort(
906
+ static (a, b) =>
907
+ string.Compare(a.FullName, b.FullName, StringComparison.Ordinal)
908
+ );
909
+ for (int i = 0; i < allTypes.Count; i++)
910
+ {
911
+ filteredTypes.Add(allTypes[i]);
912
+ }
913
+
914
+ // Apply type search filter
915
+ if (!string.IsNullOrEmpty(item.typeSearch))
916
+ {
917
+ string searchLower = item.typeSearch.ToLowerInvariant();
918
+ filteredTypes.Clear();
919
+ for (int i = 0; i < allTypes.Count; i++)
920
+ {
921
+ Type t = allTypes[i];
922
+ string full = t.FullName ?? string.Empty;
923
+ string low = full.ToLowerInvariant();
924
+ if (low.IndexOf(searchLower, StringComparison.Ordinal) >= 0)
925
+ {
926
+ filteredTypes.Add(t);
927
+ }
928
+ }
929
+
930
+ // Always include selected type even if it doesn't match search
931
+ if (item.selectedType != null)
932
+ {
933
+ bool present = false;
934
+ for (int i = 0; i < filteredTypes.Count; i++)
935
+ {
936
+ if (filteredTypes[i] == item.selectedType)
937
+ {
938
+ present = true;
939
+ break;
940
+ }
941
+ }
942
+ if (!present)
943
+ {
944
+ filteredTypes.Insert(0, item.selectedType);
945
+ }
946
+ }
947
+ }
948
+
949
+ // Limit to reasonable number, but show more if searching
950
+ int limit = string.IsNullOrEmpty(item.typeSearch) ? 50 : 200;
951
+ using (Buffers<Type>.List.Get(out List<Type> displayTypes))
952
+ {
953
+ int take = filteredTypes.Count > limit ? limit : filteredTypes.Count;
954
+ for (int i = 0; i < take; i++)
955
+ {
956
+ displayTypes.Add(filteredTypes[i]);
957
+ }
958
+
959
+ if (item.selectedType != null)
960
+ {
961
+ bool found = false;
962
+ for (int i = 0; i < displayTypes.Count; i++)
963
+ {
964
+ if (displayTypes[i] == item.selectedType)
965
+ {
966
+ found = true;
967
+ break;
968
+ }
969
+ }
970
+ if (!found)
971
+ {
972
+ displayTypes.Insert(0, item.selectedType);
973
+ }
974
+ }
975
+
976
+ string[] orderedTypeNames = new string[displayTypes.Count];
977
+ for (int i = 0; i < displayTypes.Count; i++)
978
+ {
979
+ Type t = displayTypes[i];
980
+ orderedTypeNames[i] =
981
+ t != null ? (t.FullName ?? string.Empty) : string.Empty;
982
+ }
983
+
984
+ int existingIndex = -1;
985
+ for (int i = 0; i < displayTypes.Count; i++)
986
+ {
987
+ if (displayTypes[i] == item.selectedType)
988
+ {
989
+ existingIndex = i;
990
+ break;
991
+ }
992
+ }
993
+
994
+ EditorGUI.BeginChangeCheck();
995
+ int selectedTypeIndex = EditorGUILayout.Popup(
996
+ "TypeName",
997
+ existingIndex,
998
+ orderedTypeNames
999
+ );
1000
+
1001
+ if (EditorGUI.EndChangeCheck())
1002
+ {
1003
+ RecordUndo("Change Animation Event Type");
1004
+ item.selectedType =
1005
+ selectedTypeIndex < 0 ? null : displayTypes[selectedTypeIndex];
1006
+ item.selectedMethod = null;
1007
+ }
1008
+
1009
+ if (filteredTypes.Count > limit)
1010
+ {
1011
+ EditorGUILayout.HelpBox(
1012
+ $"Showing {limit} of {filteredTypes.Count} types. Use Type Search to filter.",
1013
+ MessageType.Info
1014
+ );
1015
+ }
1016
+
1017
+ return item.selectedType != null;
1018
+ }
1019
+ }
1020
+ }
1021
+
1022
+ private bool SelectMethods(
1023
+ AnimationEventItem item,
1024
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup
1025
+ )
1026
+ {
1027
+ if (lookup == null)
1028
+ {
1029
+ return false;
1030
+ }
1031
+
1032
+ AnimationEvent animEvent = item.animationEvent;
1033
+ if (!lookup.TryGetValue(item.selectedType, out IReadOnlyList<MethodInfo> methods))
1034
+ {
1035
+ methods = new List<MethodInfo>(0);
1036
+ }
1037
+
1038
+ List<MethodInfo> methodsList = new(methods);
1039
+
1040
+ if (item.selectedMethod == null || !methodsList.Contains(item.selectedMethod))
1041
+ {
1042
+ foreach (MethodInfo method in methodsList)
1043
+ {
1044
+ if (
1045
+ string.Equals(method.Name, animEvent.functionName, StringComparison.Ordinal)
1046
+ )
1047
+ {
1048
+ item.selectedMethod = method;
1049
+ break;
1050
+ }
1051
+ }
1052
+
1053
+ if (item.selectedMethod != null && !methodsList.Contains(item.selectedMethod))
1054
+ {
1055
+ methodsList.Add(item.selectedMethod);
1056
+ }
1057
+ }
1058
+
1059
+ EditorGUI.BeginChangeCheck();
1060
+ int curIndex = -1;
1061
+ for (int i = 0; i < methodsList.Count; i++)
1062
+ {
1063
+ if (methodsList[i] == item.selectedMethod)
1064
+ {
1065
+ curIndex = i;
1066
+ break;
1067
+ }
1068
+ }
1069
+ string[] methodNames = new string[methodsList.Count];
1070
+ for (int i = 0; i < methodsList.Count; i++)
1071
+ {
1072
+ methodNames[i] = methodsList[i] != null ? methodsList[i].Name : string.Empty;
1073
+ }
1074
+ int selectedMethodIndex = EditorGUILayout.Popup("MethodName", curIndex, methodNames);
1075
+
1076
+ if (EditorGUI.EndChangeCheck() && selectedMethodIndex >= 0)
1077
+ {
1078
+ RecordUndo("Change Animation Event Method");
1079
+ item.selectedMethod = methodsList[selectedMethodIndex];
1080
+ animEvent.functionName = item.selectedMethod.Name;
1081
+ }
1082
+
1083
+ return item.selectedMethod != null;
1084
+ }
1085
+
1086
+ private void RenderEventParameters(AnimationEventItem item)
1087
+ {
1088
+ AnimationEvent animEvent = item.animationEvent;
1089
+ ParameterInfo[] arrayParameterInfo = item.selectedMethod.GetParameters();
1090
+ if (arrayParameterInfo.Length == 1)
1091
+ {
1092
+ using EditorGUI.IndentLevelScope indent = new();
1093
+
1094
+ Type paramType = arrayParameterInfo[0].ParameterType;
1095
+ EditorGUI.BeginChangeCheck();
1096
+
1097
+ if (paramType == typeof(int))
1098
+ {
1099
+ int newValue = EditorGUILayout.IntField("IntParameter", animEvent.intParameter);
1100
+ if (EditorGUI.EndChangeCheck())
1101
+ {
1102
+ RecordUndo("Change Animation Event Parameter");
1103
+ animEvent.intParameter = newValue;
1104
+ }
1105
+ }
1106
+ else if (paramType.BaseType == typeof(Enum))
1107
+ {
1108
+ string[] enumNamesArray = Enum.GetNames(paramType);
1109
+ string enumName = Enum.GetName(paramType, animEvent.intParameter);
1110
+ int curIndex = Array.IndexOf(enumNamesArray, enumName);
1111
+ int index = EditorGUILayout.Popup(
1112
+ $"{paramType.Name}",
1113
+ curIndex,
1114
+ enumNamesArray
1115
+ );
1116
+
1117
+ bool checkEnded = EditorGUI.EndChangeCheck();
1118
+ if (checkEnded && index >= 0)
1119
+ {
1120
+ RecordUndo("Change Animation Event Parameter");
1121
+ animEvent.intParameter = (int)Enum.Parse(paramType, enumNamesArray[index]);
1122
+ }
1123
+
1124
+ item.overrideEnumValues = EditorGUILayout.Toggle(
1125
+ "Override",
1126
+ item.overrideEnumValues
1127
+ );
1128
+ if (item.overrideEnumValues)
1129
+ {
1130
+ EditorGUI.BeginChangeCheck();
1131
+ int overrideValue = EditorGUILayout.IntField(
1132
+ "IntParameter",
1133
+ animEvent.intParameter
1134
+ );
1135
+ if (EditorGUI.EndChangeCheck())
1136
+ {
1137
+ RecordUndo("Change Animation Event Parameter");
1138
+ animEvent.intParameter = overrideValue;
1139
+ }
1140
+ }
1141
+ }
1142
+ else if (paramType == typeof(float))
1143
+ {
1144
+ float newValue = EditorGUILayout.FloatField(
1145
+ "FloatParameter",
1146
+ animEvent.floatParameter
1147
+ );
1148
+ if (EditorGUI.EndChangeCheck())
1149
+ {
1150
+ RecordUndo("Change Animation Event Parameter");
1151
+ animEvent.floatParameter = newValue;
1152
+ }
1153
+ }
1154
+ else if (paramType == typeof(string))
1155
+ {
1156
+ string newValue = EditorGUILayout.TextField(
1157
+ "StringParameter",
1158
+ animEvent.stringParameter
1159
+ );
1160
+ if (EditorGUI.EndChangeCheck())
1161
+ {
1162
+ RecordUndo("Change Animation Event Parameter");
1163
+ animEvent.stringParameter = newValue;
1164
+ }
1165
+ }
1166
+ else if (paramType == typeof(UnityEngine.Object))
1167
+ {
1168
+ UnityEngine.Object newValue = EditorGUILayout.ObjectField(
1169
+ "ObjectReferenceParameter",
1170
+ animEvent.objectReferenceParameter,
1171
+ typeof(UnityEngine.Object),
1172
+ true
1173
+ );
1174
+ if (EditorGUI.EndChangeCheck())
1175
+ {
1176
+ RecordUndo("Change Animation Event Parameter");
1177
+ animEvent.objectReferenceParameter = newValue;
1178
+ }
1179
+ }
1180
+ else
1181
+ {
1182
+ // End the change check that was started
1183
+ EditorGUI.EndChangeCheck();
1184
+ }
1185
+ }
1186
+ }
1187
+
1188
+ private IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> FilterLookup(
1189
+ AnimationEventItem item
1190
+ )
1191
+ {
1192
+ IReadOnlyDictionary<Type, IReadOnlyList<MethodInfo>> lookup;
1193
+ if (!_explicitMode)
1194
+ {
1195
+ string currentSearch = item.search + "|" + item.typeSearch;
1196
+
1197
+ // Use cached lookup if search hasn't changed
1198
+ if (item.cachedLookup != null && item.lastSearchForCache == currentSearch)
1199
+ {
1200
+ return item.cachedLookup;
1201
+ }
1202
+
1203
+ Dictionary<Type, List<MethodInfo>> filtered = new();
1204
+
1205
+ List<string> methodSearchTerms = new();
1206
+ {
1207
+ string[] parts = item.search.Split(' ');
1208
+ for (int i = 0; i < parts.Length; i++)
1209
+ {
1210
+ string s = parts[i];
1211
+ if (string.IsNullOrEmpty(s))
1212
+ {
1213
+ continue;
1214
+ }
1215
+ s = s.Trim();
1216
+ if (s.Length == 0 || s == "*")
1217
+ {
1218
+ continue;
1219
+ }
1220
+ methodSearchTerms.Add(s.ToLowerInvariant());
1221
+ }
1222
+ }
1223
+
1224
+ List<string> typeSearchTerms = new();
1225
+ {
1226
+ string[] parts = item.typeSearch.Split(' ');
1227
+ for (int i = 0; i < parts.Length; i++)
1228
+ {
1229
+ string s = parts[i];
1230
+ if (string.IsNullOrEmpty(s))
1231
+ {
1232
+ continue;
1233
+ }
1234
+ s = s.Trim();
1235
+ if (s.Length == 0 || s == "*")
1236
+ {
1237
+ continue;
1238
+ }
1239
+ typeSearchTerms.Add(s.ToLowerInvariant());
1240
+ }
1241
+ }
1242
+
1243
+ foreach (KeyValuePair<Type, IReadOnlyList<MethodInfo>> kvp in Lookup)
1244
+ {
1245
+ Type type = kvp.Key;
1246
+
1247
+ // Filter by type search
1248
+ if (typeSearchTerms.Count > 0)
1249
+ {
1250
+ bool typeMatches = true;
1251
+ string typeLower = type.FullName.ToLowerInvariant();
1252
+ foreach (string searchTerm in typeSearchTerms)
1253
+ {
1254
+ if (!typeLower.Contains(searchTerm))
1255
+ {
1256
+ typeMatches = false;
1257
+ break;
1258
+ }
1259
+ }
1260
+ if (!typeMatches)
1261
+ {
1262
+ continue;
1263
+ }
1264
+ }
1265
+
1266
+ List<MethodInfo> methodList = new(kvp.Value);
1267
+
1268
+ // Filter by method search
1269
+ if (methodSearchTerms.Count > 0)
1270
+ {
1271
+ List<MethodInfo> filteredMethods = new();
1272
+ foreach (MethodInfo method in methodList)
1273
+ {
1274
+ bool methodMatches = true;
1275
+ string methodLower = method.Name.ToLowerInvariant();
1276
+ foreach (string searchTerm in methodSearchTerms)
1277
+ {
1278
+ if (!methodLower.Contains(searchTerm))
1279
+ {
1280
+ methodMatches = false;
1281
+ break;
1282
+ }
1283
+ }
1284
+ if (methodMatches)
1285
+ {
1286
+ filteredMethods.Add(method);
1287
+ }
1288
+ }
1289
+
1290
+ if (filteredMethods.Count > 0)
1291
+ {
1292
+ filtered[type] = filteredMethods;
1293
+ }
1294
+ }
1295
+ else
1296
+ {
1297
+ filtered[type] = methodList;
1298
+ }
1299
+ }
1300
+
1301
+ Dictionary<Type, IReadOnlyList<MethodInfo>> ro = new();
1302
+ foreach (KeyValuePair<Type, List<MethodInfo>> e in filtered)
1303
+ {
1304
+ ro[e.Key] = e.Value;
1305
+ }
1306
+ item.cachedLookup = lookup = ro;
1307
+ item.lastSearchForCache = currentSearch;
1308
+ }
1309
+ else
1310
+ {
1311
+ lookup = Lookup;
1312
+ }
1313
+
1314
+ return lookup;
1315
+ }
1316
+
1317
+ private void DrawSpritePreview(AnimationEventItem item)
1318
+ {
1319
+ SetupPreviewData(item);
1320
+
1321
+ string spriteName = item.sprite == null ? string.Empty : item.sprite.name;
1322
+ if (item.texture != null)
1323
+ {
1324
+ GUILayout.Label(item.texture);
1325
+ }
1326
+ else if (!item.isTextureReadable && !string.IsNullOrEmpty(spriteName))
1327
+ {
1328
+ using (new EditorGUILayout.HorizontalScope())
1329
+ {
1330
+ GUILayout.Label($"Sprite '{spriteName}' required \"Read/Write\" enabled");
1331
+ if (item.sprite != null && GUILayout.Button("Fix"))
1332
+ {
1333
+ string assetPath = AssetDatabase.GetAssetPath(item.sprite.texture);
1334
+ if (string.IsNullOrEmpty(assetPath))
1335
+ {
1336
+ return;
1337
+ }
1338
+
1339
+ TextureImporter tImporter =
1340
+ AssetImporter.GetAtPath(assetPath) as TextureImporter;
1341
+ if (tImporter == null)
1342
+ {
1343
+ return;
1344
+ }
1345
+
1346
+ Undo.RecordObject(tImporter, "Enable Texture Read/Write");
1347
+ tImporter.isReadable = true;
1348
+ EditorUtility.SetDirty(tImporter);
1349
+ tImporter.SaveAndReimport();
1350
+ EditorUtility.SetDirty(item.sprite);
1351
+ }
1352
+ }
1353
+ }
1354
+ else if (item.isInvalidTextureRect && !string.IsNullOrEmpty(spriteName))
1355
+ {
1356
+ GUILayout.Label($"Sprite '{spriteName}' is packed too tightly inside its texture");
1357
+ }
1358
+ }
1359
+
1360
+ private void SetupPreviewData(AnimationEventItem item)
1361
+ {
1362
+ if (item.texture != null)
1363
+ {
1364
+ return;
1365
+ }
1366
+
1367
+ if (TryFindSpriteForEvent(item, out Sprite currentSprite))
1368
+ {
1369
+ item.sprite = currentSprite;
1370
+
1371
+ // Try to use cached texture first
1372
+ if (_spriteTextureCache.TryGetValue(currentSprite, out Texture2D cachedTexture))
1373
+ {
1374
+ item.texture = cachedTexture;
1375
+ item.isTextureReadable = true;
1376
+ item.isInvalidTextureRect = false;
1377
+ return;
1378
+ }
1379
+
1380
+ // Try AssetPreview first (doesn't require Read/Write)
1381
+ Texture2D preview = AssetPreview.GetAssetPreview(currentSprite);
1382
+ if (preview != null)
1383
+ {
1384
+ item.texture = preview;
1385
+ _spriteTextureCache[currentSprite] = preview;
1386
+ item.isTextureReadable = true;
1387
+ item.isInvalidTextureRect = false;
1388
+ return;
1389
+ }
1390
+
1391
+ // Fall back to manual copy if texture is readable
1392
+ item.isTextureReadable = currentSprite.texture.isReadable;
1393
+ item.isInvalidTextureRect = false;
1394
+ if (item.isTextureReadable)
1395
+ {
1396
+ Rect? maybeTextureRect = null;
1397
+ try
1398
+ {
1399
+ maybeTextureRect = currentSprite.textureRect;
1400
+ }
1401
+ catch (Exception)
1402
+ {
1403
+ item.isInvalidTextureRect = true;
1404
+ }
1405
+
1406
+ if (maybeTextureRect != null)
1407
+ {
1408
+ Rect textureRect = maybeTextureRect.Value;
1409
+ Texture2D copiedTexture = CopyTexture(textureRect, currentSprite.texture);
1410
+ item.texture = copiedTexture;
1411
+ _spriteTextureCache[currentSprite] = copiedTexture;
1412
+ }
1413
+ }
1414
+ }
1415
+ else
1416
+ {
1417
+ item.sprite = null;
1418
+ item.isTextureReadable = false;
1419
+ }
1420
+ }
1421
+
1422
+ private bool TryFindSpriteForEvent(AnimationEventItem item, out Sprite sprite)
1423
+ {
1424
+ sprite = null;
1425
+ if (_referenceCurve == null || _referenceCurve.Count == 0)
1426
+ {
1427
+ return false;
1428
+ }
1429
+
1430
+ foreach (ObjectReferenceKeyframe keyFrame in _referenceCurve)
1431
+ {
1432
+ if (keyFrame.time <= item.animationEvent.time)
1433
+ {
1434
+ Sprite frameSprite = keyFrame.value as Sprite;
1435
+ if (frameSprite == null)
1436
+ {
1437
+ continue;
1438
+ }
1439
+
1440
+ sprite = frameSprite;
1441
+ continue;
1442
+ }
1443
+
1444
+ return sprite != null;
1445
+ }
1446
+
1447
+ return sprite != null;
1448
+ }
1449
+
1450
+ private Texture2D CopyTexture(Rect textureRect, Texture2D sourceTexture)
1451
+ {
1452
+ int width = (int)Math.Ceiling(textureRect.width);
1453
+ int height = (int)Math.Ceiling(textureRect.height);
1454
+ Texture2D texture = new(width, height)
1455
+ {
1456
+ wrapMode = TextureWrapMode.Clamp,
1457
+ filterMode = FilterMode.Point,
1458
+ };
1459
+ Vector2 offset = textureRect.position;
1460
+ int offsetX = (int)Math.Ceiling(offset.x);
1461
+ int offsetY = (int)Math.Ceiling(offset.y);
1462
+ for (int x = 0; x < width; ++x)
1463
+ {
1464
+ for (int y = 0; y < height; ++y)
1465
+ {
1466
+ Color sourcePixel = sourceTexture.GetPixel(offsetX + x, offsetY + y);
1467
+ texture.SetPixel(x, y, sourcePixel);
1468
+ }
1469
+ }
1470
+
1471
+ texture.Apply();
1472
+ return texture;
1473
+ }
1474
+
1475
+ private void RefreshAnimationEvents()
1476
+ {
1477
+ _state.Clear();
1478
+ _baseClipEvents.Clear();
1479
+ _spriteTextureCache.Clear();
1480
+ _focusedEventIndex = -1;
1481
+ _frameRateChanged = false;
1482
+
1483
+ if (_currentClip == null)
1484
+ {
1485
+ return;
1486
+ }
1487
+
1488
+ _cachedFrameRate = _currentClip.frameRate;
1489
+
1490
+ for (int i = 0; i < _currentClip.events.Length; i++)
1491
+ {
1492
+ AnimationEvent animEvent = _currentClip.events[i];
1493
+ _state.Add(new AnimationEventItem(animEvent) { originalIndex = i });
1494
+ _baseClipEvents.Add(AnimationEventEqualityComparer.Instance.Copy(animEvent));
1495
+ }
1496
+
1497
+ _selectedFrameIndex = MaxFrameIndex;
1498
+ ObjectReferenceKeyframe[] curve = AnimationUtility.GetObjectReferenceCurve(
1499
+ _currentClip,
1500
+ EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_Sprite")
1501
+ );
1502
+ _referenceCurve = new List<ObjectReferenceKeyframe>(
1503
+ curve ?? Array.Empty<ObjectReferenceKeyframe>()
1504
+ );
1505
+ _referenceCurve.Sort(
1506
+ (lhs, rhs) =>
1507
+ {
1508
+ int comparison = lhs.time.CompareTo(rhs.time);
1509
+ if (comparison != 0)
1510
+ {
1511
+ return comparison;
1512
+ }
1513
+
1514
+ string lhsName =
1515
+ lhs.value == null ? string.Empty : lhs.value.name ?? string.Empty;
1516
+ string rhsName =
1517
+ rhs.value == null ? string.Empty : rhs.value.name ?? string.Empty;
1518
+ return string.Compare(lhsName, rhsName, StringComparison.OrdinalIgnoreCase);
1519
+ }
1520
+ );
1521
+ }
1522
+
1523
+ private void RecordUndo(string operationName)
1524
+ {
1525
+ Undo.RecordObject(this, operationName);
1526
+ }
1527
+
1528
+ private void SaveAnimation()
1529
+ {
1530
+ if (_currentClip != null)
1531
+ {
1532
+ Undo.RecordObject(_currentClip, "Save Animation Events");
1533
+
1534
+ AnimationEvent[] arr = new AnimationEvent[_state.Count];
1535
+ for (int i = 0; i < _state.Count; i++)
1536
+ {
1537
+ arr[i] = _state[i].animationEvent;
1538
+ }
1539
+ AnimationUtility.SetAnimationEvents(_currentClip, arr);
1540
+
1541
+ // Apply frame rate changes if any
1542
+ if (_frameRateChanged)
1543
+ {
1544
+ _currentClip.frameRate = _cachedFrameRate;
1545
+ _frameRateChanged = false;
1546
+ }
1547
+
1548
+ EditorUtility.SetDirty(_currentClip);
1549
+ AssetDatabase.SaveAssetIfDirty(_currentClip);
1550
+ _baseClipEvents.Clear();
1551
+ foreach (AnimationEventItem item in _state)
1552
+ {
1553
+ _baseClipEvents.Add(
1554
+ AnimationEventEqualityComparer.Instance.Copy(item.animationEvent)
1555
+ );
1556
+ }
1557
+ }
1558
+ }
1559
+
1560
+ private void DrawGuiLine(int height = 1, Color? color = null)
1561
+ {
1562
+ Rect rect = EditorGUILayout.GetControlRect(false, height);
1563
+ rect.height = height;
1564
+ int minusWidth = EditorGUI.indentLevel * 16;
1565
+ rect.xMin += minusWidth;
1566
+ EditorGUI.DrawRect(rect, color ?? new Color(0.5f, 0.5f, 0.5f, 1f));
1567
+ }
1568
+ }
1569
+ #endif
1570
+ }