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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1500) hide show
  1. package/.config/dotnet-tools.json +10 -10
  2. package/.csharpierignore +1 -0
  3. package/.csharpierrc.json +3 -0
  4. package/.editorconfig +184 -184
  5. package/.gitattributes +87 -63
  6. package/.githooks/pre-commit +75 -0
  7. package/.githooks/pre-push +50 -0
  8. package/.github/dependabot.yml +32 -10
  9. package/.github/scripts/check-markdown-links.ps1 +77 -0
  10. package/.github/scripts/check_markdown_links.py +89 -0
  11. package/.github/scripts/check_markdown_url_encoding.py +74 -0
  12. package/.github/scripts/validate_markdown_links.py +194 -0
  13. package/.github/workflows/csharpier-autofix.yml +152 -0
  14. package/.github/workflows/format-on-demand.yml +305 -0
  15. package/.github/workflows/lint-doc-links.yml +30 -0
  16. package/.github/workflows/markdown-json.yml +45 -0
  17. package/.github/workflows/npm-publish.yml +75 -75
  18. package/.github/workflows/prettier-autofix.yml +195 -0
  19. package/.github/workflows/update-dotnet-tools.yml +80 -0
  20. package/.github/workflows/yaml-format-lint.yml +41 -0
  21. package/.lychee.toml +26 -0
  22. package/.markdownlint.json +21 -0
  23. package/.markdownlint.jsonc +21 -0
  24. package/.markdownlintignore +8 -0
  25. package/.pre-commit-config.yaml +47 -22
  26. package/.prettierignore +22 -0
  27. package/.prettierrc.json +20 -0
  28. package/.yamllint.yaml +31 -0
  29. package/AGENTS.md +56 -0
  30. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  31. package/CHANGELOG.md +11 -0
  32. package/CHANGELOG.md.meta +7 -7
  33. package/CONTRIBUTING.md +49 -0
  34. package/CONTRIBUTING.md.meta +7 -0
  35. package/DATA_STRUCTURES.md +324 -0
  36. package/DATA_STRUCTURES.md.meta +7 -0
  37. package/Docs/Images/attribute_resolution.svg +40 -0
  38. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  39. package/Docs/Images/bitset.svg +47 -0
  40. package/Docs/Images/bitset.svg.meta +7 -0
  41. package/Docs/Images/concave_hull.svg +30 -0
  42. package/Docs/Images/concave_hull.svg.meta +7 -0
  43. package/Docs/Images/convex_hull.svg +29 -0
  44. package/Docs/Images/convex_hull.svg.meta +7 -0
  45. package/Docs/Images/cyclic_buffer.svg +37 -0
  46. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  47. package/Docs/Images/data_distribution_decision.svg +88 -0
  48. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  49. package/Docs/Images/deque.svg +64 -0
  50. package/Docs/Images/deque.svg.meta +7 -0
  51. package/Docs/Images/deque_queue.svg +107 -0
  52. package/Docs/Images/deque_queue.svg.meta +7 -0
  53. package/Docs/Images/disjoint_set.svg +47 -0
  54. package/Docs/Images/disjoint_set.svg.meta +7 -0
  55. package/Docs/Images/effects_pipeline.svg +59 -0
  56. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  57. package/Docs/Images/geometry_edge_cases.svg +61 -0
  58. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  59. package/Docs/Images/heap.svg +56 -0
  60. package/Docs/Images/heap.svg.meta +7 -0
  61. package/Docs/Images/kdtree_2d.svg +38 -0
  62. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  63. package/Docs/Images/kdtree_3d.svg +83 -0
  64. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  65. package/Docs/Images/octree_3d.svg +79 -0
  66. package/Docs/Images/octree_3d.svg.meta +7 -0
  67. package/Docs/Images/polyline_simplify.svg +18 -0
  68. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  69. package/Docs/Images/quadtree_2d.svg +37 -0
  70. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  71. package/Docs/Images/query_boundaries.svg +38 -0
  72. package/Docs/Images/query_boundaries.svg.meta +7 -0
  73. package/Docs/Images/random_generators.svg +105 -0
  74. package/Docs/Images/random_generators.svg.meta +7 -0
  75. package/Docs/Images/reflection_scan.svg +33 -0
  76. package/Docs/Images/reflection_scan.svg.meta +7 -0
  77. package/Docs/Images/relational_wiring.svg +75 -0
  78. package/Docs/Images/relational_wiring.svg.meta +7 -0
  79. package/Docs/Images/rtree_2d.svg +27 -0
  80. package/Docs/Images/rtree_2d.svg.meta +7 -0
  81. package/Docs/Images/rtree_3d.svg +79 -0
  82. package/Docs/Images/rtree_3d.svg.meta +7 -0
  83. package/Docs/Images/serialization_flow.svg +50 -0
  84. package/Docs/Images/serialization_flow.svg.meta +7 -0
  85. package/Docs/Images/singletons_lifecycle.svg +54 -0
  86. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  87. package/Docs/Images/sparse_set.svg +54 -0
  88. package/Docs/Images/sparse_set.svg.meta +7 -0
  89. package/Docs/Images/trie.svg +55 -0
  90. package/Docs/Images/trie.svg.meta +7 -0
  91. package/Docs/Images.meta +8 -0
  92. package/Docs.meta +8 -0
  93. package/EDITOR_TOOLS_GUIDE.md +1980 -0
  94. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  95. package/EFFECTS_SYSTEM.md +242 -0
  96. package/EFFECTS_SYSTEM.md.meta +7 -0
  97. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  98. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  99. package/Editor/AnimationEventEditor.cs +1570 -874
  100. package/Editor/AnimationEventEditor.cs.meta +11 -11
  101. package/Editor/AssemblyInfo.cs +4 -0
  102. package/Editor/AssemblyInfo.cs.meta +3 -0
  103. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  104. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  105. package/Editor/AssetProcessors.meta +2 -2
  106. package/Editor/Core/Helper/AnimationEventHelpers.cs +230 -0
  107. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  108. package/Editor/Core/Helper.meta +8 -0
  109. package/Editor/Core.meta +8 -0
  110. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  111. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  112. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  113. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  114. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  115. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  116. package/Editor/CustomDrawers.meta +2 -2
  117. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  118. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  119. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +808 -799
  120. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  121. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  122. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  123. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  124. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  125. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +155 -0
  126. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  127. package/Editor/CustomEditors.meta +2 -2
  128. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  129. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  130. package/Editor/Extensions/UnityExtensions.cs +50 -26
  131. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  132. package/Editor/Extensions.meta +2 -2
  133. package/Editor/FitTextureSizeWindow.cs +809 -332
  134. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  135. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  136. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  137. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  138. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  139. package/Editor/Persistence.meta +8 -0
  140. package/Editor/PersistentDirectorySettings.cs +581 -248
  141. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  142. package/Editor/PrefabChecker.cs +1396 -741
  143. package/Editor/PrefabChecker.cs.meta +11 -11
  144. package/Editor/Sprites/AnimationCopier.cs +1594 -789
  145. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  146. package/Editor/Sprites/AnimationCreator.cs +1573 -881
  147. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  148. package/Editor/Sprites/AnimationViewerWindow.cs +1670 -1522
  149. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  150. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  151. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  152. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  153. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  154. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  155. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  156. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  157. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  158. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  159. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  160. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  161. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  162. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  163. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  164. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  165. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  166. package/Editor/Sprites/TexturePlatformNameHelper.cs +89 -0
  167. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  168. package/Editor/Sprites/TextureResizerWizard.cs +456 -175
  169. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  170. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  171. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  172. package/Editor/Sprites/TextureSettingsApplierWindow.cs +668 -0
  173. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  174. package/Editor/Sprites.meta +2 -2
  175. package/Editor/Styles/AnimationViewer.uss +115 -115
  176. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  177. package/Editor/Styles/AnimationViewer.uxml +56 -56
  178. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  179. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  180. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  181. package/Editor/Styles.meta +2 -2
  182. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  183. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  184. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  185. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  186. package/Editor/Tags.meta +8 -0
  187. package/Editor/Tools/ImageBlurTool.cs +522 -409
  188. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  189. package/Editor/Tools.meta +2 -2
  190. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  191. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  192. package/Editor/Utils/EditorUi.cs +228 -0
  193. package/Editor/Utils/EditorUi.cs.meta +11 -0
  194. package/Editor/Utils/EditorUtilities.cs +22 -22
  195. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  196. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  197. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  198. package/Editor/Utils.meta +8 -8
  199. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  200. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  201. package/Editor/Visuals.meta +2 -2
  202. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  203. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  204. package/Editor.meta +8 -8
  205. package/GETTING_STARTED.md +409 -0
  206. package/GETTING_STARTED.md.meta +7 -0
  207. package/GLOSSARY.md +313 -0
  208. package/GLOSSARY.md.meta +7 -0
  209. package/HULLS.md +45 -0
  210. package/HULLS.md.meta +7 -0
  211. package/INDEX.md +429 -0
  212. package/INDEX.md.meta +7 -0
  213. package/LICENSE +21 -21
  214. package/LICENSE.md +7 -7
  215. package/LICENSE.md.meta +7 -7
  216. package/LICENSE.meta +7 -7
  217. package/MATH_AND_EXTENSIONS.md +316 -0
  218. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  219. package/RANDOM_PERFORMANCE.md +140 -0
  220. package/RANDOM_PERFORMANCE.md.meta +7 -0
  221. package/README.md +1183 -188
  222. package/README.md.meta +7 -7
  223. package/REFLECTION_HELPERS.md +272 -0
  224. package/REFLECTION_HELPERS.md.meta +7 -0
  225. package/RELATIONAL_COMPONENTS.md +552 -0
  226. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  227. package/Runtime/AssemblyInfo.cs +9 -0
  228. package/Runtime/AssemblyInfo.cs.meta +11 -0
  229. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  230. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  231. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  232. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  233. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  234. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  235. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  236. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  237. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  238. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  239. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  240. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  241. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  242. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  243. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  244. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  245. package/Runtime/Binaries.meta +8 -8
  246. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  247. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  249. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  250. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  251. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  252. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  253. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  254. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  255. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  256. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  257. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  259. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  261. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/NotNullAttribute.cs +30 -32
  263. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  265. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  266. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +152 -0
  267. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  268. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  269. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  270. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  271. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  272. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  273. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  274. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  275. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  276. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  277. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  278. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  279. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  280. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  281. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  282. package/Runtime/Core/Attributes.meta +8 -8
  283. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  284. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  285. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  286. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  287. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  288. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  289. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  290. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  291. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  292. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  293. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  295. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  297. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  298. package/Runtime/Core/DataStructure/CyclicBuffer.cs +488 -266
  299. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  300. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  301. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  303. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  305. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  307. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  309. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  310. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  311. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  312. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  313. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  315. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  316. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  317. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  319. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  321. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  322. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  323. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  324. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  325. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  326. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  327. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  328. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  329. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  330. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  331. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  332. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  333. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  334. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  335. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  336. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  337. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  338. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  339. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  340. package/Runtime/Core/DataStructure.meta +8 -8
  341. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  342. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  344. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  345. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  346. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  347. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  348. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  349. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  350. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  352. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  354. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  355. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  356. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  357. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  358. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  359. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  360. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  361. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  362. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  363. package/Runtime/Core/Extension/RandomExtensions.cs +1006 -109
  364. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  365. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  366. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  367. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  368. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  369. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +287 -245
  370. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  371. package/Runtime/Core/Extension.meta +8 -8
  372. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  373. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  374. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  375. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  376. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  377. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  378. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  379. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  380. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  381. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  383. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  384. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  385. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  386. package/Runtime/Core/Helper/Geometry.cs +65 -43
  387. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  388. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  389. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  390. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  391. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  392. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  393. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  394. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  395. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  396. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  397. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  398. package/Runtime/Core/Helper/Logging.meta +2 -2
  399. package/Runtime/Core/Helper/Objects.cs +477 -769
  400. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  401. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  402. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  403. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  404. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  405. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +509 -400
  406. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  407. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  408. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  409. package/Runtime/Core/Helper/Partials.meta +2 -2
  410. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  411. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  412. package/Runtime/Core/Helper/ReflectionHelpers.cs +5298 -1963
  413. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  414. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  415. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  416. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  417. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  418. package/Runtime/Core/Helper/SpriteHelpers.cs +52 -41
  419. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  420. package/Runtime/Core/Helper/StringInList.cs +61 -35
  421. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  422. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  423. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  424. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +144 -82
  425. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  426. package/Runtime/Core/Helper/WallMath.cs +672 -166
  427. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  428. package/Runtime/Core/Helper.meta +8 -8
  429. package/Runtime/Core/Math/Line2D.cs +263 -0
  430. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  431. package/Runtime/Core/Math/Line3D.cs +452 -0
  432. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  433. package/Runtime/Core/Math/Parabola.cs +241 -47
  434. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  435. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  436. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  437. package/Runtime/Core/Math/Range.cs +157 -92
  438. package/Runtime/Core/Math/Range.cs.meta +11 -11
  439. package/Runtime/Core/Math.meta +8 -8
  440. package/Runtime/Core/Model/Direction.cs +25 -43
  441. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  442. package/Runtime/Core/Model.meta +8 -8
  443. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  444. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  445. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  446. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  447. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  448. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  449. package/Runtime/Core/OneOf/None.cs +30 -4
  450. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  451. package/Runtime/Core/OneOf.meta +8 -8
  452. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  453. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  455. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  456. package/Runtime/Core/Random/IRandom.cs +203 -161
  457. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  458. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  459. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  460. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  461. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  462. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  463. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  464. package/Runtime/Core/Random/PRNG.cs +21 -7
  465. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  466. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  467. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  469. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  470. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  471. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  472. package/Runtime/Core/Random/RandomState.cs +206 -131
  473. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  474. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  475. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  476. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  477. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  478. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  479. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  480. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  481. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  482. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  483. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  484. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  485. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  486. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  487. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  488. package/Runtime/Core/Random/WyRandom.cs +158 -121
  489. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  490. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  491. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  492. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  493. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  494. package/Runtime/Core/Random.meta +8 -8
  495. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  496. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  497. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  498. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  500. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  502. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  504. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  506. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  507. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  508. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  510. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  511. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  512. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  514. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  516. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  518. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  519. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +44 -36
  520. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  521. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  522. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  524. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  526. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  528. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  530. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  532. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  533. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  534. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  536. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  538. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  540. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  548. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  550. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  552. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  554. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  556. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  557. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  558. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  559. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  560. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  562. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  563. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  564. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  566. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  567. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  568. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  569. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  570. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  571. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  572. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  573. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  574. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  575. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  576. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  577. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  578. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  579. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  580. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  581. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  582. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  583. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  584. package/Runtime/Core/Serialization/Serializer.cs +2121 -195
  585. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  586. package/Runtime/Core/Serialization.meta +8 -8
  587. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  588. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  589. package/Runtime/Core/Threading.meta +8 -8
  590. package/Runtime/Core.meta +8 -8
  591. package/Runtime/Integrations/VContainer/AssemblyInfo.cs +9 -0
  592. package/Runtime/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
  593. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +281 -0
  594. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  595. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +189 -0
  596. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  597. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +90 -0
  598. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  599. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs +114 -0
  600. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs.meta +11 -0
  601. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +95 -0
  602. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  603. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs +241 -0
  604. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs.meta +11 -0
  605. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  606. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  607. package/Runtime/Integrations/VContainer.meta +8 -0
  608. package/Runtime/Integrations/Zenject/AssemblyInfo.cs +9 -0
  609. package/Runtime/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
  610. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +247 -0
  611. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  612. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +182 -0
  613. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  614. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +94 -0
  615. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  616. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs +44 -0
  617. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs.meta +11 -0
  618. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +93 -0
  619. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  620. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs +243 -0
  621. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs.meta +11 -0
  622. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  623. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  624. package/Runtime/Integrations/Zenject.meta +8 -0
  625. package/Runtime/Integrations.meta +8 -0
  626. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  627. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  628. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  629. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  630. package/Runtime/Protobuf-Net.meta +8 -8
  631. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  632. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  633. package/Runtime/Tags/Attribute.cs +399 -205
  634. package/Runtime/Tags/Attribute.cs.meta +2 -2
  635. package/Runtime/Tags/AttributeEffect.cs +372 -281
  636. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  637. package/Runtime/Tags/AttributeMetadataCache.cs +500 -0
  638. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  639. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  640. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  641. package/Runtime/Tags/AttributeModification.cs +132 -48
  642. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  643. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  644. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  645. package/Runtime/Tags/AttributesComponent.cs +237 -163
  646. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  647. package/Runtime/Tags/CollisionSenses.cs +117 -91
  648. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  649. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  650. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  651. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  652. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  653. package/Runtime/Tags/EffectHandle.cs +150 -65
  654. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  655. package/Runtime/Tags/EffectHandler.cs +470 -393
  656. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  657. package/Runtime/Tags/ModificationAction.cs +60 -9
  658. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  659. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  660. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  661. package/Runtime/Tags/TagHandler.cs +373 -158
  662. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  663. package/Runtime/Tags.meta +2 -2
  664. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  665. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  666. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  667. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  668. package/Runtime/Utils/Ascii85.cs +132 -115
  669. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  670. package/Runtime/Utils/Buffers.cs +1151 -550
  671. package/Runtime/Utils/Buffers.cs.meta +11 -11
  672. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  673. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  674. package/Runtime/Utils/ChildSpawner.cs +250 -157
  675. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  676. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  677. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  678. package/Runtime/Utils/CollisionProxy.cs +48 -48
  679. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  680. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  681. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  682. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  683. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  684. package/Runtime/Utils/LZMA.cs +276 -53
  685. package/Runtime/Utils/LZMA.cs.meta +2 -2
  686. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  687. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  688. package/Runtime/Utils/MatchTransform.cs +99 -82
  689. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  690. package/Runtime/Utils/Oscillator.cs +27 -27
  691. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  692. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  693. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  694. package/Runtime/Utils/RuntimeSingleton.cs +139 -89
  695. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  696. package/Runtime/Utils/ScriptableObjectSingleton.cs +225 -85
  697. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  698. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  699. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  700. package/Runtime/Utils/SetTextureImportData.cs +71 -69
  701. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  702. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  703. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  704. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  705. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  706. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  707. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  708. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  709. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  710. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  711. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  712. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  713. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  714. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  715. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  716. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  717. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  718. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  719. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  720. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  721. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  722. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  723. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  724. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  725. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  726. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  727. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  728. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  729. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  730. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  731. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  732. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  733. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  734. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  735. package/Runtime/Utils/SevenZip.meta +2 -2
  736. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  737. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  738. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  739. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  740. package/Runtime/Utils/StartTracker.cs +15 -15
  741. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  742. package/Runtime/Utils/TextureScale.cs +364 -179
  743. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  744. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  745. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  746. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  747. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  748. package/Runtime/Utils.meta +8 -8
  749. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  750. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  751. package/Runtime/Visuals/UGUI/EnhancedImage.cs +224 -85
  752. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  753. package/Runtime/Visuals/UGUI.meta +2 -2
  754. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +784 -484
  755. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  756. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  757. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  758. package/Runtime/Visuals/UIToolkit.meta +2 -2
  759. package/Runtime/Visuals.meta +2 -2
  760. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  761. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  762. package/Runtime.meta +8 -8
  763. package/SERIALIZATION.md +663 -0
  764. package/SERIALIZATION.md.meta +7 -0
  765. package/SINGLETONS.md +427 -0
  766. package/SINGLETONS.md.meta +7 -0
  767. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  768. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  769. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  770. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  771. package/SPATIAL_TREE_2D_PERFORMANCE.md +241 -0
  772. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  773. package/SPATIAL_TREE_3D_PERFORMANCE.md +243 -0
  774. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  775. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  776. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  777. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  778. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  779. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  780. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  781. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  782. package/Samples~/DI - VContainer/README.md +515 -0
  783. package/Samples~/DI - VContainer/README.md.meta +8 -0
  784. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  785. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  786. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  787. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +42 -0
  788. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  789. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +24 -0
  790. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  791. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  792. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  793. package/Samples~/DI - VContainer/Scripts/Spawner.cs +130 -0
  794. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  795. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  796. package/Samples~/DI - VContainer.meta +9 -0
  797. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  798. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  799. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  800. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  801. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  802. package/Samples~/DI - Zenject/README.md +553 -0
  803. package/Samples~/DI - Zenject/README.md.meta +7 -0
  804. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  805. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  806. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  807. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +22 -0
  808. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  809. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs +37 -0
  810. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs.meta +12 -0
  811. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  812. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  813. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  814. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  815. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +91 -0
  816. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  817. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  818. package/Samples~/DI - Zenject.meta +9 -0
  819. package/Samples~/Random - PRNG/README.md +13 -0
  820. package/Samples~/Random - PRNG/README.md.meta +8 -0
  821. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  822. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  823. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  824. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  825. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  826. package/Samples~/Random - PRNG.meta +9 -0
  827. package/Samples~/Relational Components - Basic/README.md +21 -0
  828. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  829. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  830. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  831. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  832. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  833. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  834. package/Samples~/Relational Components - Basic.meta +9 -0
  835. package/Samples~/Serialization - JSON/README.md +14 -0
  836. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  837. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  838. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  839. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  840. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  841. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  842. package/Samples~/Serialization - JSON.meta +9 -0
  843. package/Samples~/Spatial Structures - 2D and 3D/README.md +14 -0
  844. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  845. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  846. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  847. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  848. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  849. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  850. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  851. package/Samples~/UGUI - EnhancedImage/README.md +13 -0
  852. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  853. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  854. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  855. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  856. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  857. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  858. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  859. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +13 -0
  860. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  861. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  862. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  863. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  864. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  865. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  866. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  867. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  868. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  869. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  870. package/Shaders/Materials.meta +8 -8
  871. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  872. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  873. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  874. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  875. package/Shaders/ShaderGraph.meta +8 -8
  876. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  877. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  878. package/Shaders/Support.meta +8 -0
  879. package/Shaders.meta +8 -8
  880. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  881. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  882. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  883. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  884. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  885. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  886. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  887. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  888. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  889. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  890. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  891. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  892. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  893. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  894. package/Styles/Elements/Progress.meta +2 -2
  895. package/Styles/Elements.meta +2 -2
  896. package/Styles/USS/ArcedProgressBar.uss +18 -18
  897. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  898. package/Styles/USS/CirclularProgressBar.uss +17 -17
  899. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  900. package/Styles/USS/RegularProgressBar.uss +32 -32
  901. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  902. package/Styles/USS/WigglyProgressBar.uss +16 -16
  903. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  904. package/Styles/USS.meta +2 -2
  905. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  906. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  907. package/Styles.meta +2 -2
  908. package/THIRD_PARTY_NOTICES.md +74 -0
  909. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  910. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +171 -0
  911. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  912. package/Tests/Editor/Attributes.meta +8 -0
  913. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  914. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  915. package/Tests/Editor/Core/Attributes.meta +8 -0
  916. package/Tests/Editor/Core.meta +8 -0
  917. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  918. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  919. package/Tests/Editor/Extensions.meta +3 -0
  920. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  921. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  922. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  923. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  924. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  925. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  926. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  927. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  928. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  929. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  930. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  931. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  932. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  933. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  935. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  936. package/Tests/Editor/Helper.meta +3 -0
  937. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  938. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  939. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +81 -0
  940. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  941. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs +170 -0
  942. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs.meta +11 -0
  943. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +37 -0
  944. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  945. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  946. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +37 -0
  947. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  948. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  949. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  950. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs +131 -0
  951. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs.meta +11 -0
  952. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +80 -0
  953. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  954. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  955. package/Tests/Editor/Integrations.meta +8 -0
  956. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  957. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  958. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  959. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  960. package/Tests/Editor/PersistentDirectorySettingsTests.cs +59 -0
  961. package/Tests/Editor/PersistentDirectorySettingsTests.cs.meta +11 -0
  962. package/Tests/Editor/PrefabCheckerReportTests.cs +32 -0
  963. package/Tests/Editor/PrefabCheckerReportTests.cs.meta +11 -0
  964. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs +64 -0
  965. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs.meta +11 -0
  966. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  967. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  968. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs +38 -0
  969. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  971. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  972. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  973. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  974. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  975. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  976. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  977. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  978. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  979. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  980. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +46 -0
  981. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  982. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  983. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  984. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  985. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  986. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  987. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  988. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  989. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  990. package/Tests/Editor/Sprites.meta +8 -0
  991. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  992. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  993. package/Tests/Editor/TestComponents.meta +8 -0
  994. package/Tests/Editor/Tools/ImageBlurToolTests.cs +47 -0
  995. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  996. package/Tests/Editor/Tools.meta +8 -0
  997. package/Tests/Editor/Utils/CommonTestBase.cs +250 -0
  998. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  999. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  1000. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  1001. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  1002. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  1003. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  1004. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  1005. package/Tests/Editor/Utils.meta +3 -0
  1006. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  1007. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  1008. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +773 -0
  1009. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  1010. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  1011. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  1012. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  1013. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  1014. package/Tests/Editor/Windows.meta +8 -0
  1015. package/Tests/Editor.meta +8 -0
  1016. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  1017. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  1018. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  1019. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  1020. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  1021. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  1022. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  1023. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  1024. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  1025. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  1026. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  1027. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  1028. package/Tests/Runtime/Attributes/Components.meta +2 -2
  1029. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  1030. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  1031. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  1032. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  1034. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  1035. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  1036. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  1037. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  1038. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  1039. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1040. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1041. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1042. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1043. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +98 -0
  1044. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1045. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1046. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1047. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1048. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1049. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1050. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1051. package/Tests/Runtime/Attributes.meta +2 -2
  1052. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1053. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1054. package/Tests/Runtime/Core/Random.meta +8 -0
  1055. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1056. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1057. package/Tests/Runtime/Core/Threading.meta +2 -2
  1058. package/Tests/Runtime/Core.meta +2 -2
  1059. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1060. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1061. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1062. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1064. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1065. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1066. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1068. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1070. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1071. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1072. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1073. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1074. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1075. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1076. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1078. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1080. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1081. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1082. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1084. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1085. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1086. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1088. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1089. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1090. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1091. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1092. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1093. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1094. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1095. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1096. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1097. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1098. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1099. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1100. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1101. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1102. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1103. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1104. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1105. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1106. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1107. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1108. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1109. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1110. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1111. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1112. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1113. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1114. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1115. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1116. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1117. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1118. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1119. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1120. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1121. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1122. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1123. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1124. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1125. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1126. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1127. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1128. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1129. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1130. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1131. package/Tests/Runtime/DataStructures.meta +8 -8
  1132. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1133. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1135. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1136. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1137. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1138. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1139. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1140. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1141. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1142. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1143. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1144. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1145. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1146. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1147. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1148. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1149. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1150. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1151. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1152. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1153. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1154. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1155. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1156. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1157. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1158. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1159. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1160. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1161. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1162. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1163. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1164. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1165. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1166. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1167. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1168. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1169. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1170. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1171. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1172. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1173. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1174. package/Tests/Runtime/Extensions.meta +2 -2
  1175. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1176. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1177. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1178. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1179. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1180. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1181. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1182. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1184. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1185. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1186. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1187. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1188. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1190. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1191. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1192. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1194. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1196. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1198. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1199. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1200. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1201. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1202. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1203. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1204. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1205. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1206. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1207. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1208. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1209. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1210. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1211. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1212. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1213. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1214. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1215. package/Tests/Runtime/Helper.meta +2 -2
  1216. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +601 -0
  1217. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs +86 -0
  1219. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs.meta +11 -0
  1220. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1221. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1222. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1223. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +619 -0
  1224. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1225. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1226. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1227. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1228. package/Tests/Runtime/Integrations.meta +8 -0
  1229. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1230. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1231. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1232. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1233. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1234. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1235. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1236. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1237. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1238. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1239. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1240. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1241. package/Tests/Runtime/Math.meta +8 -0
  1242. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1243. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1244. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1245. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1246. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1247. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1248. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1249. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1250. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1251. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1252. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1253. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1254. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1255. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1256. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +697 -0
  1257. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1258. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +653 -0
  1259. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1260. package/Tests/Runtime/Performance.meta +8 -8
  1261. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1262. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1263. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1264. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1265. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1266. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1267. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1268. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1269. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1270. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1271. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1272. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1273. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1274. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1275. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1276. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1277. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1278. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1279. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1280. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1281. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1282. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1283. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1284. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1285. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1286. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1287. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1288. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1289. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1290. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1291. package/Tests/Runtime/Random.meta +8 -8
  1292. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1293. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1294. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1295. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1296. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1297. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1298. package/Tests/Runtime/Scenes.meta +2 -2
  1299. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1300. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1301. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1302. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1303. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1304. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1305. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1306. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1307. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1308. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1309. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs +30 -0
  1310. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs.meta +11 -0
  1311. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1153 -0
  1312. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1313. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1314. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1315. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1316. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +167 -156
  1318. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1319. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1320. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1321. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1322. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1323. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1324. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1325. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1326. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1327. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1328. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1329. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1330. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1331. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1332. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1333. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +907 -0
  1334. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1335. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs +105 -0
  1336. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1338. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs +247 -0
  1340. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Serialization.meta +2 -2
  1342. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1343. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1344. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1345. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1346. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1347. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1348. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1349. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1350. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1351. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1352. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1353. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1354. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1355. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1356. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1357. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1358. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1359. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1360. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1361. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1362. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1363. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1364. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1365. package/Tests/Runtime/Tags.meta +8 -0
  1366. package/Tests/Runtime/TestUtils/CommonTestBase.cs +301 -0
  1367. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1368. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1369. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1370. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1371. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1372. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1373. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1374. package/Tests/Runtime/TestUtils.meta +8 -0
  1375. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1376. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1378. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1379. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1380. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1381. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1382. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1384. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1386. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1388. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1389. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1390. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1391. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1392. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1393. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1394. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1395. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1396. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1397. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1398. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1399. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1400. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1401. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1402. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1403. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1404. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1405. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1406. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1407. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1408. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1409. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1410. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1411. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1412. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1413. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1414. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1415. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1416. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1417. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1418. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1419. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1420. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1421. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1422. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1423. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1424. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1425. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1426. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1427. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1428. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1429. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1430. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1431. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1432. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1433. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1434. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1435. package/Tests/Runtime/Utils.meta +2 -2
  1436. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1437. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1438. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +153 -0
  1439. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1440. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1441. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1442. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +125 -0
  1443. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1444. package/Tests/Runtime/Visuals.meta +3 -0
  1445. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1446. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1447. package/Tests/Runtime.meta +8 -8
  1448. package/Tests.meta +8 -8
  1449. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1450. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1451. package/URP/VolumeProfiles.meta +8 -8
  1452. package/URP.meta +8 -8
  1453. package/node_modules.meta +8 -0
  1454. package/package-lock.json.meta +7 -0
  1455. package/package.json +99 -38
  1456. package/package.json.meta +7 -7
  1457. package/scripts/check-eol.ps1 +51 -0
  1458. package/scripts/check-eol.ps1.meta +7 -0
  1459. package/scripts/clean-nul.ps1 +29 -0
  1460. package/scripts/clean-nul.ps1.meta +7 -0
  1461. package/scripts/lint-doc-links.ps1 +80 -0
  1462. package/scripts/lint-doc-links.ps1.meta +7 -0
  1463. package/scripts/lint-tests.ps1 +156 -0
  1464. package/scripts/lint-tests.ps1.meta +7 -0
  1465. package/scripts/normalize-eol.ps1 +68 -0
  1466. package/scripts/normalize-eol.ps1.meta +7 -0
  1467. package/scripts.meta +8 -0
  1468. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1469. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1470. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1471. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1472. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1473. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1474. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1475. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1476. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1477. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1478. package/Runtime/Core/Math/Line.cs +0 -55
  1479. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1480. package/Runtime/Core/Math/XXHash.cs +0 -310
  1481. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1482. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1483. package/Tests/Runtime/Components.meta +0 -3
  1484. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1485. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1486. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1487. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1488. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1489. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1490. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1491. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1492. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1493. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1494. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1495. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1496. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1497. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1498. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1499. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1500. package/Third Party Notices.md +0 -1
