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

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