com.wallstop-studios.unity-helpers 2.0.0-rc81.6 → 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 -88
  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,195 +1,2020 @@
1
- namespace WallstopStudios.UnityHelpers.Core.Serialization
2
- {
3
- using System;
4
- using System.ComponentModel;
5
- using System.IO;
6
- using System.Runtime.Serialization.Formatters.Binary;
7
- using System.Text;
8
- using System.Text.Json;
9
- using System.Text.Json.Serialization;
10
- using Extension;
11
- using JsonConverters;
12
- using TypeConverter = JsonConverters.TypeConverter;
13
-
14
- internal static class SerializerEncoding
15
- {
16
- public static readonly Encoding Encoding;
17
- public static readonly JsonSerializerOptions NormalJsonOptions;
18
- public static readonly JsonSerializerOptions PrettyJsonOptions;
19
-
20
- static SerializerEncoding()
21
- {
22
- Encoding = Encoding.UTF8;
23
- NormalJsonOptions = new JsonSerializerOptions
24
- {
25
- IgnoreReadOnlyFields = false,
26
- IgnoreReadOnlyProperties = false,
27
- ReferenceHandler = ReferenceHandler.IgnoreCycles,
28
- IncludeFields = true,
29
- PropertyNameCaseInsensitive = true,
30
- Converters =
31
- {
32
- new JsonStringEnumConverter(),
33
- Vector3Converter.Instance,
34
- Vector2Converter.Instance,
35
- Vector4Converter.Instance,
36
- Matrix4x4Converter.Instance,
37
- TypeConverter.Instance,
38
- GameObjectConverter.Instance,
39
- ColorConverter.Instance,
40
- },
41
- };
42
-
43
- PrettyJsonOptions = new JsonSerializerOptions
44
- {
45
- IgnoreReadOnlyFields = false,
46
- IgnoreReadOnlyProperties = false,
47
- ReferenceHandler = ReferenceHandler.IgnoreCycles,
48
- PropertyNameCaseInsensitive = true,
49
- IncludeFields = true,
50
- Converters =
51
- {
52
- new JsonStringEnumConverter(),
53
- Vector3Converter.Instance,
54
- Vector2Converter.Instance,
55
- Vector4Converter.Instance,
56
- Matrix4x4Converter.Instance,
57
- TypeConverter.Instance,
58
- GameObjectConverter.Instance,
59
- ColorConverter.Instance,
60
- },
61
- WriteIndented = true,
62
- };
63
- }
64
- }
65
-
66
- public enum SerializationType
67
- {
68
- SystemBinary,
69
- Protobuf,
70
- }
71
-
72
- public static class Serializer
73
- {
74
- public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
75
- {
76
- switch (serializationType)
77
- {
78
- case SerializationType.SystemBinary:
79
- return BinaryDeserialize<T>(serialized);
80
- case SerializationType.Protobuf:
81
- return ProtoDeserialize<T>(serialized);
82
- default:
83
- throw new InvalidEnumArgumentException(
84
- nameof(serializationType),
85
- (int)serializationType,
86
- typeof(SerializationType)
87
- );
88
- }
89
- }
90
-
91
- public static byte[] Serialize<T>(T instance, SerializationType serializationType)
92
- {
93
- switch (serializationType)
94
- {
95
- case SerializationType.SystemBinary:
96
- return BinarySerialize(instance);
97
- case SerializationType.Protobuf:
98
- return ProtoSerialize(instance);
99
- default:
100
- throw new InvalidEnumArgumentException(
101
- nameof(serializationType),
102
- (int)serializationType,
103
- typeof(SerializationType)
104
- );
105
- }
106
- }
107
-
108
- public static T BinaryDeserialize<T>(byte[] data)
109
- {
110
- using MemoryStream memoryStream = new(data);
111
- BinaryFormatter binaryFormatter = new();
112
- memoryStream.Position = 0;
113
- return (T)binaryFormatter.Deserialize(memoryStream);
114
- }
115
-
116
- public static byte[] BinarySerialize<T>(T input)
117
- {
118
- using MemoryStream memoryStream = new();
119
- BinaryFormatter binaryFormatter = new();
120
- binaryFormatter.Serialize(memoryStream, input);
121
- return memoryStream.ToArray();
122
- }
123
-
124
- public static T ProtoDeserialize<T>(byte[] data)
125
- {
126
- using MemoryStream memoryStream = new(data);
127
- return ProtoBuf.Serializer.Deserialize<T>(memoryStream);
128
- }
129
-
130
- public static T ProtoDeserialize<T>(byte[] data, Type type)
131
- {
132
- using MemoryStream memoryStream = new(data);
133
- return (T)ProtoBuf.Serializer.Deserialize(type, memoryStream);
134
- }
135
-
136
- public static byte[] ProtoSerialize<T>(T input)
137
- {
138
- using MemoryStream memoryStream = new();
139
- ProtoBuf.Serializer.Serialize(memoryStream, input);
140
- return memoryStream.ToArray();
141
- }
142
-
143
- public static T JsonDeserialize<T>(string data, Type type = null)
144
- {
145
- return (T)
146
- JsonSerializer.Deserialize(
147
- data,
148
- type ?? typeof(T),
149
- SerializerEncoding.NormalJsonOptions
150
- );
151
- }
152
-
153
- public static byte[] JsonSerialize<T>(T input)
154
- {
155
- return JsonStringify(input).GetBytes();
156
- }
157
-
158
- public static string JsonStringify<T>(T input, bool pretty = false)
159
- {
160
- JsonSerializerOptions options = pretty
161
- ? SerializerEncoding.PrettyJsonOptions
162
- : SerializerEncoding.NormalJsonOptions;
163
- Type parameterType = typeof(T);
164
- if (
165
- parameterType.IsAbstract
166
- || parameterType.IsInterface
167
- || parameterType == typeof(object)
168
- )
169
- {
170
- object data = input;
171
- if (data == null)
172
- {
173
- return "{}";
174
- }
175
-
176
- Type type = data.GetType();
177
- return JsonSerializer.Serialize(data, type, options);
178
- }
179
-
180
- return JsonSerializer.Serialize(input, options);
181
- }
182
-
183
- public static T ReadFromJsonFile<T>(string path)
184
- {
185
- string settingsAsText = File.ReadAllText(path, SerializerEncoding.Encoding);
186
- return JsonDeserialize<T>(settingsAsText);
187
- }
188
-
189
- public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
190
- {
191
- string jsonAsText = JsonStringify(input, pretty);
192
- File.WriteAllText(path, jsonAsText);
193
- }
194
- }
195
- }
1
+ namespace WallstopStudios.UnityHelpers.Core.Serialization
2
+ {
3
+ using System;
4
+ using System.Buffers;
5
+ using System.Collections.Concurrent;
6
+ using System.ComponentModel;
7
+ using System.IO;
8
+ using System.Linq;
9
+ using System.Reflection;
10
+ using System.Runtime.Serialization.Formatters.Binary;
11
+ using System.Text;
12
+ using System.Text.Json;
13
+ using System.Text.Json.Serialization;
14
+ using System.Threading.Tasks;
15
+ using JsonConverters;
16
+ using ProtoBuf;
17
+ using WallstopStudios.UnityHelpers.Core.Helper;
18
+ using TypeConverter = JsonConverters.TypeConverter;
19
+
20
+ internal static class SerializerEncoding
21
+ {
22
+ public static readonly Encoding Encoding;
23
+ public static readonly JsonSerializerOptions NormalJsonOptions;
24
+ public static readonly JsonSerializerOptions PrettyJsonOptions;
25
+ public static readonly JsonSerializerOptions FastJsonOptions;
26
+ public static readonly JsonSerializerOptions FastPocoJsonOptions;
27
+
28
+ public static JsonSerializerOptions GetNormalJsonOptions()
29
+ {
30
+ return new JsonSerializerOptions
31
+ {
32
+ IgnoreReadOnlyFields = false,
33
+ IgnoreReadOnlyProperties = false,
34
+ ReferenceHandler = ReferenceHandler.IgnoreCycles,
35
+ IncludeFields = true,
36
+ PropertyNameCaseInsensitive = true,
37
+ NumberHandling =
38
+ JsonNumberHandling.AllowNamedFloatingPointLiterals
39
+ | JsonNumberHandling.AllowReadingFromString,
40
+ ReadCommentHandling = JsonCommentHandling.Skip,
41
+ AllowTrailingCommas = true,
42
+ Converters =
43
+ {
44
+ RangeConverterFactory.Instance,
45
+ FastVector2IntConverter.Instance,
46
+ FastVector3IntConverter.Instance,
47
+ new JsonStringEnumConverter(),
48
+ Vector3Converter.Instance,
49
+ Vector2Converter.Instance,
50
+ Vector4Converter.Instance,
51
+ Vector2IntConverter.Instance,
52
+ Vector3IntConverter.Instance,
53
+ Matrix4x4Converter.Instance,
54
+ QuaternionConverter.Instance,
55
+ LayerMaskConverter.Instance,
56
+ ResolutionConverter.Instance,
57
+ RenderTextureDescriptorConverter.Instance,
58
+ MinMaxCurveConverter.Instance,
59
+ MinMaxGradientConverter.Instance,
60
+ ColorBlockConverter.Instance,
61
+ BoundingSphereConverter.Instance,
62
+ RaycastHitConverter.Instance,
63
+ TouchConverter.Instance,
64
+ SceneConverter.Instance,
65
+ PoseConverter.Instance,
66
+ PlaneConverter.Instance,
67
+ RayConverter.Instance,
68
+ Ray2DConverter.Instance,
69
+ RectOffsetConverter.Instance,
70
+ RangeIntConverter.Instance,
71
+ Hash128Converter.Instance,
72
+ AnimationCurveConverter.Instance,
73
+ GradientConverter.Instance,
74
+ SphericalHarmonicsL2Converter.Instance,
75
+ TypeConverter.Instance,
76
+ GameObjectConverter.Instance,
77
+ ColorConverter.Instance,
78
+ Color32Converter.Instance,
79
+ RectConverter.Instance,
80
+ RectIntConverter.Instance,
81
+ BoundsConverter.Instance,
82
+ BoundsIntConverter.Instance,
83
+ BitSetConverter.Instance,
84
+ ImmutableBitSetConverter.Instance,
85
+ DequeConverterFactory.Instance,
86
+ CyclicBufferConverterFactory.Instance,
87
+ KVector2Converter.Instance,
88
+ },
89
+ };
90
+ ;
91
+ }
92
+
93
+ public static JsonSerializerOptions GetPrettyJsonOptions()
94
+ {
95
+ return new JsonSerializerOptions
96
+ {
97
+ IgnoreReadOnlyFields = false,
98
+ IgnoreReadOnlyProperties = false,
99
+ ReferenceHandler = ReferenceHandler.IgnoreCycles,
100
+ PropertyNameCaseInsensitive = true,
101
+ IncludeFields = true,
102
+ NumberHandling =
103
+ JsonNumberHandling.AllowNamedFloatingPointLiterals
104
+ | JsonNumberHandling.AllowReadingFromString,
105
+ ReadCommentHandling = JsonCommentHandling.Skip,
106
+ AllowTrailingCommas = true,
107
+ Converters =
108
+ {
109
+ RangeConverterFactory.Instance,
110
+ FastVector2IntConverter.Instance,
111
+ FastVector3IntConverter.Instance,
112
+ new JsonStringEnumConverter(),
113
+ Vector3Converter.Instance,
114
+ Vector2Converter.Instance,
115
+ Vector4Converter.Instance,
116
+ Vector2IntConverter.Instance,
117
+ Vector3IntConverter.Instance,
118
+ Matrix4x4Converter.Instance,
119
+ QuaternionConverter.Instance,
120
+ LayerMaskConverter.Instance,
121
+ ResolutionConverter.Instance,
122
+ RenderTextureDescriptorConverter.Instance,
123
+ MinMaxCurveConverter.Instance,
124
+ MinMaxGradientConverter.Instance,
125
+ ColorBlockConverter.Instance,
126
+ BoundingSphereConverter.Instance,
127
+ RaycastHitConverter.Instance,
128
+ TouchConverter.Instance,
129
+ SceneConverter.Instance,
130
+ PoseConverter.Instance,
131
+ PlaneConverter.Instance,
132
+ RayConverter.Instance,
133
+ Ray2DConverter.Instance,
134
+ RectOffsetConverter.Instance,
135
+ RangeIntConverter.Instance,
136
+ Hash128Converter.Instance,
137
+ AnimationCurveConverter.Instance,
138
+ GradientConverter.Instance,
139
+ SphericalHarmonicsL2Converter.Instance,
140
+ TypeConverter.Instance,
141
+ GameObjectConverter.Instance,
142
+ ColorConverter.Instance,
143
+ Color32Converter.Instance,
144
+ RectConverter.Instance,
145
+ RectIntConverter.Instance,
146
+ BoundsConverter.Instance,
147
+ BoundsIntConverter.Instance,
148
+ BitSetConverter.Instance,
149
+ ImmutableBitSetConverter.Instance,
150
+ DequeConverterFactory.Instance,
151
+ CyclicBufferConverterFactory.Instance,
152
+ KVector2Converter.Instance,
153
+ },
154
+ WriteIndented = true,
155
+ };
156
+ }
157
+
158
+ public static JsonSerializerOptions GetFastJsonOptions()
159
+ {
160
+ return new JsonSerializerOptions
161
+ {
162
+ IgnoreReadOnlyFields = false,
163
+ IgnoreReadOnlyProperties = true,
164
+ ReferenceHandler = null,
165
+ PropertyNameCaseInsensitive = false,
166
+ IncludeFields = false,
167
+ NumberHandling = JsonNumberHandling.Strict,
168
+ ReadCommentHandling = JsonCommentHandling.Disallow,
169
+ AllowTrailingCommas = false,
170
+ Converters =
171
+ {
172
+ RangeConverterFactory.Instance,
173
+ FastVector2IntConverter.Instance,
174
+ FastVector3IntConverter.Instance,
175
+ Vector3Converter.Instance,
176
+ Vector2Converter.Instance,
177
+ Vector4Converter.Instance,
178
+ Vector2IntConverter.Instance,
179
+ Vector3IntConverter.Instance,
180
+ Matrix4x4Converter.Instance,
181
+ QuaternionConverter.Instance,
182
+ LayerMaskConverter.Instance,
183
+ ResolutionConverter.Instance,
184
+ RenderTextureDescriptorConverter.Instance,
185
+ MinMaxCurveConverter.Instance,
186
+ MinMaxGradientConverter.Instance,
187
+ ColorBlockConverter.Instance,
188
+ BoundingSphereConverter.Instance,
189
+ RaycastHitConverter.Instance,
190
+ TouchConverter.Instance,
191
+ SceneConverter.Instance,
192
+ PoseConverter.Instance,
193
+ PlaneConverter.Instance,
194
+ RayConverter.Instance,
195
+ Ray2DConverter.Instance,
196
+ RectOffsetConverter.Instance,
197
+ RangeIntConverter.Instance,
198
+ Hash128Converter.Instance,
199
+ AnimationCurveConverter.Instance,
200
+ GradientConverter.Instance,
201
+ SphericalHarmonicsL2Converter.Instance,
202
+ TypeConverter.Instance,
203
+ GameObjectConverter.Instance,
204
+ ColorConverter.Instance,
205
+ Color32Converter.Instance,
206
+ RectConverter.Instance,
207
+ RectIntConverter.Instance,
208
+ BoundsConverter.Instance,
209
+ BoundsIntConverter.Instance,
210
+ BitSetConverter.Instance,
211
+ ImmutableBitSetConverter.Instance,
212
+ DequeConverterFactory.Instance,
213
+ CyclicBufferConverterFactory.Instance,
214
+ KVector2Converter.Instance,
215
+ },
216
+ };
217
+ }
218
+
219
+ public static JsonSerializerOptions GetFastPocoJsonOptions()
220
+ {
221
+ return new JsonSerializerOptions
222
+ {
223
+ IgnoreReadOnlyFields = false,
224
+ IgnoreReadOnlyProperties = false,
225
+ ReferenceHandler = null,
226
+ PropertyNameCaseInsensitive = false,
227
+ IncludeFields = false,
228
+ NumberHandling = JsonNumberHandling.Strict,
229
+ ReadCommentHandling = JsonCommentHandling.Disallow,
230
+ AllowTrailingCommas = false,
231
+ // No converters for POCO to minimize overhead
232
+ };
233
+ }
234
+
235
+ static SerializerEncoding()
236
+ {
237
+ Encoding = Encoding.UTF8;
238
+ NormalJsonOptions = GetNormalJsonOptions();
239
+ PrettyJsonOptions = GetPrettyJsonOptions();
240
+ FastJsonOptions = GetFastJsonOptions();
241
+ FastPocoJsonOptions = GetFastPocoJsonOptions();
242
+ }
243
+ }
244
+
245
+ /// <summary>
246
+ /// Selects the wire format used by <see cref="Serializer"/>.
247
+ /// </summary>
248
+ /// <remarks>
249
+ /// Choose a format based on your requirements:
250
+ /// <list type="bullet">
251
+ /// <item>
252
+ /// <description>
253
+ /// <see cref="Json"/> — Human‑readable and diff‑friendly. Uses System.Text.Json with Unity‑aware
254
+ /// converters for common types (e.g., Vector2/3/4, Matrix4x4, Color, Type).
255
+ /// Prefer for save files, configs, and tooling.
256
+ /// </description>
257
+ /// </item>
258
+ /// <item>
259
+ /// <description>
260
+ /// <see cref="Protobuf"/> — Compact binary with great performance using protobuf‑net.
261
+ /// Prefer for networking, large payloads, and memory‑sensitive scenarios.
262
+ /// Requires opt‑in attributes like [ProtoContract]/[ProtoMember] or runtime models.
263
+ /// </description>
264
+ /// </item>
265
+ /// <item>
266
+ /// <description>
267
+ /// <see cref="SystemBinary"/> — .NET BinaryFormatter. Legacy and trusted‑only. Not
268
+ /// cross‑version/portable and unsafe for untrusted input. Use only for ephemeral/dev data.
269
+ /// </description>
270
+ /// </item>
271
+ /// </list>
272
+ /// </remarks>
273
+ public enum SerializationType
274
+ {
275
+ /// <summary>Unspecified format; not valid for read/write.</summary>
276
+ [Obsolete("Please use a valid enum value")]
277
+ None = 0,
278
+
279
+ /// <summary>Legacy .NET BinaryFormatter. Trusted/ephemeral data only.</summary>
280
+ SystemBinary = 1,
281
+
282
+ /// <summary>protobuf-net compact binary. Best for networking and high-performance.</summary>
283
+ Protobuf = 2,
284
+
285
+ /// <summary>System.Text.Json text. Human-readable and diff-friendly.</summary>
286
+ Json = 3,
287
+ }
288
+
289
+ /// <summary>
290
+ /// Unified serialization helpers for JSON, protobuf‑net, and legacy BinaryFormatter.
291
+ /// </summary>
292
+ /// <remarks>
293
+ /// Highlights
294
+ /// <list type="bullet">
295
+ /// <item><description>JSON: Uses pooled writers and Unity‑aware converters; supports pretty printing.</description></item>
296
+ /// <item><description>Protobuf: Compact binary via protobuf‑net; supports interface/abstract types via root resolution or <see cref="RegisterProtobufRoot(Type, Type)"/>.</description></item>
297
+ /// <item><description>Binary: Convenience for legacy only; do not feed untrusted data.</description></item>
298
+ /// <item><description>Minimal allocations with ArrayPool-backed streams to reduce GC pressure.</description></item>
299
+ /// </list>
300
+ /// When to use what
301
+ /// <list type="bullet">
302
+ /// <item><description>Prefer <see cref="SerializationType.Json"/> for save systems, settings, and tools.</description></item>
303
+ /// <item><description>Prefer <see cref="SerializationType.Protobuf"/> for networking, large or frequent messages.</description></item>
304
+ /// <item><description>Reserve <see cref="SerializationType.SystemBinary"/> for trusted legacy scenarios only.</description></item>
305
+ /// </list>
306
+ /// </remarks>
307
+ /// <example>
308
+ /// JSON save/config
309
+ /// <code>
310
+ /// var save = new SaveData { Level = 3 };
311
+ /// // To string
312
+ /// string text = Serializer.JsonStringify(save, pretty: true);
313
+ /// // File IO
314
+ /// Serializer.WriteToJsonFile(save, "save.json", pretty: true);
315
+ /// var loaded = Serializer.ReadFromJsonFile&lt;SaveData&gt;("save.json");
316
+ /// </code>
317
+ /// Protobuf networking
318
+ /// <code>
319
+ /// [ProtoContract]
320
+ /// class NetworkMessage { [ProtoMember(1)] public int Id { get; set; } }
321
+ /// byte[] bytes = Serializer.ProtoSerialize(new NetworkMessage { Id = 42 });
322
+ /// NetworkMessage msg = Serializer.ProtoDeserialize&lt;NetworkMessage&gt;(bytes);
323
+ /// </code>
324
+ /// Legacy BinaryFormatter (trusted only)
325
+ /// <code>
326
+ /// byte[] blob = Serializer.BinarySerialize(obj);
327
+ /// var roundtrip = Serializer.BinaryDeserialize&lt;SomeType&gt;(blob);
328
+ /// </code>
329
+ /// </example>
330
+ public static class Serializer
331
+ {
332
+ /// <summary>
333
+ /// Returns a copy of the package's Normal JSON options. The returned instance is independent
334
+ /// of internal defaults, so modifying it won't affect global behavior. Cache and reuse the
335
+ /// returned instance across calls to benefit from System.Text.Json metadata caches.
336
+ /// </summary>
337
+ public static JsonSerializerOptions CreateNormalJsonOptions() =>
338
+ SerializerEncoding.GetNormalJsonOptions();
339
+
340
+ /// <summary>
341
+ /// Returns a copy of the package's Pretty (indented) JSON options.
342
+ /// </summary>
343
+ public static JsonSerializerOptions CreatePrettyJsonOptions() =>
344
+ SerializerEncoding.GetPrettyJsonOptions();
345
+
346
+ /// <summary>
347
+ /// Returns a copy of the package's Fast JSON options, tuned for hot paths with reduced validation
348
+ /// and features to minimize allocations and branching. See docs for trade-offs.
349
+ /// </summary>
350
+ public static JsonSerializerOptions CreateFastJsonOptions() =>
351
+ SerializerEncoding.GetFastJsonOptions();
352
+
353
+ /// <summary>
354
+ /// Returns a copy of the package's Fast POCO JSON options.
355
+ /// Strict, minimal, and with no Unity-specific converters.
356
+ /// Use for pure POCO graphs when you want the fastest possible serialization/deserialization.
357
+ /// Notes:
358
+ /// - Case-sensitive property names (faster matching)
359
+ /// - No comments/trailing commas; strict numbers only
360
+ /// - IncludeFields = false (prefer properties for performance)
361
+ /// - Returns a new instance each call; cache and reuse within your app to leverage STJ metadata caches
362
+ /// </summary>
363
+ public static JsonSerializerOptions CreateFastPocoJsonOptions() =>
364
+ new(SerializerEncoding.FastPocoJsonOptions);
365
+
366
+ // Small protobuf payloads benefit from protobuf-net's MemoryStream fast-path (TryGetBuffer).
367
+ // Larger payloads see wins from our pooled read-only stream to avoid per-iteration allocations.
368
+ private const int ProtobufMemoryStreamThreshold = 4096; // bytes
369
+
370
+ // Optional zero-copy path if protobuf-net supports ReadOnlyMemory<byte>/ReadOnlySequence<byte> overloads
371
+ private static readonly MethodInfo ProtoDeserializeTypeFromROM;
372
+ private static readonly MethodInfo ProtoDeserializeTypeFromROS;
373
+ private static readonly Func<
374
+ Type,
375
+ ReadOnlyMemory<byte>,
376
+ object
377
+ > ProtoDeserializeTypeFromROMFast;
378
+ private static readonly Func<
379
+ Type,
380
+ ReadOnlySequence<byte>,
381
+ object
382
+ > ProtoDeserializeTypeFromROSFast;
383
+
384
+ static Serializer()
385
+ {
386
+ // Initialize protobuf surrogates and any other serialization bootstrapping here
387
+ // so initialization does not depend on JSON option access.
388
+ ProtobufUnityModel.EnsureInitialized();
389
+ try
390
+ {
391
+ MethodInfo[] methods = typeof(ProtoBuf.Serializer).GetMethods(
392
+ BindingFlags.Public | BindingFlags.Static
393
+ );
394
+ foreach (MethodInfo mi in methods)
395
+ {
396
+ if (mi.Name != "Deserialize")
397
+ {
398
+ continue;
399
+ }
400
+
401
+ ParameterInfo[] pars = mi.GetParameters();
402
+ if (pars.Length != 2)
403
+ {
404
+ continue;
405
+ }
406
+
407
+ if (pars[0].ParameterType != typeof(Type))
408
+ {
409
+ continue;
410
+ }
411
+
412
+ Type p1 = pars[1].ParameterType;
413
+ switch (p1.IsGenericType)
414
+ {
415
+ case true when p1.GetGenericTypeDefinition() == typeof(ReadOnlyMemory<>):
416
+ {
417
+ Type genArg = p1.GetGenericArguments()[0];
418
+ if (genArg == typeof(byte))
419
+ {
420
+ ProtoDeserializeTypeFromROM ??= mi;
421
+ try
422
+ {
423
+ ProtoDeserializeTypeFromROMFast =
424
+ ReflectionHelpers.GetStaticMethodInvoker<
425
+ Type,
426
+ ReadOnlyMemory<byte>,
427
+ object
428
+ >(mi);
429
+ }
430
+ catch { }
431
+ }
432
+
433
+ break;
434
+ }
435
+ case true when p1.GetGenericTypeDefinition() == typeof(ReadOnlySequence<>):
436
+ {
437
+ Type genArg = p1.GetGenericArguments()[0];
438
+ if (genArg == typeof(byte))
439
+ {
440
+ ProtoDeserializeTypeFromROS ??= mi;
441
+ try
442
+ {
443
+ ProtoDeserializeTypeFromROSFast =
444
+ ReflectionHelpers.GetStaticMethodInvoker<
445
+ Type,
446
+ ReadOnlySequence<byte>,
447
+ object
448
+ >(mi);
449
+ }
450
+ catch { }
451
+ }
452
+
453
+ break;
454
+ }
455
+ }
456
+ }
457
+ }
458
+ catch
459
+ {
460
+ // Reflection probing failed; keep nulls and fall back to streams
461
+ }
462
+ }
463
+
464
+ private static readonly ConcurrentDictionary<Type, Type> ProtobufRootCache = new();
465
+ private static readonly Type NoRootMarker = typeof(void);
466
+
467
+ // Centralized decision logic for protobuf runtime vs declared handling
468
+ internal static bool ShouldUseRuntimeTypeForProtobuf<T>(
469
+ Type declared,
470
+ T instance,
471
+ bool forceRuntimeType
472
+ )
473
+ {
474
+ if (forceRuntimeType)
475
+ {
476
+ return true;
477
+ }
478
+
479
+ if (declared == null)
480
+ {
481
+ return true;
482
+ }
483
+
484
+ if (declared.IsInterface || declared.IsAbstract || declared == typeof(object))
485
+ {
486
+ return true;
487
+ }
488
+
489
+ // Last resort: if the declared type is a reference type and the runtime type differs,
490
+ // prefer using the runtime serializer to avoid protobuf-net subtype errors.
491
+ if (!declared.IsValueType && instance != null && instance.GetType() != declared)
492
+ {
493
+ return true;
494
+ }
495
+
496
+ return false;
497
+ }
498
+
499
+ private static readonly Utils.WallstopGenericPool<BinaryFormatter> BinaryFormatterPool =
500
+ new(() => new BinaryFormatter());
501
+
502
+ private static readonly Utils.WallstopGenericPool<Utf8JsonWriter> JsonWriterPool = new(
503
+ () => new Utf8JsonWriter(Stream.Null, new JsonWriterOptions { SkipValidation = true }),
504
+ onRelease: writer =>
505
+ {
506
+ writer.Reset(Stream.Null);
507
+ },
508
+ onDisposal: stream => stream.Dispose()
509
+ );
510
+
511
+ /// <summary>
512
+ /// Registers a concrete or abstract protobuf root type for a declared interface/abstract/object type.
513
+ /// The root must be assignable to <paramref name="declared"/> and annotated with [ProtoContract].
514
+ /// Subsequent deserializations to the declared type will use the registered root.
515
+ /// </summary>
516
+ /// <remarks>
517
+ /// Use this when deserializing to an interface/abstract/object and you want deterministic root selection
518
+ /// instead of relying on reflection inference.
519
+ /// </remarks>
520
+ /// <example>
521
+ /// <code>
522
+ /// // Given an interface and concrete implementation
523
+ /// [ProtoContract] class PlayerJoined : IEvent { [ProtoMember(1)] public string Name { get; set; } }
524
+ /// Serializer.RegisterProtobufRoot(typeof(IEvent), typeof(PlayerJoined));
525
+ /// var evt = Serializer.ProtoDeserialize&lt;IEvent&gt;(bytes);
526
+ /// </code>
527
+ /// </example>
528
+ /// <exception cref="ArgumentNullException">If declared or root is null.</exception>
529
+ /// <exception cref="ArgumentException">If root is not assignable to declared or missing [ProtoContract].</exception>
530
+ /// <exception cref="InvalidOperationException">If a conflicting root is already registered.</exception>
531
+ public static void RegisterProtobufRoot(Type declared, Type root)
532
+ {
533
+ if (declared == null)
534
+ {
535
+ throw new ArgumentNullException(nameof(declared));
536
+ }
537
+ if (root == null)
538
+ {
539
+ throw new ArgumentNullException(nameof(root));
540
+ }
541
+ if (!declared.IsAssignableFrom(root))
542
+ {
543
+ throw new ArgumentException(
544
+ $"Type {root.FullName} is not assignable to {declared.FullName}",
545
+ nameof(root)
546
+ );
547
+ }
548
+ if (!ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(root))
549
+ {
550
+ throw new ArgumentException(
551
+ $"Type {root.FullName} must be annotated with [ProtoContract]",
552
+ nameof(root)
553
+ );
554
+ }
555
+
556
+ if (ProtobufRootCache.TryGetValue(declared, out Type existing))
557
+ {
558
+ if (existing != root && existing != NoRootMarker)
559
+ {
560
+ throw new InvalidOperationException(
561
+ $"A different root {existing.FullName} is already registered for {declared.FullName}"
562
+ );
563
+ }
564
+ }
565
+
566
+ ProtobufRootCache[declared] = root;
567
+ }
568
+
569
+ /// <summary>
570
+ /// Generic convenience overload for registering a protobuf root type.
571
+ /// </summary>
572
+ /// <remarks>
573
+ /// Useful for polymorphic APIs: map <typeparamref name="TDeclared"/> to <typeparamref name="TRoot"/> once,
574
+ /// then call <see cref="ProtoDeserialize{T}(byte[])"/> for the declared type.
575
+ /// </remarks>
576
+ /// <example>
577
+ /// <code>
578
+ /// Serializer.RegisterProtobufRoot&lt;IEvent, PlayerJoined&gt;();
579
+ /// IEvent evt = Serializer.ProtoDeserialize&lt;IEvent&gt;(bytes);
580
+ /// </code>
581
+ /// </example>
582
+ public static void RegisterProtobufRoot<TDeclared, TRoot>()
583
+ where TRoot : TDeclared
584
+ {
585
+ RegisterProtobufRoot(typeof(TDeclared), typeof(TRoot));
586
+ }
587
+
588
+ /// <summary>
589
+ /// Deserializes a payload that was serialized with the specified <paramref name="serializationType"/>.
590
+ /// </summary>
591
+ /// <typeparam name="T">The target type.</typeparam>
592
+ /// <param name="serialized">Payload bytes to decode.</param>
593
+ /// <param name="serializationType">The format the payload is encoded with.</param>
594
+ /// <returns>The decoded instance.</returns>
595
+ /// <example>
596
+ /// JSON
597
+ /// <code>
598
+ /// byte[] data = Serializer.JsonSerialize(save);
599
+ /// SaveData loaded = Serializer.Deserialize&lt;SaveData&gt;(data, SerializationType.Json);
600
+ /// </code>
601
+ /// Protobuf
602
+ /// <code>
603
+ /// byte[] msg = Serializer.ProtoSerialize(message);
604
+ /// NetworkMessage decoded = Serializer.Deserialize&lt;NetworkMessage&gt;(msg, SerializationType.Protobuf);
605
+ /// </code>
606
+ /// </example>
607
+ public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
608
+ {
609
+ switch (serializationType)
610
+ {
611
+ case SerializationType.SystemBinary:
612
+ {
613
+ return BinaryDeserialize<T>(serialized);
614
+ }
615
+ case SerializationType.Protobuf:
616
+ {
617
+ return ProtoDeserialize<T>(serialized);
618
+ }
619
+ case SerializationType.Json:
620
+ {
621
+ return JsonDeserialize<T>(serialized);
622
+ }
623
+ default:
624
+ {
625
+ throw new InvalidEnumArgumentException(
626
+ nameof(serializationType),
627
+ (int)serializationType,
628
+ typeof(SerializationType)
629
+ );
630
+ }
631
+ }
632
+ }
633
+
634
+ /// <summary>
635
+ /// Serializes an instance into bytes using the specified <paramref name="serializationType"/>.
636
+ /// </summary>
637
+ /// <typeparam name="T">The instance type.</typeparam>
638
+ /// <param name="instance">The instance to encode.</param>
639
+ /// <param name="serializationType">The target wire format.</param>
640
+ /// <returns>Serialized bytes.</returns>
641
+ /// <example>
642
+ /// <code>
643
+ /// // As bytes
644
+ /// byte[] data = Serializer.Serialize(save, SerializationType.Json);
645
+ /// // Later
646
+ /// SaveData loaded = Serializer.Deserialize&lt;SaveData&gt;(data, SerializationType.Json);
647
+ /// </code>
648
+ /// </example>
649
+ public static byte[] Serialize<T>(T instance, SerializationType serializationType)
650
+ {
651
+ switch (serializationType)
652
+ {
653
+ case SerializationType.SystemBinary:
654
+ {
655
+ return BinarySerialize(instance);
656
+ }
657
+ case SerializationType.Protobuf:
658
+ {
659
+ return ProtoSerialize(instance);
660
+ }
661
+ case SerializationType.Json:
662
+ {
663
+ return JsonSerialize(instance);
664
+ }
665
+ default:
666
+ {
667
+ throw new InvalidEnumArgumentException(
668
+ nameof(serializationType),
669
+ (int)serializationType,
670
+ typeof(SerializationType)
671
+ );
672
+ }
673
+ }
674
+ }
675
+
676
+ /// <summary>
677
+ /// Serializes into a caller-provided buffer to avoid an extra allocation.
678
+ /// </summary>
679
+ /// <typeparam name="T">The instance type.</typeparam>
680
+ /// <param name="instance">The instance to encode.</param>
681
+ /// <param name="serializationType">The target wire format.</param>
682
+ /// <param name="buffer">Destination buffer reference. Resized if too small.</param>
683
+ /// <returns>The number of valid bytes written to <paramref name="buffer"/>.</returns>
684
+ public static int Serialize<T>(
685
+ T instance,
686
+ SerializationType serializationType,
687
+ ref byte[] buffer
688
+ )
689
+ {
690
+ switch (serializationType)
691
+ {
692
+ case SerializationType.SystemBinary:
693
+ {
694
+ return BinarySerialize(instance, ref buffer);
695
+ }
696
+ case SerializationType.Protobuf:
697
+ {
698
+ return ProtoSerialize(instance, ref buffer);
699
+ }
700
+ case SerializationType.Json:
701
+ {
702
+ return JsonSerialize(instance, ref buffer);
703
+ }
704
+ default:
705
+ {
706
+ throw new InvalidEnumArgumentException(
707
+ nameof(serializationType),
708
+ (int)serializationType,
709
+ typeof(SerializationType)
710
+ );
711
+ }
712
+ }
713
+ }
714
+
715
+ /// <summary>
716
+ /// Deserializes bytes using legacy <c>BinaryFormatter</c>.
717
+ /// </summary>
718
+ /// <typeparam name="T">Target type.</typeparam>
719
+ /// <param name="data">Serialized bytes.</param>
720
+ /// <remarks>
721
+ /// Security: Never deserialize untrusted data with BinaryFormatter. It is obsolete and unsafe.
722
+ /// Portability: Fragile across versions/platforms; avoid for long‑lived data.
723
+ /// Prefer <see cref="JsonDeserialize{T}(string, System.Type, System.Text.Json.JsonSerializerOptions)"/> or <see cref="ProtoDeserialize{T}(byte[])"/> in production.
724
+ /// </remarks>
725
+ public static T BinaryDeserialize<T>(byte[] data)
726
+ {
727
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
728
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
729
+ stream.SetBuffer(data);
730
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
731
+ out BinaryFormatter binaryFormatter
732
+ );
733
+ return (T)binaryFormatter.Deserialize(stream);
734
+ }
735
+
736
+ /// <summary>
737
+ /// Serializes an object using legacy <c>BinaryFormatter</c>.
738
+ /// </summary>
739
+ /// <typeparam name="T">Instance type.</typeparam>
740
+ /// <param name="input">Object to serialize.</param>
741
+ /// <returns>Serialized bytes.</returns>
742
+ /// <remarks>
743
+ /// Use for trusted, temporary data only. Not safe for untrusted input. Prefer JSON or protobuf.
744
+ /// </remarks>
745
+ public static byte[] BinarySerialize<T>(T input)
746
+ {
747
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
748
+ out PooledBufferStream stream
749
+ );
750
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
751
+ out BinaryFormatter binaryFormatter
752
+ );
753
+ binaryFormatter.Serialize(stream, input);
754
+ byte[] buffer = null;
755
+ stream.ToArrayExact(ref buffer);
756
+ return buffer;
757
+ }
758
+
759
+ /// <summary>
760
+ /// Serializes to a caller buffer using <c>BinaryFormatter</c>.
761
+ /// </summary>
762
+ /// <typeparam name="T">Instance type.</typeparam>
763
+ /// <param name="input">Object to serialize.</param>
764
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
765
+ /// <returns>Number of bytes written.</returns>
766
+ public static int BinarySerialize<T>(T input, ref byte[] buffer)
767
+ {
768
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
769
+ out PooledBufferStream stream
770
+ );
771
+ using Utils.PooledResource<BinaryFormatter> fmtLease = BinaryFormatterPool.Get(
772
+ out BinaryFormatter binaryFormatter
773
+ );
774
+ binaryFormatter.Serialize(stream, input);
775
+ return stream.ToArrayExact(ref buffer);
776
+ }
777
+
778
+ /// <summary>
779
+ /// Deserializes protobuf‑net bytes to <typeparamref name="T"/>.
780
+ /// </summary>
781
+ /// <typeparam name="T">Target type.</typeparam>
782
+ /// <param name="data">Encoded protobuf payload.</param>
783
+ /// <returns>The decoded instance.</returns>
784
+ /// <remarks>
785
+ /// Polymorphism and interfaces:
786
+ /// - If <typeparamref name="T"/> is an interface, abstract type, or <see cref="object"/>, deserialization
787
+ /// requires a concrete root type. We resolve this by either using an abstract base that is marked with
788
+ /// <c>[ProtoContract]</c> and <c>[ProtoInclude]</c> for all subtypes (e.g.,
789
+ /// <c>AbstractRandom</c> in the random package) or by a previously registered mapping via
790
+ /// <see cref="RegisterProtobufRoot{TDeclared, TRoot}()"/>. If no unique root is found, a
791
+ /// <see cref="ProtoException"/> is thrown to avoid ambiguous heuristics.
792
+ ///
793
+ /// Examples
794
+ /// <code><![CDATA[
795
+ /// // 1) Using an abstract base with [ProtoInclude]s
796
+ /// [ProtoContract]
797
+ /// abstract class Message { }
798
+ /// [ProtoContract] class Ping : Message { [ProtoMember(1)] public int Id { get; set; } }
799
+ /// // Deserialize to the abstract base; protobuf-net resolves to Ping
800
+ /// Message m = Serializer.ProtoDeserialize<Message>(bytes);
801
+ ///
802
+ /// // 2) Using an interface by registering a root
803
+ /// interface IEvent { }
804
+ /// [ProtoContract] class PlayerJoined : IEvent { [ProtoMember(1)] public string Name { get; set; } }
805
+ /// Serializer.RegisterProtobufRoot<IEvent, PlayerJoined>();
806
+ /// IEvent evt = Serializer.ProtoDeserialize<IEvent>(bytes);
807
+ ///
808
+ /// // 3) Overload that specifies the concrete type explicitly
809
+ /// IEvent evt2 = Serializer.ProtoDeserialize<IEvent>(bytes, typeof(PlayerJoined));
810
+ /// ]]></code>
811
+ /// </remarks>
812
+ public static T ProtoDeserialize<T>(byte[] data)
813
+ {
814
+ if (data == null)
815
+ {
816
+ throw new ProtoException("No data provided for Protobuf deserialization.");
817
+ }
818
+ try
819
+ {
820
+ // Prefer zero-copy ROM/ROS overloads when available
821
+ if (ProtoDeserializeTypeFromROMFast != null)
822
+ {
823
+ ReadOnlyMemory<byte> rom = new(data);
824
+ Type declared = typeof(T);
825
+ if (
826
+ ShouldUseRuntimeTypeForProtobuf<T>(
827
+ declared,
828
+ default,
829
+ forceRuntimeType: false
830
+ )
831
+ )
832
+ {
833
+ Type root = ResolveProtobufRootType(declared);
834
+ if (root != null)
835
+ {
836
+ return (T)ProtoDeserializeTypeFromROMFast(root, rom);
837
+ }
838
+
839
+ throw new ProtoException(
840
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
841
+ );
842
+ }
843
+
844
+ return (T)ProtoDeserializeTypeFromROMFast(declared, rom);
845
+ }
846
+
847
+ if (ProtoDeserializeTypeFromROSFast != null)
848
+ {
849
+ ReadOnlySequence<byte> ros = new(data);
850
+ Type declared = typeof(T);
851
+ if (
852
+ ShouldUseRuntimeTypeForProtobuf<T>(
853
+ declared,
854
+ default,
855
+ forceRuntimeType: false
856
+ )
857
+ )
858
+ {
859
+ Type root = ResolveProtobufRootType(declared);
860
+ if (root != null)
861
+ {
862
+ return (T)ProtoDeserializeTypeFromROSFast(root, ros);
863
+ }
864
+
865
+ throw new ProtoException(
866
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
867
+ );
868
+ }
869
+
870
+ return (T)ProtoDeserializeTypeFromROSFast(declared, ros);
871
+ }
872
+
873
+ // For small payloads, allow protobuf-net to use MemoryStream's non-copy buffer access
874
+ if (data.Length <= ProtobufMemoryStreamThreshold)
875
+ {
876
+ using MemoryStream ms = new(data, writable: false);
877
+ Type declared = typeof(T);
878
+ if (
879
+ ShouldUseRuntimeTypeForProtobuf<T>(
880
+ declared,
881
+ default,
882
+ forceRuntimeType: false
883
+ )
884
+ )
885
+ {
886
+ Type root = ResolveProtobufRootType(declared);
887
+ if (root != null)
888
+ {
889
+ return (T)ProtoBuf.Serializer.Deserialize(root, ms);
890
+ }
891
+
892
+ throw new ProtoException(
893
+ $"Unable to resolve a unique protobuf root for declared type {declared.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
894
+ );
895
+ }
896
+
897
+ return ProtoBuf.Serializer.Deserialize<T>(ms);
898
+ }
899
+
900
+ // For larger payloads, prefer pooled stream to avoid per-iteration allocations
901
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
902
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
903
+ stream.SetBuffer(data);
904
+
905
+ Type declaredLarge = typeof(T);
906
+ if (
907
+ ShouldUseRuntimeTypeForProtobuf<T>(
908
+ declaredLarge,
909
+ default,
910
+ forceRuntimeType: false
911
+ )
912
+ )
913
+ {
914
+ Type root = ResolveProtobufRootType(declaredLarge);
915
+ if (root != null)
916
+ {
917
+ return (T)ProtoBuf.Serializer.Deserialize(root, stream);
918
+ }
919
+
920
+ throw new ProtoException(
921
+ $"Unable to resolve a unique protobuf root for declared type {declaredLarge.FullName}. Register a root via RegisterProtobufRoot or annotate a shared abstract base with [ProtoInclude]s."
922
+ );
923
+ }
924
+
925
+ return ProtoBuf.Serializer.Deserialize<T>(stream);
926
+ }
927
+ catch (ProtoException)
928
+ {
929
+ throw;
930
+ }
931
+ catch (Exception ex)
932
+ {
933
+ throw new ProtoException(
934
+ "Protobuf deserialization failed: invalid or corrupted data.",
935
+ ex
936
+ );
937
+ }
938
+ }
939
+
940
+ // Attempts to resolve a concrete root type for protobuf-net when the declared generic type
941
+ // is interface/abstract/object.
942
+ // Rules:
943
+ // - If a root is explicitly registered, use it.
944
+ // - If the declared type itself is an abstract [ProtoContract] (with [ProtoInclude]s), return the declared type
945
+ // to allow protobuf-net to handle subtypes via includes.
946
+ // - Do not auto-pick implementations based on reflection heuristics; require registration instead to avoid
947
+ // ambiguity and brittle ordering of loaded types.
948
+ private static Type ResolveProtobufRootType(Type declared)
949
+ {
950
+ if (declared == null)
951
+ {
952
+ return null;
953
+ }
954
+
955
+ // If declared is already a usable concrete type, just return it
956
+ if (!declared.IsInterface && !declared.IsAbstract && declared != typeof(object))
957
+ {
958
+ return declared;
959
+ }
960
+
961
+ // If declared itself is an abstract [ProtoContract] base with [ProtoInclude]s, prefer it
962
+ if (
963
+ declared.IsAbstract
964
+ && ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(declared)
965
+ )
966
+ {
967
+ return declared;
968
+ }
969
+
970
+ if (ProtobufRootCache.TryGetValue(declared, out Type cached))
971
+ {
972
+ return cached == NoRootMarker ? null : cached;
973
+ }
974
+
975
+ // Try to resolve a unique abstract [ProtoContract] base that implements the declared interface.
976
+ // This allows scenarios like: IRandom -> AbstractRandom (annotated with [ProtoContract] + [ProtoInclude]).
977
+ // We deliberately keep the search local to the declaring assembly to avoid brittle cross-assembly heuristics.
978
+ if (declared.IsInterface && declared != typeof(object))
979
+ {
980
+ try
981
+ {
982
+ Type[] types = ReflectionHelpers.GetTypesFromAssembly(declared.Assembly);
983
+ Type[] candidates = types
984
+ .Where(t =>
985
+ t.IsClass
986
+ && t.IsAbstract
987
+ && declared.IsAssignableFrom(t)
988
+ && ReflectionHelpers.HasAttributeSafe<ProtoContractAttribute>(t)
989
+ )
990
+ .ToArray();
991
+
992
+ switch (candidates.Length)
993
+ {
994
+ case 1:
995
+ {
996
+ Type root = candidates[0];
997
+ ProtobufRootCache[declared] = root;
998
+ return root;
999
+ }
1000
+ case > 1:
1001
+ {
1002
+ // Prefer a candidate that explicitly declares [ProtoInclude]s if this disambiguates
1003
+ Type[] includeCandidates = candidates
1004
+ .Where(t =>
1005
+ ReflectionHelpers.HasAttributeSafe<ProtoIncludeAttribute>(t)
1006
+ )
1007
+ .ToArray();
1008
+
1009
+ if (includeCandidates.Length == 1)
1010
+ {
1011
+ Type root = includeCandidates[0];
1012
+ ProtobufRootCache[declared] = root;
1013
+ return root;
1014
+ }
1015
+
1016
+ break;
1017
+ }
1018
+ }
1019
+ }
1020
+ catch
1021
+ {
1022
+ // Reflection may fail in some restricted environments; fall through to marker/null
1023
+ }
1024
+ }
1025
+
1026
+ ProtobufRootCache[declared] = NoRootMarker;
1027
+ return null;
1028
+ }
1029
+
1030
+ /// <summary>
1031
+ /// Deserializes protobuf‑net bytes into the provided <paramref name="type"/>.
1032
+ /// </summary>
1033
+ /// <typeparam name="T">Expected return type after cast.</typeparam>
1034
+ /// <param name="data">Encoded protobuf payload.</param>
1035
+ /// <param name="type">Concrete type to deserialize to.</param>
1036
+ /// <returns>The decoded instance cast to <typeparamref name="T"/>.</returns>
1037
+ public static T ProtoDeserialize<T>(byte[] data, Type type)
1038
+ {
1039
+ if (data == null)
1040
+ {
1041
+ throw new ArgumentException(nameof(data));
1042
+ }
1043
+
1044
+ if (type == null)
1045
+ {
1046
+ throw new ArgumentNullException(nameof(type));
1047
+ }
1048
+
1049
+ try
1050
+ {
1051
+ // Prefer zero-copy ROM/ROS overloads when available
1052
+ if (ProtoDeserializeTypeFromROMFast != null)
1053
+ {
1054
+ ReadOnlyMemory<byte> rom = new(data);
1055
+ return (T)ProtoDeserializeTypeFromROMFast(type, rom);
1056
+ }
1057
+ if (ProtoDeserializeTypeFromROSFast != null)
1058
+ {
1059
+ ReadOnlySequence<byte> ros = new(data);
1060
+ return (T)ProtoDeserializeTypeFromROSFast(type, ros);
1061
+ }
1062
+
1063
+ if (data.Length <= ProtobufMemoryStreamThreshold)
1064
+ {
1065
+ using MemoryStream ms = new(data, writable: false);
1066
+ return (T)ProtoBuf.Serializer.Deserialize(type, ms);
1067
+ }
1068
+
1069
+ using Utils.PooledResource<PooledReadOnlyMemoryStream> lease =
1070
+ PooledReadOnlyMemoryStream.Rent(out PooledReadOnlyMemoryStream stream);
1071
+ stream.SetBuffer(data);
1072
+ return (T)ProtoBuf.Serializer.Deserialize(type, stream);
1073
+ }
1074
+ catch (ProtoException)
1075
+ {
1076
+ throw;
1077
+ }
1078
+ catch (Exception ex)
1079
+ {
1080
+ throw new ProtoException(
1081
+ "Protobuf deserialization failed: invalid or corrupted data.",
1082
+ ex
1083
+ );
1084
+ }
1085
+ }
1086
+
1087
+ /// <summary>
1088
+ /// Serializes an instance to protobuf‑net bytes.
1089
+ /// </summary>
1090
+ /// <typeparam name="T">Declared type.</typeparam>
1091
+ /// <param name="input">The instance to serialize.</param>
1092
+ /// <param name="forceRuntimeType">When true, always serialize as the runtime type; otherwise uses declared type unless it is interface/abstract/object.</param>
1093
+ /// <returns>Serialized bytes.</returns>
1094
+ /// <example>
1095
+ /// <code>
1096
+ /// [ProtoContract]
1097
+ /// class NetworkMessage { [ProtoMember(1)] public int Id { get; set; } }
1098
+ /// var bytes = Serializer.ProtoSerialize(new NetworkMessage { Id = 5 });
1099
+ /// var msg = Serializer.ProtoDeserialize&lt;NetworkMessage&gt;(bytes);
1100
+ /// </code>
1101
+ /// </example>
1102
+ public static byte[] ProtoSerialize<T>(T input, bool forceRuntimeType = false)
1103
+ {
1104
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
1105
+ out PooledBufferStream stream
1106
+ );
1107
+ Type declared = typeof(T);
1108
+ bool useRuntime = ShouldUseRuntimeTypeForProtobuf(declared, input, forceRuntimeType);
1109
+
1110
+ if (useRuntime)
1111
+ {
1112
+ ProtoBuf.Serializer.NonGeneric.Serialize(stream, input);
1113
+ }
1114
+ else
1115
+ {
1116
+ ProtoBuf.Serializer.Serialize(stream, input);
1117
+ }
1118
+
1119
+ byte[] buffer = null;
1120
+ stream.ToArrayExact(ref buffer);
1121
+ return buffer;
1122
+ }
1123
+
1124
+ /// <summary>
1125
+ /// Serializes an instance to protobuf‑net bytes into a caller-provided buffer.
1126
+ /// </summary>
1127
+ /// <typeparam name="T">Declared type.</typeparam>
1128
+ /// <param name="input">The instance to serialize.</param>
1129
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
1130
+ /// <param name="forceRuntimeType">When true, always serialize as the runtime type.</param>
1131
+ /// <returns>Number of bytes written.</returns>
1132
+ public static int ProtoSerialize<T>(
1133
+ T input,
1134
+ ref byte[] buffer,
1135
+ bool forceRuntimeType = false
1136
+ )
1137
+ {
1138
+ using Utils.PooledResource<PooledBufferStream> lease = PooledBufferStream.Rent(
1139
+ out PooledBufferStream stream
1140
+ );
1141
+ Type declared = typeof(T);
1142
+ bool useRuntime = ShouldUseRuntimeTypeForProtobuf(declared, input, forceRuntimeType);
1143
+
1144
+ if (useRuntime)
1145
+ {
1146
+ ProtoBuf.Serializer.NonGeneric.Serialize(stream, input);
1147
+ }
1148
+ else
1149
+ {
1150
+ ProtoBuf.Serializer.Serialize(stream, input);
1151
+ }
1152
+ return stream.ToArrayExact(ref buffer);
1153
+ }
1154
+
1155
+ /// <summary>
1156
+ /// Deserializes JSON text to <typeparamref name="T"/> using Unity‑aware converters.
1157
+ /// </summary>
1158
+ /// <typeparam name="T">Target type.</typeparam>
1159
+ /// <param name="data">JSON string.</param>
1160
+ /// <param name="type">Optional concrete target type (defaults to <typeparamref name="T"/>).</param>
1161
+ /// <param name="options">Serializer options; defaults include converters for Unity types and ReferenceHandler.IgnoreCycles.</param>
1162
+ /// <returns>The decoded instance.</returns>
1163
+ public static T JsonDeserialize<T>(
1164
+ string data,
1165
+ Type type = null,
1166
+ JsonSerializerOptions options = null
1167
+ )
1168
+ {
1169
+ return (T)
1170
+ JsonSerializer.Deserialize(
1171
+ data,
1172
+ type ?? typeof(T),
1173
+ options ?? SerializerEncoding.NormalJsonOptions
1174
+ );
1175
+ }
1176
+
1177
+ /// <summary>
1178
+ /// Deserializes JSON bytes (UTF-8) to <typeparamref name="T"/> using Unity-aware converters.
1179
+ /// Avoids intermediate string allocation by using span-based System.Text.Json APIs.
1180
+ /// </summary>
1181
+ /// <typeparam name="T">Target type.</typeparam>
1182
+ /// <param name="data">UTF-8 JSON bytes.</param>
1183
+ /// <param name="type">Optional concrete target type (defaults to <typeparamref name="T"/>).</param>
1184
+ /// <param name="options">Serializer options; defaults include Unity converters.</param>
1185
+ /// <returns>The decoded instance.</returns>
1186
+ public static T JsonDeserialize<T>(
1187
+ byte[] data,
1188
+ Type type = null,
1189
+ JsonSerializerOptions options = null
1190
+ )
1191
+ {
1192
+ if (data == null)
1193
+ {
1194
+ throw new ArgumentNullException(nameof(data));
1195
+ }
1196
+
1197
+ ReadOnlySpan<byte> span = new(data);
1198
+ return (T)
1199
+ JsonSerializer.Deserialize(
1200
+ span,
1201
+ type ?? typeof(T),
1202
+ options ?? SerializerEncoding.NormalJsonOptions
1203
+ );
1204
+ }
1205
+
1206
+ /// <summary>
1207
+ /// Fast-path JSON deserialize using strict, allocation-lean options.
1208
+ /// </summary>
1209
+ public static T JsonDeserializeFast<T>(byte[] data)
1210
+ {
1211
+ if (data == null)
1212
+ {
1213
+ throw new ArgumentNullException(nameof(data));
1214
+ }
1215
+ ReadOnlySpan<byte> span = new(data);
1216
+ return JsonSerializer.Deserialize<T>(span, SerializerEncoding.FastJsonOptions);
1217
+ }
1218
+
1219
+ /// <summary>
1220
+ /// Serializes an instance to JSON bytes (UTF‑8) using Unity‑aware converters.
1221
+ /// </summary>
1222
+ /// <typeparam name="T">Instance type.</typeparam>
1223
+ /// <param name="input">The instance to serialize.</param>
1224
+ /// <returns>UTF‑8 JSON bytes.</returns>
1225
+ public static byte[] JsonSerialize<T>(T input)
1226
+ {
1227
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1228
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1229
+ WriteJsonToBuffer(input, SerializerEncoding.NormalJsonOptions, bufferWriter);
1230
+ byte[] buffer = null;
1231
+ bufferWriter.ToArrayExact(ref buffer);
1232
+ return buffer;
1233
+ }
1234
+
1235
+ /// <summary>
1236
+ /// Serializes an instance to JSON bytes (UTF-8) using caller-provided options.
1237
+ /// Tip: Reuse the same options instance across calls to benefit from metadata caches.
1238
+ /// </summary>
1239
+ public static byte[] JsonSerialize<T>(T input, JsonSerializerOptions options)
1240
+ {
1241
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1242
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1243
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1244
+ byte[] buffer = null;
1245
+ bufferWriter.ToArrayExact(ref buffer);
1246
+ return buffer;
1247
+ }
1248
+
1249
+ /// <summary>
1250
+ /// Serializes an instance to JSON bytes (UTF‑8) into a caller-provided buffer.
1251
+ /// </summary>
1252
+ /// <typeparam name="T">Instance type.</typeparam>
1253
+ /// <param name="input">The instance to serialize.</param>
1254
+ /// <param name="buffer">Destination buffer reference. Resized if necessary.</param>
1255
+ /// <returns>Number of bytes written.</returns>
1256
+ public static int JsonSerialize<T>(T input, ref byte[] buffer)
1257
+ {
1258
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1259
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1260
+ WriteJsonToBuffer(input, SerializerEncoding.NormalJsonOptions, bufferWriter);
1261
+ return bufferWriter.ToArrayExact(ref buffer);
1262
+ }
1263
+
1264
+ /// <summary>
1265
+ /// Serializes into a caller-provided buffer using caller options.
1266
+ /// Reuses the provided buffer when large enough to avoid allocations; resizes if necessary.
1267
+ /// </summary>
1268
+ public static int JsonSerialize<T>(
1269
+ T input,
1270
+ JsonSerializerOptions options,
1271
+ ref byte[] buffer
1272
+ )
1273
+ {
1274
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1275
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1276
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1277
+ return bufferWriter.ToArrayExact(ref buffer);
1278
+ }
1279
+
1280
+ /// <summary>
1281
+ /// Serializes into a caller-provided buffer using caller options and a size hint to reduce growth copies.
1282
+ /// Provide an approximate size of the final payload to minimize buffer growth/copy churn for large outputs.
1283
+ /// Example: for large int[] payloads, estimate (count * 12) + overhead.
1284
+ /// </summary>
1285
+ public static int JsonSerialize<T>(
1286
+ T input,
1287
+ JsonSerializerOptions options,
1288
+ int sizeHint,
1289
+ ref byte[] buffer
1290
+ )
1291
+ {
1292
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1293
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1294
+ if (sizeHint > 0)
1295
+ {
1296
+ bufferWriter.Preallocate(sizeHint);
1297
+ }
1298
+ WriteJsonToBuffer(input, options ?? SerializerEncoding.NormalJsonOptions, bufferWriter);
1299
+ return bufferWriter.ToArrayExact(ref buffer);
1300
+ }
1301
+
1302
+ /// <summary>
1303
+ /// Fast-path JSON serialize using strict, allocation-lean options.
1304
+ /// </summary>
1305
+ public static byte[] JsonSerializeFast<T>(T input)
1306
+ {
1307
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1308
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1309
+ WriteJsonToBuffer(input, SerializerEncoding.FastJsonOptions, bufferWriter);
1310
+ byte[] buffer = null;
1311
+ bufferWriter.ToArrayExact(ref buffer);
1312
+ return buffer;
1313
+ }
1314
+
1315
+ /// <summary>
1316
+ /// Fast-path JSON serialize into a caller-provided buffer.
1317
+ /// </summary>
1318
+ public static int JsonSerializeFast<T>(T input, ref byte[] buffer)
1319
+ {
1320
+ using Utils.PooledResource<PooledArrayBufferWriter> lease =
1321
+ PooledArrayBufferWriter.Rent(out PooledArrayBufferWriter bufferWriter);
1322
+ WriteJsonToBuffer(input, SerializerEncoding.FastJsonOptions, bufferWriter);
1323
+ return bufferWriter.ToArrayExact(ref buffer);
1324
+ }
1325
+
1326
+ private static void WriteJsonToStream<T>(
1327
+ T input,
1328
+ JsonSerializerOptions options,
1329
+ Stream stream
1330
+ )
1331
+ {
1332
+ if (options == null)
1333
+ {
1334
+ throw new ArgumentNullException(nameof(options));
1335
+ }
1336
+ if (stream == null)
1337
+ {
1338
+ throw new ArgumentNullException(nameof(stream));
1339
+ }
1340
+
1341
+ using (JsonWriterPool.Get(out Utf8JsonWriter writer))
1342
+ {
1343
+ writer.Reset(stream);
1344
+ Type parameterType = typeof(T);
1345
+ if (
1346
+ parameterType.IsAbstract
1347
+ || parameterType.IsInterface
1348
+ || parameterType == typeof(object)
1349
+ )
1350
+ {
1351
+ object data = input;
1352
+ if (data == null)
1353
+ {
1354
+ writer.WriteStartObject();
1355
+ writer.WriteEndObject();
1356
+ writer.Flush();
1357
+ return;
1358
+ }
1359
+
1360
+ Type type = data.GetType();
1361
+ JsonSerializer.Serialize(writer, data, type, options);
1362
+ }
1363
+ else
1364
+ {
1365
+ JsonSerializer.Serialize(writer, input, options);
1366
+ }
1367
+ writer.Flush();
1368
+ }
1369
+ }
1370
+
1371
+ /// <summary>
1372
+ /// Serializes an instance to a JSON string.
1373
+ /// </summary>
1374
+ /// <typeparam name="T">Instance type.</typeparam>
1375
+ /// <param name="input">The instance to serialize.</param>
1376
+ /// <param name="pretty">Write indented output when true.</param>
1377
+ /// <returns>JSON text.</returns>
1378
+ /// <example>
1379
+ /// <code>
1380
+ /// var json = Serializer.JsonStringify(save, pretty: true);
1381
+ /// var roundtrip = Serializer.JsonDeserialize&lt;SaveData&gt;(json);
1382
+ /// </code>
1383
+ /// </example>
1384
+ public static string JsonStringify<T>(T input, bool pretty = false)
1385
+ {
1386
+ JsonSerializerOptions options = pretty
1387
+ ? SerializerEncoding.PrettyJsonOptions
1388
+ : SerializerEncoding.NormalJsonOptions;
1389
+
1390
+ return JsonStringify(input, options);
1391
+ }
1392
+
1393
+ /// <summary>
1394
+ /// Serializes an instance to a JSON string using the provided <paramref name="options"/>.
1395
+ /// </summary>
1396
+ /// <typeparam name="T">Instance type.</typeparam>
1397
+ /// <param name="input">The instance to serialize.</param>
1398
+ /// <param name="options">Serializer options.</param>
1399
+ /// <returns>JSON text.</returns>
1400
+ public static string JsonStringify<T>(T input, JsonSerializerOptions options)
1401
+ {
1402
+ if (options == null)
1403
+ {
1404
+ throw new ArgumentNullException(nameof(options));
1405
+ }
1406
+
1407
+ Type parameterType = typeof(T);
1408
+ if (
1409
+ parameterType.IsAbstract
1410
+ || parameterType.IsInterface
1411
+ || parameterType == typeof(object)
1412
+ )
1413
+ {
1414
+ object data = input;
1415
+ if (data == null)
1416
+ {
1417
+ return "{}";
1418
+ }
1419
+
1420
+ Type type = data.GetType();
1421
+ return JsonSerializer.Serialize(data, type, options);
1422
+ }
1423
+
1424
+ return JsonSerializer.Serialize(input, options);
1425
+ }
1426
+
1427
+ /// <summary>
1428
+ /// Reads JSON text from a file (UTF‑8) and deserializes to <typeparamref name="T"/>.
1429
+ /// </summary>
1430
+ /// <typeparam name="T">Target type.</typeparam>
1431
+ /// <param name="path">File path.</param>
1432
+ /// <returns>Decoded instance.</returns>
1433
+ public static T ReadFromJsonFile<T>(string path)
1434
+ {
1435
+ byte[] settingsAsBytes = File.ReadAllBytes(path);
1436
+ return JsonDeserialize<T>(settingsAsBytes);
1437
+ }
1438
+
1439
+ private static void WriteJsonToBuffer<T>(
1440
+ T input,
1441
+ JsonSerializerOptions options,
1442
+ PooledArrayBufferWriter buffer
1443
+ )
1444
+ {
1445
+ if (options == null)
1446
+ {
1447
+ throw new ArgumentNullException(nameof(options));
1448
+ }
1449
+ if (buffer == null)
1450
+ {
1451
+ throw new ArgumentNullException(nameof(buffer));
1452
+ }
1453
+
1454
+ using (
1455
+ Utf8JsonWriter writer = new(buffer, new JsonWriterOptions { SkipValidation = true })
1456
+ )
1457
+ {
1458
+ Type parameterType = typeof(T);
1459
+ if (
1460
+ parameterType.IsAbstract
1461
+ || parameterType.IsInterface
1462
+ || parameterType == typeof(object)
1463
+ )
1464
+ {
1465
+ object data = input;
1466
+ if (data == null)
1467
+ {
1468
+ writer.WriteStartObject();
1469
+ writer.WriteEndObject();
1470
+ writer.Flush();
1471
+ return;
1472
+ }
1473
+
1474
+ Type type = data.GetType();
1475
+ JsonSerializer.Serialize(writer, data, type, options);
1476
+ }
1477
+ else
1478
+ {
1479
+ JsonSerializer.Serialize(writer, input, options);
1480
+ }
1481
+ writer.Flush();
1482
+ }
1483
+ }
1484
+
1485
+ /// <summary>
1486
+ /// Asynchronously reads JSON text from a file (UTF‑8) and deserializes to <typeparamref name="T"/>.
1487
+ /// </summary>
1488
+ /// <typeparam name="T">Target type.</typeparam>
1489
+ /// <param name="path">File path.</param>
1490
+ /// <returns>Decoded instance.</returns>
1491
+ public static async Task<T> ReadFromJsonFileAsync<T>(string path)
1492
+ {
1493
+ byte[] settingsAsBytes = await File.ReadAllBytesAsync(path);
1494
+ return JsonDeserialize<T>(settingsAsBytes);
1495
+ }
1496
+
1497
+ /// <summary>
1498
+ /// Writes an instance to a JSON file (UTF‑8).
1499
+ /// </summary>
1500
+ /// <typeparam name="T">Instance type.</typeparam>
1501
+ /// <param name="input">The instance to serialize.</param>
1502
+ /// <param name="path">Destination file path.</param>
1503
+ /// <param name="pretty">Write indented output when true.</param>
1504
+ public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
1505
+ {
1506
+ string jsonAsText = JsonStringify(input, pretty);
1507
+ File.WriteAllText(path, jsonAsText);
1508
+ }
1509
+
1510
+ /// <summary>
1511
+ /// Asynchronously writes an instance to a JSON file (UTF‑8).
1512
+ /// </summary>
1513
+ /// <typeparam name="T">Instance type.</typeparam>
1514
+ /// <param name="input">The instance to serialize.</param>
1515
+ /// <param name="path">Destination file path.</param>
1516
+ /// <param name="pretty">Write indented output when true.</param>
1517
+ public static async Task WriteToJsonFileAsync<T>(T input, string path, bool pretty = true)
1518
+ {
1519
+ string jsonAsText = JsonStringify(input, pretty);
1520
+ await File.WriteAllTextAsync(path, jsonAsText);
1521
+ }
1522
+
1523
+ /// <summary>
1524
+ /// Writes an instance to a JSON file (UTF‑8) using the provided <paramref name="options"/>.
1525
+ /// </summary>
1526
+ /// <typeparam name="T">Instance type.</typeparam>
1527
+ /// <param name="input">The instance to serialize.</param>
1528
+ /// <param name="path">Destination file path.</param>
1529
+ /// <param name="options">Serializer options.</param>
1530
+ public static void WriteToJsonFile<T>(T input, string path, JsonSerializerOptions options)
1531
+ {
1532
+ string jsonAsText = JsonStringify(input, options);
1533
+ File.WriteAllText(path, jsonAsText);
1534
+ }
1535
+
1536
+ /// <summary>
1537
+ /// Asynchronously writes an instance to a JSON file (UTF‑8) using the provided <paramref name="options"/>.
1538
+ /// </summary>
1539
+ /// <typeparam name="T">Instance type.</typeparam>
1540
+ /// <param name="input">The instance to serialize.</param>
1541
+ /// <param name="path">Destination file path.</param>
1542
+ /// <param name="options">Serializer options.</param>
1543
+ public static async Task WriteToJsonFileAsync<T>(
1544
+ T input,
1545
+ string path,
1546
+ JsonSerializerOptions options
1547
+ )
1548
+ {
1549
+ string jsonAsText = JsonStringify(input, options);
1550
+ await File.WriteAllTextAsync(path, jsonAsText);
1551
+ }
1552
+ }
1553
+
1554
+ // Internal pooled, growable write stream backed by ArrayPool<byte> to reduce allocations
1555
+ internal sealed class PooledBufferStream : Stream
1556
+ {
1557
+ private const int DefaultInitialCapacity = 256;
1558
+
1559
+ private byte[] _buffer;
1560
+ private int _length;
1561
+ private int _position;
1562
+ private bool _disposed;
1563
+
1564
+ private static readonly Utils.WallstopGenericPool<PooledBufferStream> Pool = new(
1565
+ producer: () => new PooledBufferStream(),
1566
+ onRelease: stream => stream.ResetForReuse(),
1567
+ onDisposal: stream => stream.Dispose()
1568
+ );
1569
+
1570
+ public static Utils.PooledResource<PooledBufferStream> Rent(
1571
+ out PooledBufferStream stream
1572
+ ) => Pool.Get(out stream);
1573
+
1574
+ private PooledBufferStream(int initialCapacity = DefaultInitialCapacity)
1575
+ {
1576
+ if (initialCapacity < 1)
1577
+ {
1578
+ initialCapacity = DefaultInitialCapacity;
1579
+ }
1580
+
1581
+ _buffer = ArrayPool<byte>.Shared.Rent(initialCapacity);
1582
+ _length = 0;
1583
+ _position = 0;
1584
+ }
1585
+
1586
+ internal ArraySegment<byte> GetWrittenSegment()
1587
+ {
1588
+ return new ArraySegment<byte>(_buffer, 0, _length);
1589
+ }
1590
+
1591
+ private void ResetForReuse()
1592
+ {
1593
+ _length = 0;
1594
+ _position = 0;
1595
+ _disposed = false;
1596
+ }
1597
+
1598
+ public override bool CanRead => false;
1599
+ public override bool CanSeek => true;
1600
+ public override bool CanWrite => true;
1601
+ public override long Length => _length;
1602
+
1603
+ public override long Position
1604
+ {
1605
+ get => _position;
1606
+ set => Seek(value, SeekOrigin.Begin);
1607
+ }
1608
+
1609
+ public override void Flush() { }
1610
+
1611
+ public override int Read(byte[] buffer, int offset, int count)
1612
+ {
1613
+ throw new NotSupportedException();
1614
+ }
1615
+
1616
+ public override long Seek(long offset, SeekOrigin origin)
1617
+ {
1618
+ int basePos = origin switch
1619
+ {
1620
+ SeekOrigin.Begin => 0,
1621
+ SeekOrigin.Current => _position,
1622
+ SeekOrigin.End => _length,
1623
+ _ => 0,
1624
+ };
1625
+ long newPos = basePos + offset;
1626
+ if (newPos is < 0 or > int.MaxValue)
1627
+ {
1628
+ throw new ArgumentOutOfRangeException(nameof(offset));
1629
+ }
1630
+ _position = (int)newPos;
1631
+ return _position;
1632
+ }
1633
+
1634
+ public override void SetLength(long value)
1635
+ {
1636
+ if (value is < 0 or > int.MaxValue)
1637
+ {
1638
+ throw new ArgumentOutOfRangeException(nameof(value));
1639
+ }
1640
+ int newLen = (int)value;
1641
+ EnsureCapacity(newLen);
1642
+ _length = newLen;
1643
+ if (_position > _length)
1644
+ {
1645
+ _position = _length;
1646
+ }
1647
+ }
1648
+
1649
+ public override void Write(byte[] buffer, int offset, int count)
1650
+ {
1651
+ int endPos = _position + count;
1652
+ EnsureCapacity(endPos);
1653
+ Array.Copy(buffer, offset, _buffer, _position, count);
1654
+ _position = endPos;
1655
+ if (endPos > _length)
1656
+ {
1657
+ _length = endPos;
1658
+ }
1659
+ }
1660
+
1661
+ public override void WriteByte(byte value)
1662
+ {
1663
+ int endPos = _position + 1;
1664
+ EnsureCapacity(endPos);
1665
+ _buffer[_position] = value;
1666
+ _position = endPos;
1667
+ if (endPos > _length)
1668
+ {
1669
+ _length = endPos;
1670
+ }
1671
+ }
1672
+
1673
+ private void EnsureCapacity(int required)
1674
+ {
1675
+ if (_buffer.Length >= required)
1676
+ {
1677
+ return;
1678
+ }
1679
+
1680
+ int newSize = _buffer.Length;
1681
+ if (newSize < DefaultInitialCapacity)
1682
+ {
1683
+ newSize = DefaultInitialCapacity;
1684
+ }
1685
+
1686
+ while (newSize < required)
1687
+ {
1688
+ newSize = newSize < 1024 ? newSize * 2 : newSize + (newSize >> 1);
1689
+ }
1690
+ byte[] newBuf = ArrayPool<byte>.Shared.Rent(newSize);
1691
+ if (_length > 0)
1692
+ {
1693
+ Array.Copy(_buffer, newBuf, _length);
1694
+ }
1695
+ ArrayPool<byte>.Shared.Return(_buffer);
1696
+ _buffer = newBuf;
1697
+ }
1698
+
1699
+ protected override void Dispose(bool disposing)
1700
+ {
1701
+ if (!_disposed)
1702
+ {
1703
+ if (_buffer != null)
1704
+ {
1705
+ ArrayPool<byte>.Shared.Return(_buffer);
1706
+ _buffer = Array.Empty<byte>();
1707
+ }
1708
+ _length = 0;
1709
+ _position = 0;
1710
+ _disposed = true;
1711
+ }
1712
+ base.Dispose(disposing);
1713
+ }
1714
+
1715
+ public int ToArrayExact(ref byte[] buffer)
1716
+ {
1717
+ if (buffer == null || buffer.Length < _length)
1718
+ {
1719
+ buffer = new byte[_length];
1720
+ }
1721
+
1722
+ if (_length > 0)
1723
+ {
1724
+ Array.Copy(_buffer, buffer, _length);
1725
+ }
1726
+
1727
+ return _length;
1728
+ }
1729
+
1730
+ public override void Write(ReadOnlySpan<byte> buffer)
1731
+ {
1732
+ int count = buffer.Length;
1733
+ int endPos = _position + count;
1734
+ EnsureCapacity(endPos);
1735
+ buffer.CopyTo(new Span<byte>(_buffer, _position, count));
1736
+ _position = endPos;
1737
+ if (endPos > _length)
1738
+ {
1739
+ _length = endPos;
1740
+ }
1741
+ }
1742
+
1743
+ public override ValueTask WriteAsync(
1744
+ ReadOnlyMemory<byte> source,
1745
+ System.Threading.CancellationToken cancellationToken = default
1746
+ )
1747
+ {
1748
+ // Delegate to synchronous span-based path; callers expect a fast in-memory stream
1749
+ Write(source.Span);
1750
+ return new ValueTask();
1751
+ }
1752
+ }
1753
+
1754
+ // Internal pooled ArrayBufferWriter-like implementation to enable zero-copy JSON writing via IBufferWriter<byte>
1755
+ internal sealed class PooledArrayBufferWriter : IBufferWriter<byte>, IDisposable
1756
+ {
1757
+ private const int DefaultInitialCapacity = 256;
1758
+ private byte[] _buffer;
1759
+ private int _written;
1760
+ private bool _disposed;
1761
+
1762
+ private static readonly Utils.WallstopGenericPool<PooledArrayBufferWriter> Pool = new(
1763
+ producer: () => new PooledArrayBufferWriter(),
1764
+ onRelease: w =>
1765
+ {
1766
+ w.Reset();
1767
+ }
1768
+ );
1769
+
1770
+ public static Utils.PooledResource<PooledArrayBufferWriter> Rent(
1771
+ out PooledArrayBufferWriter writer
1772
+ ) => Pool.Get(out writer);
1773
+
1774
+ private PooledArrayBufferWriter(int initialCapacity = DefaultInitialCapacity)
1775
+ {
1776
+ _buffer = ArrayPool<byte>.Shared.Rent(initialCapacity);
1777
+ _written = 0;
1778
+ }
1779
+
1780
+ private void EnsureCapacity(int sizeHint)
1781
+ {
1782
+ if (sizeHint <= 0)
1783
+ {
1784
+ sizeHint = 1;
1785
+ }
1786
+ int required = _written + sizeHint;
1787
+ if (_buffer.Length >= required)
1788
+ {
1789
+ return;
1790
+ }
1791
+
1792
+ int newSize = _buffer.Length;
1793
+ while (newSize < required)
1794
+ {
1795
+ newSize = newSize < 1024 ? newSize * 2 : newSize + (newSize >> 1);
1796
+ }
1797
+
1798
+ byte[] newBuf = ArrayPool<byte>.Shared.Rent(newSize);
1799
+ if (_written > 0)
1800
+ {
1801
+ Buffer.BlockCopy(_buffer, 0, newBuf, 0, _written);
1802
+ }
1803
+ ArrayPool<byte>.Shared.Return(_buffer);
1804
+ _buffer = newBuf;
1805
+ }
1806
+
1807
+ public void Advance(int count)
1808
+ {
1809
+ _written += count;
1810
+ }
1811
+
1812
+ public Memory<byte> GetMemory(int sizeHint = 0)
1813
+ {
1814
+ EnsureCapacity(sizeHint);
1815
+ return _buffer.AsMemory(_written);
1816
+ }
1817
+
1818
+ public Span<byte> GetSpan(int sizeHint = 0)
1819
+ {
1820
+ EnsureCapacity(sizeHint);
1821
+ return _buffer.AsSpan(_written);
1822
+ }
1823
+
1824
+ public int WrittenCount => _written;
1825
+
1826
+ public void Preallocate(int sizeHint)
1827
+ {
1828
+ EnsureCapacity(sizeHint);
1829
+ }
1830
+
1831
+ public int ToArrayExact(ref byte[] buffer)
1832
+ {
1833
+ if (buffer == null || buffer.Length < _written)
1834
+ {
1835
+ buffer = new byte[_written];
1836
+ }
1837
+ if (_written > 0)
1838
+ {
1839
+ Buffer.BlockCopy(_buffer, 0, buffer, 0, _written);
1840
+ }
1841
+ return _written;
1842
+ }
1843
+
1844
+ private void Reset()
1845
+ {
1846
+ // Keep the rented buffer to avoid churn; just reset write cursor.
1847
+ if (_buffer == null || _buffer.Length == 0)
1848
+ {
1849
+ _buffer = ArrayPool<byte>.Shared.Rent(DefaultInitialCapacity);
1850
+ }
1851
+ _written = 0;
1852
+ _disposed = false;
1853
+ }
1854
+
1855
+ public void Dispose()
1856
+ {
1857
+ if (!_disposed)
1858
+ {
1859
+ if (_buffer != null)
1860
+ {
1861
+ ArrayPool<byte>.Shared.Return(_buffer);
1862
+ }
1863
+ _buffer = Array.Empty<byte>();
1864
+ _written = 0;
1865
+ _disposed = true;
1866
+ }
1867
+ }
1868
+ }
1869
+
1870
+ // Internal pooled read-only stream over an existing byte[] to avoid MemoryStream allocation in deserialization paths
1871
+ internal sealed class PooledReadOnlyMemoryStream : Stream
1872
+ {
1873
+ private byte[] _buffer = Array.Empty<byte>();
1874
+ private int _position;
1875
+ private int _length;
1876
+
1877
+ private static readonly Utils.WallstopGenericPool<PooledReadOnlyMemoryStream> Pool = new(
1878
+ producer: () => new PooledReadOnlyMemoryStream(),
1879
+ onRelease: s =>
1880
+ {
1881
+ s.ResetForReuse();
1882
+ }
1883
+ );
1884
+
1885
+ public static Utils.PooledResource<PooledReadOnlyMemoryStream> Rent(
1886
+ out PooledReadOnlyMemoryStream stream
1887
+ ) => Pool.Get(out stream);
1888
+
1889
+ public void SetBuffer(byte[] buffer)
1890
+ {
1891
+ _buffer = buffer ?? Array.Empty<byte>();
1892
+ _position = 0;
1893
+ _length = _buffer.Length;
1894
+ }
1895
+
1896
+ private void ResetForReuse()
1897
+ {
1898
+ SetBuffer(Array.Empty<byte>());
1899
+ }
1900
+
1901
+ public override bool CanRead => true;
1902
+ public override bool CanSeek => true;
1903
+ public override bool CanWrite => false;
1904
+ public override long Length => _length;
1905
+
1906
+ public override long Position
1907
+ {
1908
+ get => _position;
1909
+ set
1910
+ {
1911
+ if (value is < 0 or > int.MaxValue)
1912
+ {
1913
+ throw new ArgumentOutOfRangeException(nameof(value));
1914
+ }
1915
+ _position = (int)value;
1916
+ }
1917
+ }
1918
+
1919
+ public override void Flush() { }
1920
+
1921
+ public override int Read(byte[] buffer, int offset, int count)
1922
+ {
1923
+ if (buffer == null)
1924
+ {
1925
+ throw new ArgumentNullException(nameof(buffer));
1926
+ }
1927
+
1928
+ if ((uint)offset > buffer.Length || (uint)count > buffer.Length - offset)
1929
+ {
1930
+ throw new ArgumentOutOfRangeException();
1931
+ }
1932
+ int remaining = _length - _position;
1933
+ if (remaining <= 0)
1934
+ {
1935
+ return 0;
1936
+ }
1937
+ if (count > remaining)
1938
+ {
1939
+ count = remaining;
1940
+ }
1941
+
1942
+ Array.Copy(_buffer, _position, buffer, offset, count);
1943
+ _position += count;
1944
+ return count;
1945
+ }
1946
+
1947
+ // Span-based fast-path used by modern callers (e.g., protobuf-net)
1948
+ public override int Read(Span<byte> destination)
1949
+ {
1950
+ int remaining = _length - _position;
1951
+ if (remaining <= 0)
1952
+ {
1953
+ return 0;
1954
+ }
1955
+
1956
+ int toCopy = destination.Length;
1957
+ if (toCopy > remaining)
1958
+ {
1959
+ toCopy = remaining;
1960
+ }
1961
+
1962
+ new ReadOnlySpan<byte>(_buffer, _position, toCopy).CopyTo(destination);
1963
+ _position += toCopy;
1964
+ return toCopy;
1965
+ }
1966
+
1967
+ public override ValueTask<int> ReadAsync(
1968
+ Memory<byte> destination,
1969
+ System.Threading.CancellationToken cancellationToken = default
1970
+ )
1971
+ {
1972
+ // Delegate to synchronous span-based path; this stream is purely in-memory
1973
+ int read = Read(destination.Span);
1974
+ return new ValueTask<int>(read);
1975
+ }
1976
+
1977
+ public override int ReadByte()
1978
+ {
1979
+ if (_position >= _length)
1980
+ {
1981
+ return -1;
1982
+ }
1983
+
1984
+ return _buffer[_position++];
1985
+ }
1986
+
1987
+ public override long Seek(long offset, SeekOrigin origin)
1988
+ {
1989
+ int basePos = origin switch
1990
+ {
1991
+ SeekOrigin.Begin => 0,
1992
+ SeekOrigin.Current => _position,
1993
+ SeekOrigin.End => _length,
1994
+ _ => 0,
1995
+ };
1996
+ long newPos = basePos + offset;
1997
+ if (newPos is < 0 or > int.MaxValue)
1998
+ {
1999
+ throw new IOException("Attempted to seek outside the stream bounds.");
2000
+ }
2001
+ _position = (int)newPos;
2002
+ return _position;
2003
+ }
2004
+
2005
+ public override void SetLength(long value)
2006
+ {
2007
+ throw new NotSupportedException();
2008
+ }
2009
+
2010
+ public override void Write(byte[] buffer, int offset, int count)
2011
+ {
2012
+ throw new NotSupportedException();
2013
+ }
2014
+
2015
+ public override void WriteByte(byte value)
2016
+ {
2017
+ throw new NotSupportedException();
2018
+ }
2019
+ }
2020
+ }