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

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