com.wallstop-studios.unity-helpers 2.0.0-rc58 → 2.0.0-rc60

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 (298) hide show
  1. package/.config/dotnet-tools.json +9 -9
  2. package/.editorconfig +184 -184
  3. package/.gitattributes +63 -63
  4. package/.github/workflows/npm-publish.yml +75 -66
  5. package/.pre-commit-config.yaml +21 -21
  6. package/Editor/AnimationCopier.cs +181 -181
  7. package/Editor/AnimationCopier.cs.meta +2 -2
  8. package/Editor/AnimationCreator.cs +253 -253
  9. package/Editor/AnimationCreator.cs.meta +11 -11
  10. package/Editor/AnimationEventEditor.cs +887 -887
  11. package/Editor/AnimatorControllerCopier.cs +162 -162
  12. package/Editor/AnimatorControllerCopier.cs.meta +2 -2
  13. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
  14. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  15. package/Editor/CustomEditors.meta +2 -2
  16. package/Editor/FitTextureSizeWizard.cs +147 -147
  17. package/Editor/FitTextureSizeWizard.cs.meta +2 -2
  18. package/Editor/PrefabCheckWizard.cs +170 -170
  19. package/Editor/PrefabCheckWizard.cs.meta +11 -11
  20. package/Editor/SpriteSettingsApplier.cs +272 -272
  21. package/Editor/SpriteSettingsApplier.cs.meta +2 -2
  22. package/Editor/StringInListeDrawer.cs +56 -56
  23. package/Editor/TextureResizerWizard.cs +181 -181
  24. package/Editor/TextureResizerWizard.cs.meta +2 -2
  25. package/Editor/TextureSettingsApplier.cs +178 -178
  26. package/Editor/TextureSettingsApplier.cs.meta +2 -2
  27. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  28. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  29. package/Editor/Utils/EditorUtilities.cs +22 -22
  30. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  31. package/Editor/Utils.meta +8 -8
  32. package/Editor/WShowIfPropertyDrawer.cs +63 -63
  33. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
  34. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  35. package/LICENSE +21 -21
  36. package/LICENSE.md +6 -6
  37. package/LICENSE.meta +7 -7
  38. package/README.md +177 -177
  39. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  40. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
  41. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  42. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  43. package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
  44. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  45. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  46. package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
  47. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  48. package/Runtime/Binaries.meta +8 -8
  49. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
  50. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +213 -209
  51. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  52. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  53. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  54. package/Runtime/Core/Attributes/ParentComponent.cs +185 -185
  55. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
  56. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +117 -117
  57. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  58. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
  59. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  60. package/Runtime/Core/Attributes/WShowIfAttribute.cs +16 -16
  61. package/Runtime/Core/Attributes.meta +8 -8
  62. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
  63. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
  64. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
  65. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
  66. package/Runtime/Core/DataStructure/Circle.cs +50 -50
  67. package/Runtime/Core/DataStructure/CyclicBuffer.cs +193 -153
  68. package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
  69. package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
  70. package/Runtime/Core/DataStructure/KDTree.cs +292 -292
  71. package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
  72. package/Runtime/Core/DataStructure/QuadTree.cs +287 -287
  73. package/Runtime/Core/DataStructure/RTree.cs +346 -346
  74. package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
  75. package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
  76. package/Runtime/Core/DataStructure/TimedCache.cs +66 -66
  77. package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
  78. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +110 -110
  79. package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
  80. package/Runtime/Core/Extension/ColorExtensions.cs +629 -629
  81. package/Runtime/Core/Extension/DictionaryExtensions.cs +279 -279
  82. package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
  83. package/Runtime/Core/Extension/EnumExtensions.cs +37 -37
  84. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  85. package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
  86. package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
  87. package/Runtime/Core/Extension/IListExtensions.cs +146 -106
  88. package/Runtime/Core/Extension/LoggingExtensions.cs +264 -258
  89. package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
  90. package/Runtime/Core/Extension/SerializedPropertyExtensions.cs +157 -157
  91. package/Runtime/Core/Extension/StringExtensions.cs +180 -151
  92. package/Runtime/Core/Extension/UnityExtensions.cs +1608 -1608
  93. package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
  94. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  95. package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
  96. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  97. package/Runtime/Core/Helper/DirectoryHelper.cs +132 -0
  98. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +3 -0
  99. package/Runtime/Core/Helper/Enumerables.cs +17 -17
  100. package/Runtime/Core/Helper/FormattingHelpers.cs +32 -32
  101. package/Runtime/Core/Helper/Geometry.cs +43 -43
  102. package/Runtime/Core/Helper/Helpers.cs +722 -722
  103. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  104. package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
  105. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  106. package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
  107. package/Runtime/Core/Helper/Objects.cs +769 -769
  108. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  109. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  110. package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
  111. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  112. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
  113. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  114. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +189 -189
  115. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  116. package/Runtime/Core/Helper/Partials.meta +2 -2
  117. package/Runtime/Core/Helper/ReflectionHelpers.cs +452 -452
  118. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  119. package/Runtime/Core/Helper/SceneHelper.cs +209 -209
  120. package/Runtime/Core/Helper/SpriteHelpers.cs +41 -41
  121. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  122. package/Runtime/Core/Helper/StringInList.cs +31 -31
  123. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  124. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +82 -82
  125. package/Runtime/Core/Helper/WallMath.cs +166 -166
  126. package/Runtime/Core/Math/Line.cs +55 -55
  127. package/Runtime/Core/Math/Parabola.cs +47 -47
  128. package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
  129. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  130. package/Runtime/Core/Math/Range.cs +92 -92
  131. package/Runtime/Core/Math/XXHash.cs +310 -310
  132. package/Runtime/Core/Math/XXHash.cs.meta +11 -11
  133. package/Runtime/Core/Model/Direction.cs +43 -43
  134. package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
  135. package/Runtime/Core/OneOf/None.cs +4 -4
  136. package/Runtime/Core/Random/AbstractRandom.cs +585 -585
  137. package/Runtime/Core/Random/DotNetRandom.cs +54 -54
  138. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  139. package/Runtime/Core/Random/IRandom.cs +161 -161
  140. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +49 -49
  141. package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
  142. package/Runtime/Core/Random/PRNG.cs +7 -7
  143. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  144. package/Runtime/Core/Random/PcgRandom.cs +149 -149
  145. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  146. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  147. package/Runtime/Core/Random/RandomState.cs +131 -131
  148. package/Runtime/Core/Random/RandomUtilities.cs +26 -26
  149. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  150. package/Runtime/Core/Random/RomuDuo.cs +116 -116
  151. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  152. package/Runtime/Core/Random/SplitMix64.cs +94 -94
  153. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  154. package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
  155. package/Runtime/Core/Random/SystemRandom.cs +162 -162
  156. package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
  157. package/Runtime/Core/Random/UnityRandom.cs +57 -57
  158. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  159. package/Runtime/Core/Random/WyRandom.cs +121 -121
  160. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  161. package/Runtime/Core/Random/XorShiftRandom.cs +52 -52
  162. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  163. package/Runtime/Core/Random/XorShiroRandom.cs +119 -119
  164. package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
  165. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  166. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +37 -37
  167. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +218 -218
  168. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +28 -28
  169. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
  170. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
  171. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  172. package/Runtime/Core/Serialization/Serializer.cs +195 -195
  173. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +113 -113
  174. package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
  175. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  176. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
  177. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
  178. package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
  179. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  180. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
  181. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
  182. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  183. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  184. package/Runtime/UI/LayeredImage.cs +364 -364
  185. package/Runtime/UI/LayeredImage.cs.meta +2 -2
  186. package/Runtime/UI.meta +2 -2
  187. package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
  188. package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
  189. package/Runtime/Utils/Buffers.cs +33 -33
  190. package/Runtime/Utils/CenterPointOffset.cs +30 -30
  191. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  192. package/Runtime/Utils/CircleLineRenderer.cs +134 -134
  193. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  194. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  195. package/Runtime/Utils/DeferredDisposalResult.cs +23 -23
  196. package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
  197. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  198. package/Runtime/Utils/Oscillator.cs +27 -27
  199. package/Runtime/Utils/RuntimeSingleton.cs +71 -69
  200. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  201. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  202. package/Runtime/Utils/SpriteRendererMetadata.cs +374 -374
  203. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  204. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  205. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  206. package/Runtime/Utils/StartTracker.cs +15 -0
  207. package/Runtime/Utils/StartTracker.cs.meta +3 -0
  208. package/Runtime/Utils/TextureScale.cs +179 -179
  209. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  210. package/Runtime/Utils/UnityObjectNameComparer.cs +33 -0
  211. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +3 -0
  212. package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
  213. package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
  214. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  215. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  216. package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
  217. package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs +34 -34
  218. package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs.meta +2 -2
  219. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +40 -40
  220. package/Tests/Runtime/Components.meta +2 -2
  221. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
  222. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
  223. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
  224. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
  225. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
  226. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
  227. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
  228. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
  229. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
  230. package/Tests/Runtime/DataStructures.meta +8 -8
  231. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
  232. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  233. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +128 -128
  234. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  235. package/Tests/Runtime/Extensions/IListExtensionTests.cs +104 -104
  236. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
  237. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  238. package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
  239. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  240. package/Tests/Runtime/Extensions.meta +2 -2
  241. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  242. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  243. package/Tests/Runtime/Helper/FormattingHelperTests.cs +129 -129
  244. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +2 -2
  245. package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
  246. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  247. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +536 -536
  248. package/Tests/Runtime/Helper/SceneHelperTests.cs +94 -94
  249. package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
  250. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  251. package/Tests/Runtime/Helper.meta +2 -2
  252. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
  253. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
  254. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
  255. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
  256. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +180 -157
  257. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  258. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +61 -61
  259. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  260. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
  261. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
  262. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
  263. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
  264. package/Tests/Runtime/Performance.meta +8 -8
  265. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  266. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  267. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  268. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  269. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  270. package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
  271. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  272. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  273. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  274. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  275. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  276. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  277. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  278. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  279. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  280. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  281. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  282. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  283. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  284. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  285. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  286. package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
  287. package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
  288. package/Tests/Runtime/Random.meta +8 -8
  289. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
  290. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  291. package/Tests/Runtime/Serialization.meta +2 -2
  292. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
  293. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  294. package/Tests/Runtime/Utils.meta +2 -2
  295. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
  296. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  297. package/Tests/Runtime.meta +8 -8
  298. package/package.json +38 -38