@@ -1,741 +1,1396 @@
1
- namespace WallstopStudios.UnityHelpers.Editor
2
- {
3
- #if UNITY_EDITOR
4
- using System;
5
- using System.Collections;
6
- using System.Collections.Generic;
7
- using System.IO;
8
- using System.Linq;
9
- using System.Reflection;
10
- using UnityEditor;
11
- using UnityEngine;
12
- using Core.Attributes;
13
- using Core.Extension;
14
- using Core.Helper;
15
- using WallstopStudios.UnityHelpers.Utils;
16
- using Object = UnityEngine.Object;
17
-
18
- public sealed class PrefabChecker : EditorWindow
19
- {
20
- private const float ToggleWidth = 18f;
21
- private const float ToggleSpacing = 4f;
22
-
23
- private static readonly Dictionary<Type, List<FieldInfo>> FieldsByType = new();
24
- private static readonly Dictionary<Type, List<FieldInfo>> ListFieldsByType = new();
25
- private static readonly Dictionary<Type, List<FieldInfo>> StringFieldsByType = new();
26
- private static readonly Dictionary<Type, List<FieldInfo>> ObjectFieldsByType = new();
27
- private static readonly Dictionary<Type, RequireComponent[]> RequiredComponentsByType =
28
- new();
29
-
30
- private readonly List<string> _assetPaths = new();
31
- private Vector2 _scrollPosition;
32
-
33
- private bool _checkMissingScripts = true;
34
- private bool _checkNullElementsInLists = true;
35
- private bool _checkMissingRequiredComponents = true;
36
- private bool _checkEmptyStringFields;
37
- private bool _checkNullObjectReferences = true;
38
- private bool _onlyCheckNullObjectsWithAttribute = true;
39
- private bool _checkDisabledRootGameObjects = true;
40
- private bool _checkDisabledComponents;
41
-
42
- private const string DefaultPrefabsFolder = "Assets/Prefabs";
43
-
44
- [MenuItem("Tools/Wallstop Studios/Unity Helpers/Prefab Checker", priority = -1)]
45
- public static void ShowWindow()
46
- {
47
- GetWindow<PrefabChecker>("Prefab Check");
48
- }
49
-
50
- private void OnEnable()
51
- {
52
- PopulateDefaultPaths();
53
- }
54
-
55
- private void PopulateDefaultPaths()
56
- {
57
- if (_assetPaths.Count == 0 && AssetDatabase.IsValidFolder(DefaultPrefabsFolder))
58
- {
59
- _assetPaths.Add(DefaultPrefabsFolder);
60
- }
61
- }
62
-
63
- private void OnGUI()
64
- {
65
- _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
66
- try
67
- {
68
- DrawConfigurationOptions();
69
-
70
- EditorGUILayout.Space();
71
- EditorGUILayout.LabelField("Target Folders", EditorStyles.boldLabel);
72
- DrawAssetPaths();
73
- if (GUILayout.Button("Add Folder"))
74
- {
75
- AddFolder();
76
- }
77
-
78
- EditorGUILayout.Space();
79
- if (GUILayout.Button("Run Checks", GUILayout.Height(30)))
80
- {
81
- RunChecks();
82
- }
83
- }
84
- finally
85
- {
86
- EditorGUILayout.EndScrollView();
87
- }
88
- }
89
-
90
- private void DrawConfigurationOptions()
91
- {
92
- EditorGUILayout.LabelField("Validation Checks", EditorStyles.boldLabel);
93
-
94
- Func<GUIContent, bool, float?, bool, bool> drawRightAlignedToggle =
95
- SetupDrawRightAlignedToggle();
96
-
97
- float targetAlignmentX = 0f;
98
- bool alignmentCalculated = false;
99
-
100
- DrawAndAlign(
101
- new GUIContent(
102
- "Missing Scripts",
103
- "Check for GameObjects with missing script references."
104
- ),
105
- () => _checkMissingScripts,
106
- v => _checkMissingScripts = v,
107
- false
108
- );
109
- DrawAndAlign(
110
- new GUIContent(
111
- "Nulls in Lists/Arrays",
112
- "Check for null elements within serialized lists or arrays."
113
- ),
114
- () => _checkNullElementsInLists,
115
- v => _checkNullElementsInLists = v,
116
- false
117
- );
118
- DrawAndAlign(
119
- new GUIContent(
120
- "Missing Required Components",
121
- "Check if components are missing dependencies defined by [RequireComponent]."
122
- ),
123
- () => _checkMissingRequiredComponents,
124
- v => _checkMissingRequiredComponents = v,
125
- false
126
- );
127
- DrawAndAlign(
128
- new GUIContent(
129
- "Empty String Fields",
130
- "Check for serialized string fields that are empty."
131
- ),
132
- () => _checkEmptyStringFields,
133
- v => _checkEmptyStringFields = v,
134
- false
135
- );
136
-
137
- DrawAndAlign(
138
- new GUIContent(
139
- "Null Object References",
140
- "Check for serialized UnityEngine.Object fields that are null."
141
- ),
142
- () => _checkNullObjectReferences,
143
- v => _checkNullObjectReferences = v,
144
- false
145
- );
146
-
147
- bool wasEnabled = GUI.enabled;
148
- GUI.enabled = wasEnabled && _checkNullObjectReferences;
149
- try
150
- {
151
- using EditorGUI.IndentLevelScope indent = new();
152
- DrawAndAlign(
153
- new GUIContent(
154
- "Only if [ValidateAssignment]",
155
- "Only report null object references if the field has the [ValidateAssignment] attribute."
156
- ),
157
- () => _onlyCheckNullObjectsWithAttribute,
158
- v => _onlyCheckNullObjectsWithAttribute = v,
159
- true
160
- );
161
- }
162
- finally
163
- {
164
- GUI.enabled = wasEnabled;
165
- }
166
-
167
- DrawAndAlign(
168
- new GUIContent(
169
- "Disabled Root GameObject",
170
- "Check if the prefab's root GameObject is inactive."
171
- ),
172
- () => _checkDisabledRootGameObjects,
173
- v => _checkDisabledRootGameObjects = v,
174
- false
175
- );
176
- DrawAndAlign(
177
- new GUIContent(
178
- "Disabled Components",
179
- "Check for any components on the prefab that are disabled."
180
- ),
181
- () => _checkDisabledComponents,
182
- v => _checkDisabledComponents = v,
183
- false
184
- );
185
- return;
186
-
187
- void DrawAndAlign(
188
- GUIContent content,
189
- Func<bool> getter,
190
- Action<bool> setter,
191
- bool isNested
192
- )
193
- {
194
- switch (alignmentCalculated)
195
- {
196
- case false when !isNested:
197
- {
198
- float viewWidth = EditorGUIUtility.currentViewWidth;
199
-
200
- float availableWidth = viewWidth - 18f;
201
- targetAlignmentX = availableWidth - ToggleWidth;
202
- alignmentCalculated = true;
203
- break;
204
- }
205
- case false when isNested:
206
- {
207
- float viewWidth = EditorGUIUtility.currentViewWidth;
208
- float availableWidth = viewWidth - 20f - 15f;
209
- targetAlignmentX = availableWidth - ToggleWidth;
210
- alignmentCalculated = true;
211
- this.LogWarn(
212
- $"Calculated alignment X based on first item being nested. Alignment might be approximate."
213
- );
214
- break;
215
- }
216
- }
217
-
218
- float? overrideX = isNested ? targetAlignmentX : null;
219
-
220
- bool newValue = drawRightAlignedToggle(content, getter(), overrideX, isNested);
221
- if (newValue != getter())
222
- {
223
- setter(newValue);
224
- }
225
- }
226
- }
227
-
228
- private static Func<GUIContent, bool, float?, bool, bool> SetupDrawRightAlignedToggle()
229
- {
230
- return (label, value, overrideToggleX, isNested) =>
231
- {
232
- Rect lineRect;
233
- if (isNested)
234
- {
235
- EditorGUI.indentLevel++;
236
- }
237
-
238
- try
239
- {
240
- lineRect = EditorGUILayout.GetControlRect(
241
- true,
242
- EditorGUIUtility.singleLineHeight
243
- );
244
- }
245
- finally
246
- {
247
- if (isNested)
248
- {
249
- EditorGUI.indentLevel--;
250
- }
251
- }
252
-
253
- float defaultToggleX = lineRect.x + lineRect.width - ToggleWidth;
254
- float finalToggleX = overrideToggleX ?? defaultToggleX;
255
-
256
- finalToggleX = Mathf.Max(finalToggleX, lineRect.x + ToggleSpacing);
257
-
258
- Rect toggleRect = new(finalToggleX, lineRect.y, ToggleWidth, lineRect.height);
259
-
260
- float labelWidth = Mathf.Max(0, finalToggleX - lineRect.x - ToggleSpacing);
261
- Rect labelRect = new(lineRect.x, lineRect.y, labelWidth, lineRect.height);
262
-
263
- EditorGUI.LabelField(labelRect, label);
264
- return EditorGUI.Toggle(toggleRect, value);
265
- };
266
- }
267
-
268
- private void DrawAssetPaths()
269
- {
270
- if (_assetPaths.Count == 0)
271
- {
272
- EditorGUILayout.HelpBox(
273
- "No target folders specified. Add folders containing prefabs to check.",
274
- MessageType.Info
275
- );
276
- }
277
-
278
- List<string> pathsToRemove = null;
279
-
280
- foreach (string assetPath in _assetPaths)
281
- {
282
- using (new EditorGUILayout.HorizontalScope())
283
- {
284
- string currentPath = assetPath;
285
- EditorGUILayout.LabelField(currentPath);
286
-
287
- DefaultAsset folderAsset = AssetDatabase.LoadAssetAtPath<DefaultAsset>(
288
- currentPath
289
- );
290
- if (folderAsset != null)
291
- {
292
- if (GUILayout.Button("Ping", GUILayout.Width(50)))
293
- {
294
- EditorGUIUtility.PingObject(folderAsset);
295
- }
296
- }
297
- else
298
- {
299
- GUILayout.Space(56);
300
- }
301
-
302
- if (GUILayout.Button("X", GUILayout.Width(25)))
303
- {
304
- pathsToRemove ??= new List<string>();
305
- pathsToRemove.Add(currentPath);
306
- }
307
- }
308
- }
309
-
310
- if (pathsToRemove != null)
311
- {
312
- foreach (string path in pathsToRemove)
313
- {
314
- _assetPaths.Remove(path);
315
- }
316
- Repaint();
317
- }
318
- }
319
-
320
- private void AddFolder()
321
- {
322
- string projectPath = Directory.GetParent(Application.dataPath)?.FullName;
323
- if (string.IsNullOrWhiteSpace(projectPath))
324
- {
325
- this.LogError($"Failed to find project path!");
326
- return;
327
- }
328
- string absolutePath = EditorUtility.OpenFolderPanel(
329
- "Select Prefab Folder",
330
- "Assets",
331
- ""
332
- );
333
-
334
- if (!string.IsNullOrEmpty(absolutePath))
335
- {
336
- if (absolutePath.StartsWith(projectPath, StringComparison.Ordinal))
337
- {
338
- string relativePath =
339
- "Assets" + absolutePath.Substring(projectPath.Length).Replace('\\', '/');
340
-
341
- if (AssetDatabase.IsValidFolder(relativePath))
342
- {
343
- if (!_assetPaths.Contains(relativePath))
344
- {
345
- _assetPaths.Add(relativePath);
346
- }
347
- else
348
- {
349
- this.LogWarn($"Folder '{relativePath}' is already in the list.");
350
- }
351
- }
352
- else
353
- {
354
- this.LogWarn(
355
- $"Selected path '{relativePath}' is not a valid Unity folder."
356
- );
357
- }
358
- }
359
- else
360
- {
361
- this.LogError(
362
- $"Selected folder must be inside the Unity project's Assets folder. Project path: {projectPath}, Selected path: {absolutePath}"
363
- );
364
- }
365
- }
366
- }
367
-
368
- private void RunChecks()
369
- {
370
- if (_assetPaths is not { Count: > 0 })
371
- {
372
- this.LogError($"No asset paths specified. Add folders containing prefabs.");
373
- return;
374
- }
375
-
376
- List<string> validPaths = _assetPaths
377
- .Where(p => !string.IsNullOrEmpty(p) && AssetDatabase.IsValidFolder(p))
378
- .ToList();
379
-
380
- if (validPaths.Count == 0)
381
- {
382
- this.LogError(
383
- $"None of the specified paths are valid folders: {string.Join(", ", _assetPaths)}"
384
- );
385
- return;
386
- }
387
-
388
- this.Log($"Starting prefab check for folders: {string.Join(", ", validPaths)}");
389
- int totalPrefabsChecked = 0;
390
- int totalIssuesFound = 0;
391
-
392
- foreach (GameObject prefab in Helpers.EnumeratePrefabs(validPaths))
393
- {
394
- totalPrefabsChecked++;
395
- int issuesForThisPrefab = 0;
396
- string prefabPath = AssetDatabase.GetAssetPath(prefab);
397
-
398
- if (_checkDisabledRootGameObjects && !prefab.activeSelf)
399
- {
400
- prefab.LogWarn($"Prefab root GameObject is disabled.");
401
- issuesForThisPrefab++;
402
- }
403
-
404
- using PooledResource<List<MonoBehaviour>> componentBufferResource =
405
- Buffers<MonoBehaviour>.List.Get();
406
- List<MonoBehaviour> componentBuffer = componentBufferResource.resource;
407
- prefab.GetComponentsInChildren(true, componentBuffer);
408
-
409
- foreach (MonoBehaviour script in componentBuffer)
410
- {
411
- if (_checkMissingScripts && !script)
412
- {
413
- GameObject owner = FindOwnerOfMissingScript(prefab, componentBuffer);
414
- string ownerName = owner ? owner.name : "[[Unknown GameObject]]";
415
- Object context = owner ? (Object)owner : prefab;
416
- context.LogError($"Detected missing script on GameObject '{ownerName}'.");
417
- issuesForThisPrefab++;
418
- continue;
419
- }
420
-
421
- if (!script)
422
- {
423
- continue;
424
- }
425
-
426
- Type scriptType = script.GetType();
427
- GameObject ownerGameObject = script.gameObject;
428
-
429
- if (_checkNullElementsInLists)
430
- {
431
- issuesForThisPrefab += ValidateNoNullsInLists(script, ownerGameObject);
432
- }
433
-
434
- if (_checkMissingRequiredComponents)
435
- {
436
- issuesForThisPrefab += ValidateRequiredComponents(script, ownerGameObject);
437
- }
438
-
439
- if (_checkEmptyStringFields)
440
- {
441
- issuesForThisPrefab += ValidateEmptyStrings(script, ownerGameObject);
442
- }
443
-
444
- if (_checkNullObjectReferences)
445
- {
446
- issuesForThisPrefab += ValidateNullObjectReferences(
447
- script,
448
- ownerGameObject
449
- );
450
- }
451
-
452
- if (_checkDisabledComponents && script is Behaviour { enabled: false })
453
- {
454
- ownerGameObject.LogWarn(
455
- $"Component '{scriptType.Name}' on GameObject '{ownerGameObject.name}' is disabled."
456
- );
457
- issuesForThisPrefab++;
458
- }
459
- }
460
-
461
- if (issuesForThisPrefab > 0)
462
- {
463
- prefab.LogWarn(
464
- $"Prefab '{prefab.name}' at path '{prefabPath}' has {issuesForThisPrefab} potential issues."
465
- );
466
- totalIssuesFound += issuesForThisPrefab;
467
- }
468
- }
469
-
470
- if (totalIssuesFound > 0)
471
- {
472
- this.LogError(
473
- $"Prefab check complete. Found {totalIssuesFound} potential issues across {totalPrefabsChecked} prefabs."
474
- );
475
- }
476
- else
477
- {
478
- this.Log(
479
- $"Prefab check complete. No issues found in {totalPrefabsChecked} prefabs."
480
- );
481
- }
482
- }
483
-
484
- private static GameObject FindOwnerOfMissingScript(
485
- GameObject prefabRoot,
486
- List<MonoBehaviour> buffer
487
- )
488
- {
489
- using PooledResource<List<Transform>> transformBufferResource =
490
- Buffers<Transform>.List.Get();
491
- List<Transform> transforms = transformBufferResource.resource;
492
- prefabRoot.GetComponentsInChildren(true, transforms);
493
- foreach (Transform transform in transforms)
494
- {
495
- using PooledResource<List<MonoBehaviour>> componentBuffer =
496
- Buffers<MonoBehaviour>.List.Get();
497
- List<MonoBehaviour> components = componentBuffer.resource;
498
- transform.GetComponents(components);
499
- int bufferCount = 0;
500
- foreach (MonoBehaviour c in components)
501
- {
502
- if (c != null && c.gameObject == transform.gameObject)
503
- {
504
- ++bufferCount;
505
- }
506
- }
507
- if (components.Count == bufferCount)
508
- {
509
- continue;
510
- }
511
-
512
- bool foundInNonNullBuffer = false;
513
- foreach (MonoBehaviour c in components)
514
- {
515
- if (buffer.Contains(c))
516
- {
517
- foundInNonNullBuffer = true;
518
- break;
519
- }
520
- }
521
-
522
- if (foundInNonNullBuffer)
523
- {
524
- return transform.gameObject;
525
- }
526
-
527
- if (components.Count != 0 || !buffer.Exists(c => c == null))
528
- {
529
- continue;
530
- }
531
-
532
- using PooledResource<HashSet<GameObject>> setResource =
533
- Buffers<GameObject>.HashSet.Get();
534
- HashSet<GameObject> gameObjectsWithComponentsInBuffer = setResource.resource;
535
- foreach (MonoBehaviour c in buffer)
536
- {
537
- if (c != null)
538
- {
539
- gameObjectsWithComponentsInBuffer.Add(c.gameObject);
540
- }
541
- }
542
- if (!gameObjectsWithComponentsInBuffer.Contains(transform.gameObject))
543
- {
544
- return transform.gameObject;
545
- }
546
- }
547
-
548
- return prefabRoot;
549
- }
550
-
551
- private static IEnumerable<FieldInfo> GetFieldsToCheck(
552
- Type componentType,
553
- Dictionary<Type, List<FieldInfo>> cache
554
- )
555
- {
556
- return cache.GetOrAdd(
557
- componentType,
558
- type =>
559
- type.GetFields(
560
- BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
561
- )
562
- .Where(field =>
563
- field.IsPublic
564
- || field.IsAttributeDefined<SerializeField>(out _, inherit: true)
565
- )
566
- .ToList()
567
- );
568
- }
569
-
570
- private static int ValidateNoNullsInLists(Object component, GameObject context)
571
- {
572
- int issueCount = 0;
573
- Type componentType = component.GetType();
574
-
575
- foreach (
576
- FieldInfo field in ListFieldsByType.GetOrAdd(
577
- componentType,
578
- type =>
579
- GetFieldsToCheck(type, FieldsByType)
580
- .Where(f =>
581
- typeof(IEnumerable).IsAssignableFrom(f.FieldType)
582
- && f.FieldType != typeof(string)
583
- )
584
- .ToList()
585
- )
586
- )
587
- {
588
- object fieldValue = field.GetValue(component);
589
-
590
- if (fieldValue is not IEnumerable list)
591
- {
592
- continue;
593
- }
594
-
595
- int index = 0;
596
- if (list is Object unityObject)
597
- {
598
- if (list.GetType() != typeof(Transform) && unityObject == null)
599
- {
600
- unityObject.LogError(
601
- $"Field '{field.Name}' ({field.FieldType.Name}) on component '{componentType.Name}' has a null enumerable."
602
- );
603
- }
604
- continue;
605
- }
606
- foreach (object element in list)
607
- {
608
- if (element == null || (element is Object unityObj && !unityObj))
609
- {
610
- context.LogError(
611
- $"Field '{field.Name}' ({field.FieldType.Name}) on component '{componentType.Name}' has a null or missing element at index {index}."
612
- );
613
- issueCount++;
614
- }
615
- index++;
616
- }
617
- }
618
- return issueCount;
619
- }
620
-
621
- private static int ValidateRequiredComponents(Component component, GameObject context)
622
- {
623
- int issueCount = 0;
624
- Type componentType = component.GetType();
625
-
626
- RequireComponent[] required = RequiredComponentsByType.GetOrAdd(
627
- componentType,
628
- type => type.GetAllAttributesSafe<RequireComponent>(inherit: true)
629
- );
630
-
631
- if (required.Length <= 0)
632
- {
633
- return issueCount;
634
- }
635
-
636
- foreach (RequireComponent requirement in required)
637
- {
638
- if (
639
- requirement.m_Type0 != null
640
- && component.GetComponent(requirement.m_Type0) == null
641
- )
642
- {
643
- context.LogError(
644
- $"Component '{componentType.Name}' requires component '{requirement.m_Type0.Name}', but it is missing."
645
- );
646
- issueCount++;
647
- }
648
- if (
649
- requirement.m_Type1 != null
650
- && component.GetComponent(requirement.m_Type1) == null
651
- )
652
- {
653
- context.LogError(
654
- $"Component '{componentType.Name}' requires component '{requirement.m_Type1.Name}', but it is missing."
655
- );
656
- issueCount++;
657
- }
658
- if (
659
- requirement.m_Type2 != null
660
- && component.GetComponent(requirement.m_Type2) == null
661
- )
662
- {
663
- context.LogError(
664
- $"Component '{componentType.Name}' requires component '{requirement.m_Type2.Name}', but it is missing."
665
- );
666
- issueCount++;
667
- }
668
- }
669
- return issueCount;
670
- }
671
-
672
- private static int ValidateEmptyStrings(Object component, GameObject context)
673
- {
674
- int issueCount = 0;
675
- Type componentType = component.GetType();
676
-
677
- foreach (
678
- FieldInfo field in StringFieldsByType.GetOrAdd(
679
- componentType,
680
- type =>
681
- GetFieldsToCheck(type, FieldsByType)
682
- .Where(f => f.FieldType == typeof(string))
683
- .ToList()
684
- )
685
- )
686
- {
687
- object fieldValue = field.GetValue(component);
688
- if (fieldValue is string stringValue && string.IsNullOrEmpty(stringValue))
689
- {
690
- context.LogWarn(
691
- $"String field '{field.Name}' on component '{componentType.Name}' is null or empty."
692
- );
693
- issueCount++;
694
- }
695
- }
696
- return issueCount;
697
- }
698
-
699
- private int ValidateNullObjectReferences(Object component, GameObject context)
700
- {
701
- int issueCount = 0;
702
- Type componentType = component.GetType();
703
-
704
- foreach (
705
- FieldInfo field in ObjectFieldsByType.GetOrAdd(
706
- componentType,
707
- type =>
708
- GetFieldsToCheck(type, FieldsByType)
709
- .Where(f => typeof(Object).IsAssignableFrom(f.FieldType))
710
- .ToList()
711
- )
712
- )
713
- {
714
- bool hasValidateAttribute = field.IsAttributeDefined<ValidateAssignmentAttribute>(
715
- out _,
716
- inherit: true
717
- );
718
-
719
- if (_onlyCheckNullObjectsWithAttribute && !hasValidateAttribute)
720
- {
721
- continue;
722
- }
723
-
724
- object fieldValue = field.GetValue(component);
725
-
726
- if (fieldValue != null && (fieldValue is not Object unityObj || unityObj))
727
- {
728
- continue;
729
- }
730
-
731
- string attributeMarker = hasValidateAttribute ? " (has [ValidateAssignment])" : "";
732
- context.LogError(
733
- $"Object reference field '{field.Name}'{attributeMarker} on component '{componentType.Name}' is null or missing."
734
- );
735
- issueCount++;
736
- }
737
- return issueCount;
738
- }
739
- }
740
- #endif
741
- }
1
+ namespace WallstopStudios.UnityHelpers.Editor
2
+ {
3
+ #if UNITY_EDITOR
4
+ using System;
5
+ using System.Collections;
6
+ using System.Collections.Generic;
7
+ using System.Diagnostics;
8
+ using System.IO;
9
+ using System.Reflection;
10
+ using UnityEditor;
11
+ using UnityEditorInternal;
12
+ using UnityEngine;
13
+ using WallstopStudios.UnityHelpers.Core.Attributes;
14
+ using WallstopStudios.UnityHelpers.Core.Extension;
15
+ using WallstopStudios.UnityHelpers.Core.Helper;
16
+ using WallstopStudios.UnityHelpers.Editor.Utils;
17
+ using WallstopStudios.UnityHelpers.Utils;
18
+ using Object = UnityEngine.Object;
19
+
20
+ public sealed class PrefabChecker : EditorWindow
21
+ {
22
+ private const string ToolName = "PrefabChecker";
23
+ private const string TargetContextKey = "TargetFolder";
24
+ private const float ToggleWidth = 18f;
25
+ private const float ToggleSpacing = 4f;
26
+
27
+ private static readonly Dictionary<Type, List<FieldInfo>> FieldsByType = new();
28
+ private static readonly Dictionary<Type, List<FieldInfo>> ListFieldsByType = new();
29
+ private static readonly Dictionary<Type, List<FieldInfo>> StringFieldsByType = new();
30
+ private static readonly Dictionary<Type, List<FieldInfo>> ObjectFieldsByType = new();
31
+ private static readonly Dictionary<Type, RequireComponent[]> RequiredComponentsByType =
32
+ new();
33
+
34
+ internal List<string> _assetPaths = new();
35
+ private ReorderableList _pathsList;
36
+ private Vector2 _scrollPosition;
37
+
38
+ private bool _checkMissingScripts = true;
39
+ private bool _checkNullElementsInLists = true;
40
+ private bool _checkMissingRequiredComponents = true;
41
+ private bool _checkEmptyStringFields;
42
+ private bool _checkNullObjectReferences = true;
43
+ private bool _onlyCheckNullObjectsWithAttribute = true;
44
+ private bool _checkDisabledRootGameObjects = true;
45
+ private bool _checkDisabledComponents;
46
+ private bool _offerAutoFixes;
47
+
48
+ private readonly List<string> _includeLabels = new();
49
+ private readonly List<string> _excludeLabels = new();
50
+ private string _componentTypeDenyListCsv = string.Empty;
51
+
52
+ private const int MaxTransformScanForMissingOwner = 5000;
53
+
54
+ private const string DefaultPrefabsFolder = "Assets/Prefabs";
55
+
56
+ [MenuItem("Tools/Wallstop Studios/Unity Helpers/Prefab Checker", priority = -1)]
57
+ public static void ShowWindow()
58
+ {
59
+ GetWindow<PrefabChecker>("Prefab Check");
60
+ }
61
+
62
+ private void OnEnable()
63
+ {
64
+ PopulateDefaultPaths();
65
+ TryRestoreFromHistory();
66
+ SetupReorderableList();
67
+ }
68
+
69
+ private void PopulateDefaultPaths()
70
+ {
71
+ // Avoid implicit state when running in tests or suppressed UI contexts
72
+ if (EditorUi.Suppress)
73
+ {
74
+ return;
75
+ }
76
+
77
+ if (_assetPaths.Count == 0 && AssetDatabase.IsValidFolder(DefaultPrefabsFolder))
78
+ {
79
+ _assetPaths.Add(DefaultPrefabsFolder);
80
+ }
81
+ }
82
+
83
+ private void OnGUI()
84
+ {
85
+ _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
86
+ try
87
+ {
88
+ DrawConfigurationOptions();
89
+
90
+ EditorGUILayout.Space();
91
+ EditorGUILayout.LabelField("Target Folders", EditorStyles.boldLabel);
92
+ DrawAssetPaths();
93
+ if (GUILayout.Button("Add Folder"))
94
+ {
95
+ AddFolder();
96
+ }
97
+
98
+ HandleDragAndDropForPaths();
99
+
100
+ EditorGUILayout.Space();
101
+ DrawFiltersAndUtilities();
102
+ EditorGUILayout.Space();
103
+ if (GUILayout.Button("Run Checks", GUILayout.Height(30)))
104
+ {
105
+ RunChecksImproved();
106
+ }
107
+ using (new EditorGUILayout.HorizontalScope())
108
+ {
109
+ GUI.enabled = _offerAutoFixes;
110
+ if (GUILayout.Button("Fix Missing Scripts"))
111
+ {
112
+ FixMissingScripts();
113
+ }
114
+ GUI.enabled = true;
115
+ if (GUILayout.Button("Export Report (JSON)"))
116
+ {
117
+ ExportLastReport();
118
+ }
119
+ if (GUILayout.Button("Export Report (CSV)"))
120
+ {
121
+ ExportLastReportCsv();
122
+ }
123
+ }
124
+ }
125
+ finally
126
+ {
127
+ EditorGUILayout.EndScrollView();
128
+ }
129
+ }
130
+
131
+ private void DrawConfigurationOptions()
132
+ {
133
+ EditorGUILayout.LabelField("Validation Checks", EditorStyles.boldLabel);
134
+
135
+ Func<GUIContent, bool, float?, bool, bool> drawRightAlignedToggle =
136
+ SetupDrawRightAlignedToggle();
137
+
138
+ float targetAlignmentX = 0f;
139
+ bool alignmentCalculated = false;
140
+
141
+ DrawAndAlign(
142
+ new GUIContent(
143
+ "Missing Scripts",
144
+ "Check for GameObjects with missing script references."
145
+ ),
146
+ () => _checkMissingScripts,
147
+ v => _checkMissingScripts = v,
148
+ false
149
+ );
150
+ DrawAndAlign(
151
+ new GUIContent(
152
+ "Nulls in Lists/Arrays",
153
+ "Check for null elements within serialized lists or arrays."
154
+ ),
155
+ () => _checkNullElementsInLists,
156
+ v => _checkNullElementsInLists = v,
157
+ false
158
+ );
159
+ DrawAndAlign(
160
+ new GUIContent(
161
+ "Missing Required Components",
162
+ "Check if components are missing dependencies defined by [RequireComponent]."
163
+ ),
164
+ () => _checkMissingRequiredComponents,
165
+ v => _checkMissingRequiredComponents = v,
166
+ false
167
+ );
168
+ DrawAndAlign(
169
+ new GUIContent(
170
+ "Empty String Fields",
171
+ "Check for serialized string fields that are empty."
172
+ ),
173
+ () => _checkEmptyStringFields,
174
+ v => _checkEmptyStringFields = v,
175
+ false
176
+ );
177
+
178
+ DrawAndAlign(
179
+ new GUIContent(
180
+ "Null Object References",
181
+ "Check for serialized UnityEngine.Object fields that are null."
182
+ ),
183
+ () => _checkNullObjectReferences,
184
+ v => _checkNullObjectReferences = v,
185
+ false
186
+ );
187
+
188
+ bool wasEnabled = GUI.enabled;
189
+ GUI.enabled = wasEnabled && _checkNullObjectReferences;
190
+ try
191
+ {
192
+ using EditorGUI.IndentLevelScope indent = new();
193
+ DrawAndAlign(
194
+ new GUIContent(
195
+ "Only if [ValidateAssignment]",
196
+ "Only report null object references if the field has the [ValidateAssignment] attribute."
197
+ ),
198
+ () => _onlyCheckNullObjectsWithAttribute,
199
+ v => _onlyCheckNullObjectsWithAttribute = v,
200
+ true
201
+ );
202
+ }
203
+ finally
204
+ {
205
+ GUI.enabled = wasEnabled;
206
+ }
207
+
208
+ DrawAndAlign(
209
+ new GUIContent(
210
+ "Disabled Root GameObject",
211
+ "Check if the prefab's root GameObject is inactive."
212
+ ),
213
+ () => _checkDisabledRootGameObjects,
214
+ v => _checkDisabledRootGameObjects = v,
215
+ false
216
+ );
217
+ DrawAndAlign(
218
+ new GUIContent(
219
+ "Disabled Components",
220
+ "Check for any components on the prefab that are disabled."
221
+ ),
222
+ () => _checkDisabledComponents,
223
+ v => _checkDisabledComponents = v,
224
+ false
225
+ );
226
+ return;
227
+
228
+ void DrawAndAlign(
229
+ GUIContent content,
230
+ Func<bool> getter,
231
+ Action<bool> setter,
232
+ bool isNested
233
+ )
234
+ {
235
+ switch (alignmentCalculated)
236
+ {
237
+ case false when !isNested:
238
+ {
239
+ float viewWidth = EditorGUIUtility.currentViewWidth;
240
+
241
+ float availableWidth = viewWidth - 18f;
242
+ targetAlignmentX = availableWidth - ToggleWidth;
243
+ alignmentCalculated = true;
244
+ break;
245
+ }
246
+ case false when isNested:
247
+ {
248
+ float viewWidth = EditorGUIUtility.currentViewWidth;
249
+ float availableWidth = viewWidth - 20f - 15f;
250
+ targetAlignmentX = availableWidth - ToggleWidth;
251
+ alignmentCalculated = true;
252
+ this.LogWarn(
253
+ $"Calculated alignment X based on first item being nested. Alignment might be approximate."
254
+ );
255
+ break;
256
+ }
257
+ }
258
+
259
+ float? overrideX = isNested ? targetAlignmentX : null;
260
+
261
+ bool newValue = drawRightAlignedToggle(content, getter(), overrideX, isNested);
262
+ if (newValue != getter())
263
+ {
264
+ setter(newValue);
265
+ }
266
+ }
267
+ }
268
+
269
+ private static Func<GUIContent, bool, float?, bool, bool> SetupDrawRightAlignedToggle()
270
+ {
271
+ return (label, value, overrideToggleX, isNested) =>
272
+ {
273
+ Rect lineRect;
274
+ if (isNested)
275
+ {
276
+ EditorGUI.indentLevel++;
277
+ }
278
+
279
+ try
280
+ {
281
+ lineRect = EditorGUILayout.GetControlRect(
282
+ true,
283
+ EditorGUIUtility.singleLineHeight
284
+ );
285
+ }
286
+ finally
287
+ {
288
+ if (isNested)
289
+ {
290
+ EditorGUI.indentLevel--;
291
+ }
292
+ }
293
+
294
+ float defaultToggleX = lineRect.x + lineRect.width - ToggleWidth;
295
+ float finalToggleX = overrideToggleX ?? defaultToggleX;
296
+
297
+ finalToggleX = Mathf.Max(finalToggleX, lineRect.x + ToggleSpacing);
298
+
299
+ Rect toggleRect = new(finalToggleX, lineRect.y, ToggleWidth, lineRect.height);
300
+
301
+ float labelWidth = Mathf.Max(0, finalToggleX - lineRect.x - ToggleSpacing);
302
+ Rect labelRect = new(lineRect.x, lineRect.y, labelWidth, lineRect.height);
303
+
304
+ EditorGUI.LabelField(labelRect, label);
305
+ return EditorGUI.Toggle(toggleRect, value);
306
+ };
307
+ }
308
+
309
+ private void DrawAssetPaths()
310
+ {
311
+ if (_pathsList == null)
312
+ {
313
+ SetupReorderableList();
314
+ }
315
+ _pathsList.DoLayoutList();
316
+ }
317
+
318
+ private void AddFolder()
319
+ {
320
+ string absolutePath = EditorUi.OpenFolderPanel(
321
+ "Select Prefab Folder",
322
+ "Assets",
323
+ string.Empty
324
+ );
325
+
326
+ if (string.IsNullOrWhiteSpace(absolutePath))
327
+ {
328
+ return;
329
+ }
330
+
331
+ _ = TryAddFolderFromAbsolute(absolutePath);
332
+ }
333
+
334
+ internal bool TryAddFolderFromAbsolute(string absolutePath)
335
+ {
336
+ if (!TryGetUnityFolderFromAbsolute(absolutePath, out string relativePath))
337
+ {
338
+ this.LogError(
339
+ $"Selected folder must be inside the Unity project's Assets folder. Selected path: {absolutePath}"
340
+ );
341
+ return false;
342
+ }
343
+
344
+ return AddAssetFolder(relativePath);
345
+ }
346
+
347
+ internal bool AddAssetFolder(string relativePath)
348
+ {
349
+ if (string.IsNullOrWhiteSpace(relativePath))
350
+ {
351
+ return false;
352
+ }
353
+
354
+ if (
355
+ relativePath.Equals("Assets", StringComparison.Ordinal)
356
+ || AssetDatabase.IsValidFolder(relativePath)
357
+ )
358
+ {
359
+ if (!_assetPaths.Contains(relativePath))
360
+ {
361
+ _assetPaths.Add(relativePath);
362
+ TryRecordHistory(relativePath);
363
+ return true;
364
+ }
365
+
366
+ this.LogWarn($"Folder '{relativePath}' is already in the list.");
367
+ return false;
368
+ }
369
+
370
+ this.LogWarn($"Selected path '{relativePath}' is not a valid Unity folder.");
371
+ return false;
372
+ }
373
+
374
+ private static bool TryGetUnityFolderFromAbsolute(
375
+ string absolutePath,
376
+ out string unityRelative
377
+ )
378
+ {
379
+ unityRelative = string.Empty;
380
+ if (string.IsNullOrWhiteSpace(absolutePath))
381
+ {
382
+ return false;
383
+ }
384
+
385
+ string rel = DirectoryHelper.AbsoluteToUnityRelativePath(absolutePath);
386
+ if (string.IsNullOrWhiteSpace(rel))
387
+ {
388
+ return false;
389
+ }
390
+
391
+ // Normalize slashes and casing for consistency
392
+ rel = rel.Replace('\\', '/');
393
+ if (rel.StartsWith("assets/", StringComparison.OrdinalIgnoreCase))
394
+ {
395
+ rel = "Assets/" + rel.Substring("assets/".Length);
396
+ }
397
+ else if (string.Equals(rel, "assets", StringComparison.OrdinalIgnoreCase))
398
+ {
399
+ rel = "Assets";
400
+ }
401
+
402
+ unityRelative = rel;
403
+ return true;
404
+ }
405
+
406
+ // Removed legacy RunChecks(). Use RunChecksImproved() instead.
407
+
408
+ internal void RunChecksImproved()
409
+ {
410
+ if (_assetPaths is not { Count: > 0 })
411
+ {
412
+ this.LogError($"No asset paths specified. Add folders containing prefabs.");
413
+ return;
414
+ }
415
+
416
+ using PooledResource<List<string>> validPathBuffer = Buffers<string>.List.Get(
417
+ out List<string> validPaths
418
+ );
419
+ for (int i = 0; i < _assetPaths.Count; i++)
420
+ {
421
+ string p = _assetPaths[i];
422
+ if (!string.IsNullOrEmpty(p) && (p == "Assets" || AssetDatabase.IsValidFolder(p)))
423
+ {
424
+ validPaths.Add(p);
425
+ }
426
+ }
427
+
428
+ if (validPaths.Count == 0)
429
+ {
430
+ this.LogError(
431
+ $"None of the specified paths are valid folders: {string.Join(", ", _assetPaths)}"
432
+ );
433
+ return;
434
+ }
435
+
436
+ this.Log($"Starting prefab check for folders: {string.Join(", ", validPaths)}");
437
+ foreach (string p in validPaths)
438
+ {
439
+ TryRecordHistory(p);
440
+ }
441
+
442
+ using PooledResource<string[]> folderArrayLease = WallstopFastArrayPool<string>.Get(
443
+ validPaths.Count,
444
+ out string[] folderArray
445
+ );
446
+ for (int i = 0; i < validPaths.Count; i++)
447
+ {
448
+ folderArray[i] = validPaths[i];
449
+ }
450
+
451
+ string[] guids = AssetDatabase.FindAssets("t:prefab", folderArray);
452
+ int totalPrefabsChecked = 0;
453
+ int totalIssuesFound = 0;
454
+
455
+ using PooledResource<HashSet<string>> includeSetLease = Buffers<string>.HashSet.Get(
456
+ out HashSet<string> includeSet
457
+ );
458
+ includeSet.Clear();
459
+ for (int i = 0; i < _includeLabels.Count; i++)
460
+ {
461
+ string s = _includeLabels[i];
462
+ if (!string.IsNullOrWhiteSpace(s))
463
+ {
464
+ includeSet.Add(s.Trim());
465
+ }
466
+ }
467
+
468
+ using PooledResource<HashSet<string>> excludeSetLease = Buffers<string>.HashSet.Get(
469
+ out HashSet<string> excludeSet
470
+ );
471
+ excludeSet.Clear();
472
+ for (int i = 0; i < _excludeLabels.Count; i++)
473
+ {
474
+ string s = _excludeLabels[i];
475
+ if (!string.IsNullOrWhiteSpace(s))
476
+ {
477
+ excludeSet.Add(s.Trim());
478
+ }
479
+ }
480
+ using PooledResource<Stopwatch> stopwatchBuffer = StopwatchBuffers.Stopwatch.Get(
481
+ out Stopwatch stopwatch
482
+ );
483
+ int skippedByLabel = 0;
484
+ _lastReport = new ScanReport(validPaths);
485
+
486
+ for (int idx = 0; idx < guids.Length; idx++)
487
+ {
488
+ if (
489
+ EditorUi.CancelableProgress(
490
+ "Prefab Checker",
491
+ $"Scanning prefabs... {idx + 1}/{guids.Length}",
492
+ (float)(idx + 1) / Mathf.Max(1, guids.Length)
493
+ )
494
+ )
495
+ {
496
+ this.LogWarn($"Prefab scan canceled by user.");
497
+ break;
498
+ }
499
+
500
+ string path = AssetDatabase.GUIDToAssetPath(guids[idx]);
501
+ GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(path);
502
+ if (prefab == null)
503
+ {
504
+ continue;
505
+ }
506
+
507
+ string[] labels = AssetDatabase.GetLabels(prefab);
508
+ if (includeSet.Count > 0)
509
+ {
510
+ bool anyIncluded = false;
511
+ for (int li = 0; li < labels.Length; li++)
512
+ {
513
+ if (includeSet.Contains(labels[li]))
514
+ {
515
+ anyIncluded = true;
516
+ break;
517
+ }
518
+ }
519
+ if (!anyIncluded)
520
+ {
521
+ skippedByLabel++;
522
+ continue;
523
+ }
524
+ }
525
+ if (excludeSet.Count > 0)
526
+ {
527
+ bool anyExcluded = false;
528
+ for (int li = 0; li < labels.Length; li++)
529
+ {
530
+ if (excludeSet.Contains(labels[li]))
531
+ {
532
+ anyExcluded = true;
533
+ break;
534
+ }
535
+ }
536
+ if (anyExcluded)
537
+ {
538
+ skippedByLabel++;
539
+ continue;
540
+ }
541
+ }
542
+
543
+ totalPrefabsChecked++;
544
+ int issuesForThisPrefab = 0;
545
+ using PooledResource<List<string>> resultLease = Buffers<string>.List.Get(
546
+ out List<string> messages
547
+ );
548
+
549
+ if (_checkDisabledRootGameObjects && !prefab.activeSelf)
550
+ {
551
+ messages.Add("Prefab root GameObject is disabled.");
552
+ issuesForThisPrefab++;
553
+ }
554
+
555
+ using PooledResource<List<MonoBehaviour>> componentBufferResource =
556
+ Buffers<MonoBehaviour>.List.Get();
557
+ List<MonoBehaviour> componentBuffer = componentBufferResource.resource;
558
+ prefab.GetComponentsInChildren(true, componentBuffer);
559
+
560
+ using PooledResource<Dictionary<GameObject, HashSet<Type>>> typeMapLease =
561
+ DictionaryBuffer<GameObject, HashSet<Type>>.Dictionary.Get(
562
+ out Dictionary<GameObject, HashSet<Type>> typeMap
563
+ );
564
+ using PooledResource<List<Component>> compsLease = Buffers<Component>.List.Get(
565
+ out List<Component> comps
566
+ );
567
+ using PooledResource<List<PooledResource<HashSet<Type>>>> createdSetsLeases =
568
+ Buffers<PooledResource<HashSet<Type>>>.List.Get(
569
+ out List<PooledResource<HashSet<Type>>> createdSets
570
+ );
571
+
572
+ HashSet<Type> GetOrBuildTypeSet(GameObject go)
573
+ {
574
+ if (typeMap.TryGetValue(go, out HashSet<Type> cached))
575
+ {
576
+ return cached;
577
+ }
578
+ PooledResource<HashSet<Type>> setLease = Buffers<Type>.HashSet.Get(
579
+ out HashSet<Type> set
580
+ );
581
+ createdSets.Add(setLease);
582
+ go.GetComponents(comps);
583
+ for (int ci = 0; ci < comps.Count; ci++)
584
+ {
585
+ Component c = comps[ci];
586
+ if (c != null)
587
+ {
588
+ set.Add(c.GetType());
589
+ }
590
+ }
591
+ comps.Clear();
592
+ typeMap[go] = set;
593
+ return set;
594
+ }
595
+
596
+ foreach (MonoBehaviour script in componentBuffer)
597
+ {
598
+ if (_checkMissingScripts && !script)
599
+ {
600
+ GameObject owner = FindOwnerOfMissingScriptBounded(prefab, componentBuffer);
601
+ string ownerName = owner ? owner.name : "[[Unknown GameObject]]";
602
+ messages.Add($"Detected missing script on GameObject '{ownerName}'.");
603
+ issuesForThisPrefab++;
604
+ continue;
605
+ }
606
+ if (!script)
607
+ {
608
+ continue;
609
+ }
610
+
611
+ GameObject ownerGameObject = script.gameObject;
612
+ bool denied = false;
613
+ if (!string.IsNullOrWhiteSpace(_componentTypeDenyListCsv))
614
+ {
615
+ string typeName = script.GetType().Name;
616
+ string fullName = script.GetType().FullName;
617
+ string[] tokens = _componentTypeDenyListCsv.Split(',');
618
+ for (int ti = 0; ti < tokens.Length; ti++)
619
+ {
620
+ string t = tokens[ti].Trim();
621
+ if (t.Length == 0)
622
+ {
623
+ continue;
624
+ }
625
+ if (
626
+ string.Equals(t, typeName, StringComparison.Ordinal)
627
+ || string.Equals(t, fullName, StringComparison.Ordinal)
628
+ )
629
+ {
630
+ denied = true;
631
+ break;
632
+ }
633
+ }
634
+ }
635
+ if (denied)
636
+ {
637
+ continue;
638
+ }
639
+ if (_checkNullElementsInLists)
640
+ {
641
+ issuesForThisPrefab += ValidateNoNullsInLists(script, ownerGameObject);
642
+ }
643
+
644
+ if (_checkMissingRequiredComponents)
645
+ {
646
+ HashSet<Type> present = GetOrBuildTypeSet(ownerGameObject);
647
+ issuesForThisPrefab += ValidateRequiredComponentsFast(
648
+ script,
649
+ ownerGameObject,
650
+ present
651
+ );
652
+ }
653
+ if (_checkEmptyStringFields)
654
+ {
655
+ issuesForThisPrefab += ValidateEmptyStrings(script, ownerGameObject);
656
+ }
657
+
658
+ if (_checkNullObjectReferences)
659
+ {
660
+ issuesForThisPrefab += ValidateNullObjectReferences(
661
+ script,
662
+ ownerGameObject
663
+ );
664
+ }
665
+
666
+ if (_checkDisabledComponents && script is Behaviour { enabled: false })
667
+ {
668
+ messages.Add(
669
+ $"Component '{script.GetType().Name}' on GameObject '{ownerGameObject.name}' is disabled."
670
+ );
671
+ issuesForThisPrefab++;
672
+ }
673
+ }
674
+
675
+ if (issuesForThisPrefab > 0)
676
+ {
677
+ int toLog = Mathf.Min(100, messages.Count);
678
+ for (int m = 0; m < toLog; m++)
679
+ {
680
+ prefab.LogWarn($"{messages[m]}");
681
+ }
682
+
683
+ if (messages.Count > toLog)
684
+ {
685
+ prefab.LogWarn($"... and {messages.Count - toLog} more.");
686
+ }
687
+
688
+ this.LogWarn(
689
+ $"Prefab '{prefab.name}' at path '{path}' has {issuesForThisPrefab} potential issues."
690
+ );
691
+ _lastReport.Add(path, messages);
692
+ totalIssuesFound += issuesForThisPrefab;
693
+ }
694
+
695
+ // Release pooled type sets created for this prefab
696
+ for (int si = 0; si < createdSets.Count; si++)
697
+ {
698
+ PooledResource<HashSet<Type>> setLease = createdSets[si];
699
+ setLease.Dispose();
700
+ }
701
+ createdSets.Clear();
702
+ }
703
+
704
+ if (totalIssuesFound > 0)
705
+ {
706
+ this.LogError(
707
+ $"Prefab check complete. Found {totalIssuesFound} potential issues across {totalPrefabsChecked} prefabs."
708
+ );
709
+ }
710
+ else
711
+ {
712
+ this.Log(
713
+ $"Prefab check complete. No issues found in {totalPrefabsChecked} prefabs."
714
+ );
715
+ }
716
+ EditorUi.ClearProgress();
717
+ stopwatch.Stop();
718
+ this.Log(
719
+ $"Scanned {totalPrefabsChecked} prefabs in {stopwatch.ElapsedMilliseconds} ms. Skipped {skippedByLabel} by label."
720
+ );
721
+ }
722
+
723
+ private static GameObject FindOwnerOfMissingScript(
724
+ GameObject prefabRoot,
725
+ List<MonoBehaviour> buffer
726
+ )
727
+ {
728
+ using PooledResource<List<Transform>> transformBufferResource =
729
+ Buffers<Transform>.List.Get();
730
+ List<Transform> transforms = transformBufferResource.resource;
731
+ prefabRoot.GetComponentsInChildren(true, transforms);
732
+ foreach (Transform transform in transforms)
733
+ {
734
+ using PooledResource<List<MonoBehaviour>> componentBuffer =
735
+ Buffers<MonoBehaviour>.List.Get();
736
+ List<MonoBehaviour> components = componentBuffer.resource;
737
+ transform.GetComponents(components);
738
+ int bufferCount = 0;
739
+ foreach (MonoBehaviour c in components)
740
+ {
741
+ if (c != null && c.gameObject == transform.gameObject)
742
+ {
743
+ ++bufferCount;
744
+ }
745
+ }
746
+ if (components.Count == bufferCount)
747
+ {
748
+ continue;
749
+ }
750
+
751
+ bool foundInNonNullBuffer = false;
752
+ foreach (MonoBehaviour c in components)
753
+ {
754
+ if (buffer.Contains(c))
755
+ {
756
+ foundInNonNullBuffer = true;
757
+ break;
758
+ }
759
+ }
760
+
761
+ if (foundInNonNullBuffer)
762
+ {
763
+ return transform.gameObject;
764
+ }
765
+
766
+ if (components.Count != 0 || !buffer.Exists(c => c == null))
767
+ {
768
+ continue;
769
+ }
770
+
771
+ using PooledResource<HashSet<GameObject>> setResource =
772
+ Buffers<GameObject>.HashSet.Get();
773
+ HashSet<GameObject> gameObjectsWithComponentsInBuffer = setResource.resource;
774
+ foreach (MonoBehaviour c in buffer)
775
+ {
776
+ if (c != null)
777
+ {
778
+ gameObjectsWithComponentsInBuffer.Add(c.gameObject);
779
+ }
780
+ }
781
+ if (!gameObjectsWithComponentsInBuffer.Contains(transform.gameObject))
782
+ {
783
+ return transform.gameObject;
784
+ }
785
+ }
786
+
787
+ return prefabRoot;
788
+ }
789
+
790
+ private static IEnumerable<FieldInfo> GetFieldsToCheck(
791
+ Type componentType,
792
+ Dictionary<Type, List<FieldInfo>> cache
793
+ )
794
+ {
795
+ return cache.GetOrAdd(
796
+ componentType,
797
+ type =>
798
+ {
799
+ FieldInfo[] fields = type.GetFields(
800
+ BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
801
+ );
802
+ int len = fields.Length;
803
+ List<FieldInfo> list = new(len);
804
+ for (int i = 0; i < len; i++)
805
+ {
806
+ FieldInfo field = fields[i];
807
+ bool include =
808
+ field.IsPublic
809
+ || field.IsAttributeDefined<SerializeField>(out _, inherit: true);
810
+ if (include)
811
+ {
812
+ list.Add(field);
813
+ }
814
+ }
815
+ return list;
816
+ }
817
+ );
818
+ }
819
+
820
+ private static int ValidateNoNullsInLists(Object component, GameObject context)
821
+ {
822
+ int issueCount = 0;
823
+ Type componentType = component.GetType();
824
+
825
+ List<FieldInfo> listFields = ListFieldsByType.GetOrAdd(
826
+ componentType,
827
+ type =>
828
+ {
829
+ IEnumerable<FieldInfo> baseFields = GetFieldsToCheck(type, FieldsByType);
830
+ List<FieldInfo> res = new();
831
+ foreach (FieldInfo f in baseFields)
832
+ {
833
+ if (f == null)
834
+ {
835
+ continue;
836
+ }
837
+ Type ft = f.FieldType;
838
+ if (typeof(IEnumerable).IsAssignableFrom(ft) && ft != typeof(string))
839
+ {
840
+ res.Add(f);
841
+ }
842
+ }
843
+ return res;
844
+ }
845
+ );
846
+ foreach (FieldInfo field in listFields)
847
+ {
848
+ object fieldValue = field.GetValue(component);
849
+
850
+ if (fieldValue is not IEnumerable list)
851
+ {
852
+ continue;
853
+ }
854
+
855
+ int index = 0;
856
+ if (list is Object unityObject)
857
+ {
858
+ if (list.GetType() != typeof(Transform) && unityObject == null)
859
+ {
860
+ unityObject.LogError(
861
+ $"Field '{field.Name}' ({field.FieldType.Name}) on component '{componentType.Name}' has a null enumerable."
862
+ );
863
+ }
864
+ continue;
865
+ }
866
+ foreach (object element in list)
867
+ {
868
+ if (element == null || (element is Object unityObj && !unityObj))
869
+ {
870
+ context.LogError(
871
+ $"Field '{field.Name}' ({field.FieldType.Name}) on component '{componentType.Name}' has a null or missing element at index {index}."
872
+ );
873
+ issueCount++;
874
+ }
875
+ index++;
876
+ }
877
+ }
878
+ return issueCount;
879
+ }
880
+
881
+ private static int ValidateRequiredComponentsFast(
882
+ Component component,
883
+ GameObject context,
884
+ HashSet<Type> presentTypes
885
+ )
886
+ {
887
+ int issueCount = 0;
888
+ Type componentType = component.GetType();
889
+
890
+ RequireComponent[] required = RequiredComponentsByType.GetOrAdd(
891
+ componentType,
892
+ type => type.GetAllAttributesSafe<RequireComponent>(inherit: true)
893
+ );
894
+
895
+ if (required.Length <= 0)
896
+ {
897
+ return issueCount;
898
+ }
899
+
900
+ for (int i = 0; i < required.Length; i++)
901
+ {
902
+ RequireComponent rc = required[i];
903
+ if (rc.m_Type0 != null && !presentTypes.Contains(rc.m_Type0))
904
+ {
905
+ context.LogError(
906
+ $"Component '{componentType.Name}' requires component '{rc.m_Type0.Name}', but it is missing."
907
+ );
908
+ issueCount++;
909
+ }
910
+ if (rc.m_Type1 != null && !presentTypes.Contains(rc.m_Type1))
911
+ {
912
+ context.LogError(
913
+ $"Component '{componentType.Name}' requires component '{rc.m_Type1.Name}', but it is missing."
914
+ );
915
+ issueCount++;
916
+ }
917
+ if (rc.m_Type2 != null && !presentTypes.Contains(rc.m_Type2))
918
+ {
919
+ context.LogError(
920
+ $"Component '{componentType.Name}' requires component '{rc.m_Type2.Name}', but it is missing."
921
+ );
922
+ issueCount++;
923
+ }
924
+ }
925
+ return issueCount;
926
+ }
927
+
928
+ private static int ValidateEmptyStrings(Object component, GameObject context)
929
+ {
930
+ int issueCount = 0;
931
+ Type componentType = component.GetType();
932
+
933
+ List<FieldInfo> stringFields = StringFieldsByType.GetOrAdd(
934
+ componentType,
935
+ type =>
936
+ {
937
+ IEnumerable<FieldInfo> baseFields = GetFieldsToCheck(type, FieldsByType);
938
+ List<FieldInfo> res = new();
939
+ foreach (FieldInfo f in baseFields)
940
+ {
941
+ if (f != null && f.FieldType == typeof(string))
942
+ {
943
+ res.Add(f);
944
+ }
945
+ }
946
+ return res;
947
+ }
948
+ );
949
+ foreach (FieldInfo field in stringFields)
950
+ {
951
+ object fieldValue = field.GetValue(component);
952
+ if (fieldValue is string stringValue && string.IsNullOrEmpty(stringValue))
953
+ {
954
+ context.LogWarn(
955
+ $"String field '{field.Name}' on component '{componentType.Name}' is null or empty."
956
+ );
957
+ issueCount++;
958
+ }
959
+ }
960
+ return issueCount;
961
+ }
962
+
963
+ private int ValidateNullObjectReferences(Object component, GameObject context)
964
+ {
965
+ int issueCount = 0;
966
+ Type componentType = component.GetType();
967
+
968
+ List<FieldInfo> objFields = ObjectFieldsByType.GetOrAdd(
969
+ componentType,
970
+ type =>
971
+ {
972
+ IEnumerable<FieldInfo> baseFields = GetFieldsToCheck(type, FieldsByType);
973
+ List<FieldInfo> res = new();
974
+ foreach (FieldInfo f in baseFields)
975
+ {
976
+ if (f != null && typeof(Object).IsAssignableFrom(f.FieldType))
977
+ {
978
+ res.Add(f);
979
+ }
980
+ }
981
+ return res;
982
+ }
983
+ );
984
+ foreach (FieldInfo field in objFields)
985
+ {
986
+ bool hasValidateAttribute = field.IsAttributeDefined<ValidateAssignmentAttribute>(
987
+ out _,
988
+ inherit: false
989
+ );
990
+
991
+ if (_onlyCheckNullObjectsWithAttribute && !hasValidateAttribute)
992
+ {
993
+ continue;
994
+ }
995
+
996
+ object fieldValue = field.GetValue(component);
997
+
998
+ if (fieldValue != null && (fieldValue is not Object unityObj || unityObj))
999
+ {
1000
+ continue;
1001
+ }
1002
+
1003
+ string attributeMarker = hasValidateAttribute ? " (has [ValidateAssignment])" : "";
1004
+ context.LogError(
1005
+ $"Object reference field '{field.Name}'{attributeMarker} on component '{componentType.Name}' is null or missing."
1006
+ );
1007
+ issueCount++;
1008
+ }
1009
+ return issueCount;
1010
+ }
1011
+
1012
+ private static GameObject FindOwnerOfMissingScriptBounded(
1013
+ GameObject prefabRoot,
1014
+ List<MonoBehaviour> buffer
1015
+ )
1016
+ {
1017
+ using PooledResource<List<Transform>> transformBufferResource =
1018
+ Buffers<Transform>.List.Get();
1019
+ List<Transform> transforms = transformBufferResource.resource;
1020
+ prefabRoot.GetComponentsInChildren(true, transforms);
1021
+ if (transforms.Count > MaxTransformScanForMissingOwner)
1022
+ {
1023
+ prefabRoot.LogWarn(
1024
+ $"Hierarchy too large to locate owner of missing script (>{MaxTransformScanForMissingOwner}). Reporting at prefab root."
1025
+ );
1026
+ return prefabRoot;
1027
+ }
1028
+ return FindOwnerOfMissingScript(prefabRoot, buffer);
1029
+ }
1030
+
1031
+ private void SetupReorderableList()
1032
+ {
1033
+ _pathsList = new ReorderableList(_assetPaths, typeof(string), true, true, true, true)
1034
+ {
1035
+ drawHeaderCallback = rect =>
1036
+ {
1037
+ EditorGUI.LabelField(rect, "Folders to scan");
1038
+ },
1039
+ drawElementCallback = (rect, index, _, _) =>
1040
+ {
1041
+ if (index < 0 || index >= _assetPaths.Count)
1042
+ {
1043
+ return;
1044
+ }
1045
+
1046
+ string path = _assetPaths[index];
1047
+ Rect labelRect = new(
1048
+ rect.x,
1049
+ rect.y,
1050
+ rect.width - 100f,
1051
+ EditorGUIUtility.singleLineHeight
1052
+ );
1053
+ EditorGUI.LabelField(labelRect, path);
1054
+ if (
1055
+ GUI.Button(
1056
+ new Rect(
1057
+ rect.x + rect.width - 95f,
1058
+ rect.y,
1059
+ 45f,
1060
+ EditorGUIUtility.singleLineHeight
1061
+ ),
1062
+ "Ping"
1063
+ )
1064
+ )
1065
+ {
1066
+ DefaultAsset asset = AssetDatabase.LoadAssetAtPath<DefaultAsset>(path);
1067
+ if (asset)
1068
+ {
1069
+ EditorGUIUtility.PingObject(asset);
1070
+ }
1071
+ }
1072
+ if (
1073
+ GUI.Button(
1074
+ new Rect(
1075
+ rect.x + rect.width - 45f,
1076
+ rect.y,
1077
+ 45f,
1078
+ EditorGUIUtility.singleLineHeight
1079
+ ),
1080
+ "Open"
1081
+ )
1082
+ )
1083
+ {
1084
+ DefaultAsset asset = AssetDatabase.LoadAssetAtPath<DefaultAsset>(path);
1085
+ if (asset)
1086
+ {
1087
+ Selection.activeObject = asset;
1088
+ }
1089
+ }
1090
+ },
1091
+ onAddCallback = _ =>
1092
+ {
1093
+ AddFolder();
1094
+ },
1095
+ onRemoveCallback = list =>
1096
+ {
1097
+ if (list.index >= 0 && list.index < _assetPaths.Count)
1098
+ {
1099
+ _assetPaths.RemoveAt(list.index);
1100
+ }
1101
+ },
1102
+ };
1103
+ }
1104
+
1105
+ private void HandleDragAndDropForPaths()
1106
+ {
1107
+ Rect dropArea = GUILayoutUtility.GetLastRect();
1108
+ Event evt = Event.current;
1109
+ if (!dropArea.Contains(evt.mousePosition))
1110
+ {
1111
+ return;
1112
+ }
1113
+
1114
+ if (evt.type == EventType.DragUpdated || evt.type == EventType.DragPerform)
1115
+ {
1116
+ DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
1117
+ if (evt.type == EventType.DragPerform)
1118
+ {
1119
+ DragAndDrop.AcceptDrag();
1120
+ foreach (Object obj in DragAndDrop.objectReferences)
1121
+ {
1122
+ string path = AssetDatabase.GetAssetPath(obj);
1123
+ if (string.IsNullOrWhiteSpace(path))
1124
+ {
1125
+ continue;
1126
+ }
1127
+
1128
+ _ = AddAssetFolder(path);
1129
+ }
1130
+ }
1131
+ Event.current.Use();
1132
+ }
1133
+ }
1134
+
1135
+ private void DrawFiltersAndUtilities()
1136
+ {
1137
+ EditorGUILayout.LabelField("Filters & Utilities", EditorStyles.boldLabel);
1138
+ _offerAutoFixes = EditorGUILayout.ToggleLeft(
1139
+ "Enable Auto-fix options",
1140
+ _offerAutoFixes
1141
+ );
1142
+
1143
+ using (new EditorGUILayout.HorizontalScope())
1144
+ {
1145
+ EditorGUILayout.LabelField("Include Labels (comma)", GUILayout.Width(180));
1146
+ string includeCsv = string.Join(",", _includeLabels);
1147
+ string newInclude = EditorGUILayout.TextField(includeCsv);
1148
+ if (!string.Equals(includeCsv, newInclude, StringComparison.Ordinal))
1149
+ {
1150
+ _includeLabels.Clear();
1151
+ foreach (string s in newInclude.Split(','))
1152
+ {
1153
+ if (!string.IsNullOrWhiteSpace(s))
1154
+ {
1155
+ _includeLabels.Add(s.Trim());
1156
+ }
1157
+ }
1158
+ }
1159
+ }
1160
+ using (new EditorGUILayout.HorizontalScope())
1161
+ {
1162
+ EditorGUILayout.LabelField("Exclude Labels (comma)", GUILayout.Width(180));
1163
+ string excludeCsv = string.Join(",", _excludeLabels);
1164
+ string newExclude = EditorGUILayout.TextField(excludeCsv);
1165
+ if (!string.Equals(excludeCsv, newExclude, StringComparison.Ordinal))
1166
+ {
1167
+ _excludeLabels.Clear();
1168
+ foreach (string s in newExclude.Split(','))
1169
+ {
1170
+ if (!string.IsNullOrWhiteSpace(s))
1171
+ {
1172
+ _excludeLabels.Add(s.Trim());
1173
+ }
1174
+ }
1175
+ }
1176
+ }
1177
+ using (new EditorGUILayout.HorizontalScope())
1178
+ {
1179
+ EditorGUILayout.LabelField(
1180
+ "Deny Component Types (comma names)",
1181
+ GUILayout.Width(220)
1182
+ );
1183
+ _componentTypeDenyListCsv = EditorGUILayout.TextField(_componentTypeDenyListCsv);
1184
+ }
1185
+ }
1186
+
1187
+ private void TryRestoreFromHistory()
1188
+ {
1189
+ // Do not restore persisted UI state while tests/non-interactive contexts run
1190
+ if (EditorUi.Suppress)
1191
+ {
1192
+ return;
1193
+ }
1194
+
1195
+ if (_assetPaths.Count > 0)
1196
+ {
1197
+ return;
1198
+ }
1199
+
1200
+ if (PersistentDirectorySettings.Instance == null)
1201
+ {
1202
+ return;
1203
+ }
1204
+
1205
+ DirectoryUsageData[] top = PersistentDirectorySettings.Instance.GetPaths(
1206
+ ToolName,
1207
+ TargetContextKey,
1208
+ true,
1209
+ 1
1210
+ );
1211
+ if (top is { Length: > 0 })
1212
+ {
1213
+ string p = top[0].path;
1214
+ if (
1215
+ !string.IsNullOrWhiteSpace(p)
1216
+ && (p == "Assets" || AssetDatabase.IsValidFolder(p))
1217
+ )
1218
+ {
1219
+ _assetPaths.Add(p);
1220
+ }
1221
+ }
1222
+ }
1223
+
1224
+ private static void TryRecordHistory(string relativePath)
1225
+ {
1226
+ if (PersistentDirectorySettings.Instance == null)
1227
+ {
1228
+ return;
1229
+ }
1230
+
1231
+ try
1232
+ {
1233
+ PersistentDirectorySettings.Instance.RecordPath(
1234
+ ToolName,
1235
+ TargetContextKey,
1236
+ relativePath
1237
+ );
1238
+ }
1239
+ catch
1240
+ {
1241
+ // Swallow
1242
+ }
1243
+ }
1244
+
1245
+ private void FixMissingScripts()
1246
+ {
1247
+ if (!_offerAutoFixes)
1248
+ {
1249
+ return;
1250
+ }
1251
+
1252
+ foreach (string folder in _assetPaths)
1253
+ {
1254
+ string[] guids = AssetDatabase.FindAssets("t:prefab", new[] { folder });
1255
+ for (int i = 0; i < guids.Length; i++)
1256
+ {
1257
+ string path = AssetDatabase.GUIDToAssetPath(guids[i]);
1258
+ GameObject go = AssetDatabase.LoadAssetAtPath<GameObject>(path);
1259
+ if (go == null)
1260
+ {
1261
+ continue;
1262
+ }
1263
+
1264
+ GameObjectUtility.RemoveMonoBehavioursWithMissingScript(go);
1265
+ }
1266
+ }
1267
+ AssetDatabase.SaveAssets();
1268
+ AssetDatabase.Refresh();
1269
+ this.Log($"Auto-fix complete: Removed missing scripts in selected folders.");
1270
+ }
1271
+
1272
+ [Serializable]
1273
+ internal sealed class ScanReport
1274
+ {
1275
+ public readonly string[] folders;
1276
+ public readonly List<Item> items = new();
1277
+
1278
+ public ScanReport(IEnumerable<string> folders)
1279
+ {
1280
+ if (folders == null)
1281
+ {
1282
+ this.folders = Array.Empty<string>();
1283
+ return;
1284
+ }
1285
+ // Manual copy to avoid LINQ
1286
+ using (Buffers<string>.List.Get(out List<string> list))
1287
+ {
1288
+ foreach (string s in folders)
1289
+ {
1290
+ list.Add(s);
1291
+ }
1292
+ this.folders = list.ToArray();
1293
+ }
1294
+ }
1295
+
1296
+ [Serializable]
1297
+ internal sealed class Item
1298
+ {
1299
+ public string path;
1300
+ public string[] messages;
1301
+ }
1302
+
1303
+ public void Add(string path, List<string> messages)
1304
+ {
1305
+ string[] arr =
1306
+ messages != null && messages.Count > 0
1307
+ ? messages.ToArray()
1308
+ : Array.Empty<string>();
1309
+ items.Add(new Item { path = path, messages = arr });
1310
+ }
1311
+ }
1312
+
1313
+ private ScanReport _lastReport;
1314
+
1315
+ private void ExportLastReport()
1316
+ {
1317
+ if (_lastReport == null || _lastReport.items.Count == 0)
1318
+ {
1319
+ EditorUi.Info("Prefab Checker", "No report data to export.");
1320
+ return;
1321
+ }
1322
+ string defaultPath = Application.dataPath + "/PrefabCheckerReport.json";
1323
+ string savePath = EditorUi.Suppress
1324
+ ? defaultPath
1325
+ : EditorUtility.SaveFilePanel(
1326
+ "Save Prefab Checker Report",
1327
+ Application.dataPath,
1328
+ "PrefabCheckerReport",
1329
+ "json"
1330
+ );
1331
+ if (string.IsNullOrWhiteSpace(savePath))
1332
+ {
1333
+ return;
1334
+ }
1335
+
1336
+ try
1337
+ {
1338
+ string json = JsonUtility.ToJson(_lastReport, true);
1339
+ File.WriteAllText(savePath, json);
1340
+ this.Log($"Saved report to: {savePath}");
1341
+ }
1342
+ catch (Exception e)
1343
+ {
1344
+ this.LogError($"Failed to save report: {e.Message}");
1345
+ }
1346
+ }
1347
+
1348
+ private void ExportLastReportCsv()
1349
+ {
1350
+ if (_lastReport == null || _lastReport.items.Count == 0)
1351
+ {
1352
+ EditorUi.Info("Prefab Checker", "No report data to export.");
1353
+ return;
1354
+ }
1355
+ string defaultPath = Application.dataPath + "/PrefabCheckerReport.csv";
1356
+ string savePath = EditorUi.Suppress
1357
+ ? defaultPath
1358
+ : EditorUtility.SaveFilePanel(
1359
+ "Save Prefab Checker Report (CSV)",
1360
+ Application.dataPath,
1361
+ "PrefabCheckerReport",
1362
+ "csv"
1363
+ );
1364
+ if (string.IsNullOrWhiteSpace(savePath))
1365
+ {
1366
+ return;
1367
+ }
1368
+
1369
+ try
1370
+ {
1371
+ using StreamWriter sw = new(savePath);
1372
+ sw.WriteLine("Path,Message");
1373
+ foreach (ScanReport.Item item in _lastReport.items)
1374
+ {
1375
+ string path = item.path?.Replace('"', '\'') ?? string.Empty;
1376
+ if (item.messages == null || item.messages.Length == 0)
1377
+ {
1378
+ sw.WriteLine($"\"{path}\",\"\"");
1379
+ continue;
1380
+ }
1381
+ foreach (string m in item.messages)
1382
+ {
1383
+ string msg = (m ?? string.Empty).Replace('"', '\'');
1384
+ sw.WriteLine($"\"{path}\",\"{msg}\"");
1385
+ }
1386
+ }
1387
+ this.Log($"Saved report to: {savePath}");
1388
+ }
1389
+ catch (Exception e)
1390
+ {
1391
+ this.LogError($"Failed to save CSV: {e.Message}");
1392
+ }
1393
+ }
1394
+ }
1395
+ #endif
1396
+ }