@@ -1,18 +1,18 @@
1
- {
2
- "name": "WallstopStudios.UnityHelpers.Editor",
3
- "rootNamespace": "",
4
- "references": [
5
- "WallstopStudios.UnityHelpers"
6
- ],
7
- "includePlatforms": [
8
- "Editor"
9
- ],
10
- "excludePlatforms": [],
11
- "allowUnsafeCode": false,
12
- "overrideReferences": false,
13
- "precompiledReferences": [],
14
- "autoReferenced": true,
15
- "defineConstraints": [],
16
- "versionDefines": [],
17
- "noEngineReferences": false
1
+ {
2
+ "name": "WallstopStudios.UnityHelpers.Editor",
3
+ "rootNamespace": "",
4
+ "references": [
5
+ "WallstopStudios.UnityHelpers"
6
+ ],
7
+ "includePlatforms": [
8
+ "Editor"
9
+ ],
10
+ "excludePlatforms": [],
11
+ "allowUnsafeCode": false,
12
+ "overrideReferences": false,
13
+ "precompiledReferences": [],
14
+ "autoReferenced": true,
15
+ "defineConstraints": [],
16
+ "versionDefines": [],
17
+ "noEngineReferences": false
18
18
  }
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: de86e2706cb173041874cadb20669cb0
3
- AssemblyDefinitionImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: de86e2706cb173041874cadb20669cb0
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Eli Pinkerton
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Eli Pinkerton
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/LICENSE.md CHANGED
@@ -1,7 +1,7 @@
1
- Copyright 2023 Eli Pinkerton
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
-
5
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
-
1
+ Copyright 2023 Eli Pinkerton
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
7
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/LICENSE.meta CHANGED
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: a6e47b47847d6be4ba31a4de140b068d
3
- DefaultImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: a6e47b47847d6be4ba31a4de140b068d
3
+ DefaultImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
package/README.md CHANGED
@@ -1,178 +1,178 @@
1
- # A Grab-Bag
2
- Various Unity Helpers. Includes many deterministic, seedable random number generators.
3
-
4
- # CI/CD Status
5
- ![Npm Publish](https://github.com/wallstop/unity-helpers/actions/workflows/npm-publish.yml/badge.svg)
6
-
7
- # Compatibility
8
- | Platform | Compatible |
9
- | --- | --- |
10
- | Unity 2021 | Likely, but untested |
11
- | Unity 2022 | ✓ |
12
- | Unity 2023 | ✓ |
13
- | Unity 6 | ✓ |
14
- | URP | ✓ |
15
- | HDRP | ✓ |
16
-
17
- # Installation
18
-
19
- ## To Install as Unity Package
20
- 1. Open Unity Package Manager
21
- 2. (Optional) Enable Pre-release packages to get the latest, cutting-edge builds
22
- 3. Open the Advanced Package Settings
23
- 4. Add an entry for a new "Scoped Registry"
24
- - Name: `NPM`
25
- - URL: `https://registry.npmjs.org`
26
- - Scope(s): `com.wallstop-studios.unity-helpers`
27
- 5. Resolve the latest `com.wallstop-studios.unity-helpers`
28
-
29
- ## From Source
30
- Grab a copy of this repo (either `git clone` or [download a zip of the source](https://github.com/wallstop/unity-helpers/archive/refs/heads/main.zip)) and copy the contents to your project's `Assets` folder.
31
-
32
- ## From Releases
33
- Check out the latest [Releases](https://github.com/wallstop/unity-helpers/releases) to grab the Unity Package and import to your project.
34
-
35
- # Package Contents
36
- - Random Number Generators
37
- - Spatial Trees
38
- - Protobuf, Binary, and JSON formatting
39
- - A resizable CyclicBuffer
40
- - Simple single-threaded thread pool
41
- - A LayeredImage for use with Unity's UI Toolkit
42
- - Geometry Helpers
43
- - Child/Parent/Sibling Attributes to automatically get components
44
- - ReadOnly attribute to disable editing of serialized properties in the inspector
45
- - An extensive collection of helpers
46
- - Simple math functions including a generic Range
47
- - Common buffers to reduce allocations
48
- - A RuntimeSingleton implementation for automatic creation/accessing of singletons
49
- - String helpers, like converting to PascalCase, like Unity does for variable names in the inspector
50
- - A randomizable PerlinNoise implementation
51
- - And more!
52
-
53
- # Auto Get(Parent/Sibling/Child)Component
54
- Are you tired of constantly writing GetComponent<T>() all over the place? Waste time no more!
55
-
56
- ```csharp
57
- public sealed class MyCoolScript : MonoBehaviour
58
- {
59
- [SiblingComponent] // If it doesn't exist, will log an error
60
- private SpriteRenderer _spriteRenderer;
61
-
62
- [SiblingComponent(optional = true)] // Ok if it doesn't exist, no errors logged
63
- private BoxCollider2D _boxCollider;
64
-
65
- [ParentComponent] // Similar to GetComponentInParent<AIController>(includeInactive: true)
66
- private AIController _parentAIController;
67
-
68
- // Only include components in parents, Unity by default includes sibling components in the GetComponentsInParent call
69
- [ParentComponent(onlyAncestors = true)]
70
- private Transform [] _allParentTransforms; // Works with arrays!
71
-
72
- [ParentComponent(includeInactive = false)] // Don't include inactive components
73
- private List<PolygonCollider2> _parentColliders; // Works with lists!
74
-
75
- [ChildComponent(onlyDescendents = true)] // Similar to GetComponentInChildren<EdgeCollider2D>(includeInactive: true)
76
- private EdgeCollider2D _childEdgeCollider;
77
-
78
- private void Awake()
79
- {
80
- /*
81
- Make sure this is called somewhere, usually in Awake, OnEnable, or Start - wherever this is called,
82
- values will be injected into the annotated fields and errors will be logged
83
- */
84
- this.AssignRelationalComponents();
85
- }
86
- }
87
-
88
- ```
89
-
90
- # Random Number Generators
91
- This package implements several high quality, seedable, and serializable random number generators. The best one (currently) is the PCG Random. This has been hidden behind the `PRNG.Instance` class, which is thread-safe. As the package evolves, the exact implementation of this may change.
92
-
93
- All of these implement a custom [IRandom](./Runtime/Core/Random/IRandom.cs) interface with a significantly richer suite of methods than the standard .Net and Unity randoms offer.
94
-
95
- To use:
96
-
97
- ```csharp
98
- IRandom random = PRNG.Instance;
99
-
100
- random.NextFloat(); // Something between 0.0f and 1.0f
101
- random.NextDouble(); // Something between 0.0d and 1.0d
102
- random.Next(); // Something between 0 and int.MaxValue
103
- random.NextUint(); // Something between 0 and uint.MaxValue
104
-
105
- int [] values = {1, 2, 3};
106
- random.NextOf(values); // 1, 2, or 3
107
- random.NextOf(Enumerable.Range(0, 3)); // 1, 2, or 3
108
- HashSet<int> setValues = new() {1, 2, 3};
109
- random.NextOf(setValues); // 1, 2, or 3
110
-
111
- random.NextGuid(); // A valid UUIDv4
112
- random.NextGaussian(); // A value sampled from a gaussian curve around mean=0, stdDev=1 (configurable via parameters)
113
- random.NextEnum<T>(); // A randomly selected enum of type T
114
-
115
- int width = 100;
116
- int height = 100;
117
- random.NextNoiseMap(width, height); // A configurable noise map generated using random octave offsets
118
- ```
119
-
120
- ## Implemented Random Number Generators
121
- - PCG
122
- - DotNet (uses the currently implemented .Net Random)
123
- - RomoDuo
124
- - SplitMix64
125
- - Squirrel
126
- - System (uses a port of the Windows .Net Random)
127
- - Unity (uses Unity's random under the hood)
128
- - Wy
129
- - XorShift
130
- - XorShiro
131
-
132
- ## Performance (Number of Operations / Second)
133
-
134
- | Random | NextBool | Next | NextUInt | NextFloat | NextDouble | NextUint - Range | NextInt - Range |
135
- | ------ | -------- | ---- | -------- | --------- | ---------- | ---------------- | --------------- |
136
- | PcgRandom | 34,260,478 | 34,303,866 | 35,148,246 | 24,818,438 | 30,034,632 |22,436,474 |20,801,797 |
137
- | SystemRandom | 28,698,806 | 30,040,782 | 20,435,092 | 24,079,399 | 27,284,147 |20,735,769 |19,861,780 |
138
- | SquirrelRandom | 33,285,784 | 33,439,909 | 34,611,893 | 23,885,731 | 28,958,725 |21,520,279 |20,311,372 |
139
- | XorShiftRandom | 34,695,989 | 35,147,320 | 35,997,718 | 25,248,238 | 31,582,991 |22,679,928 |21,255,319 |
140
- | DotNetRandom | 18,097,489 | 18,191,042 | 18,783,063 | 14,061,444 | 15,730,439 |13,284,050 |12,596,913 |
141
- | WyRandom | 28,490,852 | 29,086,052 | 29,724,907 | 20,252,065 | 24,542,201 |18,474,790 |17,404,641 |
142
- | SplitMix64 | 34,301,843 | 34,343,404 | 35,512,284 | 24,289,416 | 30,586,231 |22,470,330 |20,850,965 |
143
- | RomuDuo | 32,969,889 | 33,413,212 | 34,339,227 | 23,755,059 | 29,483,136 |21,671,641 |20,253,479 |
144
- | XorShiroRandom | 31,529,025 | 31,717,709 | 32,536,277 | 22,421,715 | 27,619,417 |20,843,993 |19,270,063 |
145
- | UnityRandom | 24,925,268 | 24,830,594 | 26,429,283 | 17,864,528 | 21,206,384 |16,376,626 |15,528,972 |
146
- | LinearCongruentialGenerator | 35,013,818 | 35,025,182 | 35,843,533 | 25,093,401 | 31,553,487 |22,579,798 |21,211,175 |
147
-
148
- # Spatial Trees
149
- There are three implemented 2D immutable spatial trees that can store generic objects, as long as there is some resolution function that can convert them into Vector2 spatial positions.
150
-
151
- - QuadTree (easiest to use)
152
- - KDTree
153
- - RTree
154
-
155
- Spatial trees, after construction, allow for O(log(n)) spatial query time instead of O(n). They are extremely useful if you need repeated spatial queries, or if you have relatively static spatial data.
156
-
157
- ## Usage
158
-
159
- ```csharp
160
- GameObject [] spatialStorage = { myCoolGameObject };
161
- QuadTree<GameObject> quadTree = new(spatialStorage, go => go.transform.position);
162
-
163
- // Might return your object, might not
164
- GameObject [] inBounds = quadTree.GetElementsInBounds(new Bounds(0, 0, 100, 100));
165
-
166
- // Uses a "good-enough" nearest-neighbor approximately for cheap neighbors
167
- List<GameObject> nearestNeighbors = new();
168
- quadTree.GetApproximateNearestNeighbors(myCoolGameObject.transform.position, 1, nearestNeighbors);
169
- Assert.AreEqual(1, nearestNeighbors.Count);
170
- Assert.AreEqual(myCoolGameObject, nearestNeighbors[0]);
171
- ```
172
-
173
- ## Note
174
- All spatial trees expect the positional data to be *immutable*. It is very important that the positions do not change. If they do, you will need to reconstruct the tree.
175
-
176
- ## Contributing
177
-
1
+ # A Grab-Bag
2
+ Various Unity Helpers. Includes many deterministic, seedable random number generators.
3
+
4
+ # CI/CD Status
5
+ ![Npm Publish](https://github.com/wallstop/unity-helpers/actions/workflows/npm-publish.yml/badge.svg)
6
+
7
+ # Compatibility
8
+ | Platform | Compatible |
9
+ | --- | --- |
10
+ | Unity 2021 | Likely, but untested |
11
+ | Unity 2022 | &check; |
12
+ | Unity 2023 | &check; |
13
+ | Unity 6 | &check; |
14
+ | URP | &check; |
15
+ | HDRP | &check; |
16
+
17
+ # Installation
18
+
19
+ ## To Install as Unity Package
20
+ 1. Open Unity Package Manager
21
+ 2. (Optional) Enable Pre-release packages to get the latest, cutting-edge builds
22
+ 3. Open the Advanced Package Settings
23
+ 4. Add an entry for a new "Scoped Registry"
24
+ - Name: `NPM`
25
+ - URL: `https://registry.npmjs.org`
26
+ - Scope(s): `com.wallstop-studios.unity-helpers`
27
+ 5. Resolve the latest `com.wallstop-studios.unity-helpers`
28
+
29
+ ## From Source
30
+ Grab a copy of this repo (either `git clone` or [download a zip of the source](https://github.com/wallstop/unity-helpers/archive/refs/heads/main.zip)) and copy the contents to your project's `Assets` folder.
31
+
32
+ ## From Releases
33
+ Check out the latest [Releases](https://github.com/wallstop/unity-helpers/releases) to grab the Unity Package and import to your project.
34
+
35
+ # Package Contents
36
+ - Random Number Generators
37
+ - Spatial Trees
38
+ - Protobuf, Binary, and JSON formatting
39
+ - A resizable CyclicBuffer
40
+ - Simple single-threaded thread pool
41
+ - A LayeredImage for use with Unity's UI Toolkit
42
+ - Geometry Helpers
43
+ - Child/Parent/Sibling Attributes to automatically get components
44
+ - ReadOnly attribute to disable editing of serialized properties in the inspector
45
+ - An extensive collection of helpers
46
+ - Simple math functions including a generic Range
47
+ - Common buffers to reduce allocations
48
+ - A RuntimeSingleton implementation for automatic creation/accessing of singletons
49
+ - String helpers, like converting to PascalCase, like Unity does for variable names in the inspector
50
+ - A randomizable PerlinNoise implementation
51
+ - And more!
52
+
53
+ # Auto Get(Parent/Sibling/Child)Component
54
+ Are you tired of constantly writing GetComponent<T>() all over the place? Waste time no more!
55
+
56
+ ```csharp
57
+ public sealed class MyCoolScript : MonoBehaviour
58
+ {
59
+ [SiblingComponent] // If it doesn't exist, will log an error
60
+ private SpriteRenderer _spriteRenderer;
61
+
62
+ [SiblingComponent(optional = true)] // Ok if it doesn't exist, no errors logged
63
+ private BoxCollider2D _boxCollider;
64
+
65
+ [ParentComponent] // Similar to GetComponentInParent<AIController>(includeInactive: true)
66
+ private AIController _parentAIController;
67
+
68
+ // Only include components in parents, Unity by default includes sibling components in the GetComponentsInParent call
69
+ [ParentComponent(onlyAncestors = true)]
70
+ private Transform [] _allParentTransforms; // Works with arrays!
71
+
72
+ [ParentComponent(includeInactive = false)] // Don't include inactive components
73
+ private List<PolygonCollider2> _parentColliders; // Works with lists!
74
+
75
+ [ChildComponent(onlyDescendents = true)] // Similar to GetComponentInChildren<EdgeCollider2D>(includeInactive: true)
76
+ private EdgeCollider2D _childEdgeCollider;
77
+
78
+ private void Awake()
79
+ {
80
+ /*
81
+ Make sure this is called somewhere, usually in Awake, OnEnable, or Start - wherever this is called,
82
+ values will be injected into the annotated fields and errors will be logged
83
+ */
84
+ this.AssignRelationalComponents();
85
+ }
86
+ }
87
+
88
+ ```
89
+
90
+ # Random Number Generators
91
+ This package implements several high quality, seedable, and serializable random number generators. The best one (currently) is the PCG Random. This has been hidden behind the `PRNG.Instance` class, which is thread-safe. As the package evolves, the exact implementation of this may change.
92
+
93
+ All of these implement a custom [IRandom](./Runtime/Core/Random/IRandom.cs) interface with a significantly richer suite of methods than the standard .Net and Unity randoms offer.
94
+
95
+ To use:
96
+
97
+ ```csharp
98
+ IRandom random = PRNG.Instance;
99
+
100
+ random.NextFloat(); // Something between 0.0f and 1.0f
101
+ random.NextDouble(); // Something between 0.0d and 1.0d
102
+ random.Next(); // Something between 0 and int.MaxValue
103
+ random.NextUint(); // Something between 0 and uint.MaxValue
104
+
105
+ int [] values = {1, 2, 3};
106
+ random.NextOf(values); // 1, 2, or 3
107
+ random.NextOf(Enumerable.Range(0, 3)); // 1, 2, or 3
108
+ HashSet<int> setValues = new() {1, 2, 3};
109
+ random.NextOf(setValues); // 1, 2, or 3
110
+
111
+ random.NextGuid(); // A valid UUIDv4
112
+ random.NextGaussian(); // A value sampled from a gaussian curve around mean=0, stdDev=1 (configurable via parameters)
113
+ random.NextEnum<T>(); // A randomly selected enum of type T
114
+
115
+ int width = 100;
116
+ int height = 100;
117
+ random.NextNoiseMap(width, height); // A configurable noise map generated using random octave offsets
118
+ ```
119
+
120
+ ## Implemented Random Number Generators
121
+ - PCG
122
+ - DotNet (uses the currently implemented .Net Random)
123
+ - RomoDuo
124
+ - SplitMix64
125
+ - Squirrel
126
+ - System (uses a port of the Windows .Net Random)
127
+ - Unity (uses Unity's random under the hood)
128
+ - Wy
129
+ - XorShift
130
+ - XorShiro
131
+
132
+ ## Performance (Number of Operations / Second)
133
+
134
+ | Random | NextBool | Next | NextUInt | NextFloat | NextDouble | NextUint - Range | NextInt - Range |
135
+ | ------ | -------- | ---- | -------- | --------- | ---------- | ---------------- | --------------- |
136
+ | PcgRandom | 168,140,000 | 168,290,000 | 230,950,000 | 92,140,000 | 92,400,000 |42,940,000 |38,430,000 |
137
+ | SystemRandom | 78,180,000 | 89,840,000 | 37,690,000 | 72,460,000 | 72,880,000 |37,930,000 |33,940,000 |
138
+ | SquirrelRandom | 128,120,000 | 128,190,000 | 163,060,000 | 78,140,000 | 78,720,000 |38,040,000 |36,310,000 |
139
+ | XorShiftRandom | 179,350,000 | 179,350,000 | 256,370,000 | 95,560,000 | 95,590,000 |43,750,000 |39,640,000 |
140
+ | DotNetRandom | 31,610,000 | 31,610,000 | 33,380,000 | 26,710,000 | 27,130,000 |20,120,000 |18,880,000 |
141
+ | WyRandom | 77,910,000 | 77,880,000 | 88,780,000 | 55,640,000 | 55,270,000 |31,810,000 |28,920,000 |
142
+ | SplitMix64 | 161,420,000 | 161,330,000 | 221,880,000 | 89,030,000 | 89,910,000 |42,160,000 |38,760,000 |
143
+ | RomuDuo | 132,840,000 | 133,150,000 | 171,810,000 | 80,290,000 | 79,120,000 |39,790,000 |36,620,000 |
144
+ | XorShiroRandom | 102,500,000 | 102,470,000 | 123,840,000 | 67,970,000 | 67,130,000 |35,850,000 |32,930,000 |
145
+ | UnityRandom | 52,440,000 | 52,440,000 | 57,630,000 | 41,670,000 | 39,940,000 |25,890,000 |25,140,000 |
146
+ | LinearCongruentialGenerator | 177,530,000 | 177,560,000 | 253,480,000 | 94,440,000 | 93,090,000 |42,920,000 |38,960,000 |
147
+
148
+ # Spatial Trees
149
+ There are three implemented 2D immutable spatial trees that can store generic objects, as long as there is some resolution function that can convert them into Vector2 spatial positions.
150
+
151
+ - QuadTree (easiest to use)
152
+ - KDTree
153
+ - RTree
154
+
155
+ Spatial trees, after construction, allow for O(log(n)) spatial query time instead of O(n). They are extremely useful if you need repeated spatial queries, or if you have relatively static spatial data.
156
+
157
+ ## Usage
158
+
159
+ ```csharp
160
+ GameObject [] spatialStorage = { myCoolGameObject };
161
+ QuadTree<GameObject> quadTree = new(spatialStorage, go => go.transform.position);
162
+
163
+ // Might return your object, might not
164
+ GameObject [] inBounds = quadTree.GetElementsInBounds(new Bounds(0, 0, 100, 100));
165
+
166
+ // Uses a "good-enough" nearest-neighbor approximately for cheap neighbors
167
+ List<GameObject> nearestNeighbors = new();
168
+ quadTree.GetApproximateNearestNeighbors(myCoolGameObject.transform.position, 1, nearestNeighbors);
169
+ Assert.AreEqual(1, nearestNeighbors.Count);
170
+ Assert.AreEqual(myCoolGameObject, nearestNeighbors[0]);
171
+ ```
172
+
173
+ ## Note
174
+ All spatial trees expect the positional data to be *immutable*. It is very important that the positions do not change. If they do, you will need to reconstruct the tree.
175
+
176
+ ## Contributing
177
+
178
178
  This project uses [CSharpier](https://csharpier.com/) with the default configuration to enable an enforced, consistent style. If you would like to contribute, recommendation is to ensure that changed files are ran through CSharpier prior to merge. This can be done automatically through editor plugins, or, minimally, by installing a [pre-commit hook](https://pre-commit.com/#3-install-the-git-hook-scripts).
@@ -1,33 +1,33 @@
1
- fileFormatVersion: 2
2
- guid: 0cdc22fbd8c5bc24bb39fdf9bc6ecfbe
3
- PluginImporter:
4
- externalObjects: {}
5
- serializedVersion: 2
6
- iconMap: {}
7
- executionOrder: {}
8
- defineConstraints: []
9
- isPreloaded: 0
10
- isOverridable: 1
11
- isExplicitlyReferenced: 0
12
- validateReferences: 1
13
- platformData:
14
- - first:
15
- Any:
16
- second:
17
- enabled: 1
18
- settings: {}
19
- - first:
20
- Editor: Editor
21
- second:
22
- enabled: 0
23
- settings:
24
- DefaultValueInitialized: true
25
- - first:
26
- Windows Store Apps: WindowsStoreApps
27
- second:
28
- enabled: 0
29
- settings:
30
- CPU: AnyCPU
31
- userData:
32
- assetBundleName:
33
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 0cdc22fbd8c5bc24bb39fdf9bc6ecfbe
3
+ PluginImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ iconMap: {}
7
+ executionOrder: {}
8
+ defineConstraints: []
9
+ isPreloaded: 0
10
+ isOverridable: 1
11
+ isExplicitlyReferenced: 0
12
+ validateReferences: 1
13
+ platformData:
14
+ - first:
15
+ Any:
16
+ second:
17
+ enabled: 1
18
+ settings: {}
19
+ - first:
20
+ Editor: Editor
21
+ second:
22
+ enabled: 0
23
+ settings:
24
+ DefaultValueInitialized: true
25
+ - first:
26
+ Windows Store Apps: WindowsStoreApps
27
+ second:
28
+ enabled: 0
29
+ settings:
30
+ CPU: AnyCPU
31
+ userData:
32
+ assetBundleName:
33
+ assetBundleVariant: