com.wallstop-studios.unity-helpers 2.0.0-rc27 → 2.0.0-rc30

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 (266) hide show
  1. package/.gitattributes +63 -63
  2. package/.github/workflows/npm-publish.yml +60 -0
  3. package/.github/workflows/unity-package.yml +87 -0
  4. package/Editor/AnimationCopier.cs +158 -158
  5. package/Editor/AnimationCopier.cs.meta +2 -2
  6. package/Editor/AnimationCreator.cs +262 -262
  7. package/Editor/AnimationCreator.cs.meta +11 -11
  8. package/Editor/AnimationEventEditor.cs +887 -887
  9. package/Editor/AnimatorControllerCopier.cs +162 -162
  10. package/Editor/AnimatorControllerCopier.cs.meta +2 -2
  11. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
  12. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  13. package/Editor/CustomEditors.meta +2 -2
  14. package/Editor/EnsureTextureSizeWizard.cs +110 -110
  15. package/Editor/EnsureTextureSizeWizard.cs.meta +2 -2
  16. package/Editor/PrefabCheckWizard.cs +165 -165
  17. package/Editor/PrefabCheckWizard.cs.meta +11 -11
  18. package/Editor/SpriteSettingsApplier.cs +168 -168
  19. package/Editor/SpriteSettingsApplier.cs.meta +2 -2
  20. package/Editor/StringInListeDrawer.cs +56 -56
  21. package/Editor/TextureResizerWizard.cs +181 -181
  22. package/Editor/TextureResizerWizard.cs.meta +2 -2
  23. package/Editor/TextureSettingsApplier.cs +171 -171
  24. package/Editor/TextureSettingsApplier.cs.meta +2 -2
  25. package/Editor/Utils/EditorUtilities.cs +22 -22
  26. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  27. package/Editor/Utils/ReadOnlyPropertyDrawer.cs +26 -26
  28. package/Editor/Utils/ReadOnlyPropertyDrawer.cs.meta +11 -11
  29. package/Editor/Utils.meta +8 -8
  30. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
  31. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  32. package/LICENSE +21 -21
  33. package/LICENSE.md +6 -6
  34. package/LICENSE.meta +7 -7
  35. package/README.md +117 -117
  36. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  37. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
  38. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  39. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  40. package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
  41. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  42. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  43. package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
  44. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  45. package/Runtime/Binaries.meta +8 -8
  46. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
  47. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +189 -189
  48. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  49. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  50. package/Runtime/Core/Attributes/ParentComponent.cs +184 -184
  51. package/Runtime/Core/Attributes/ReadOnlyAttribute.cs +6 -6
  52. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
  53. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +119 -119
  54. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  55. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
  56. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  57. package/Runtime/Core/Attributes.meta +8 -8
  58. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
  59. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
  60. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
  61. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
  62. package/Runtime/Core/DataStructure/Circle.cs +50 -50
  63. package/Runtime/Core/DataStructure/CyclicBuffer.cs +155 -155
  64. package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
  65. package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
  66. package/Runtime/Core/DataStructure/KDTree.cs +290 -290
  67. package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
  68. package/Runtime/Core/DataStructure/QuadTree.cs +279 -279
  69. package/Runtime/Core/DataStructure/RTree.cs +336 -336
  70. package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
  71. package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
  72. package/Runtime/Core/DataStructure/TimedCache.cs +51 -51
  73. package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
  74. package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
  75. package/Runtime/Core/Extension/ColorExtensions.cs +338 -338
  76. package/Runtime/Core/Extension/DictionaryExtensions.cs +251 -251
  77. package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
  78. package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
  79. package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
  80. package/Runtime/Core/Extension/IListExtensions.cs +89 -89
  81. package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
  82. package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
  83. package/Runtime/Core/Extension/StringExtensions.cs +151 -151
  84. package/Runtime/Core/Extension/UnityExtensions.cs +1607 -1607
  85. package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
  86. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  87. package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
  88. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  89. package/Runtime/Core/Helper/Enumerables.cs +17 -17
  90. package/Runtime/Core/Helper/Geometry.cs +43 -43
  91. package/Runtime/Core/Helper/Helpers.cs +722 -722
  92. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  93. package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
  94. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  95. package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
  96. package/Runtime/Core/Helper/Objects.cs +767 -767
  97. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  98. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  99. package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
  100. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  101. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
  102. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  103. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -167
  104. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  105. package/Runtime/Core/Helper/Partials.meta +2 -2
  106. package/Runtime/Core/Helper/ReflectionHelpers.cs +152 -152
  107. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  108. package/Runtime/Core/Helper/SpriteHelpers.cs +86 -86
  109. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  110. package/Runtime/Core/Helper/StringInList.cs +31 -31
  111. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  112. package/Runtime/Core/Helper/WallMath.cs +166 -166
  113. package/Runtime/Core/Math/Line.cs +55 -55
  114. package/Runtime/Core/Math/Parabola.cs +47 -47
  115. package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
  116. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  117. package/Runtime/Core/Math/Range.cs +92 -92
  118. package/Runtime/Core/Math/XXHash.cs +310 -310
  119. package/Runtime/Core/Math/XXHash.cs.meta +11 -11
  120. package/Runtime/Core/Model/Direction.cs +43 -43
  121. package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
  122. package/Runtime/Core/OneOf/None.cs +4 -4
  123. package/Runtime/Core/Random/AbstractRandom.cs +561 -561
  124. package/Runtime/Core/Random/DotNetRandom.cs +52 -52
  125. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  126. package/Runtime/Core/Random/IRandom.cs +160 -160
  127. package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
  128. package/Runtime/Core/Random/PRNG.cs +7 -7
  129. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  130. package/Runtime/Core/Random/PcgRandom.cs +149 -149
  131. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  132. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  133. package/Runtime/Core/Random/RandomState.cs +131 -131
  134. package/Runtime/Core/Random/RandomUtilities.cs +26 -26
  135. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  136. package/Runtime/Core/Random/RomuDuo.cs +116 -116
  137. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  138. package/Runtime/Core/Random/SplitMix64.cs +94 -94
  139. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  140. package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
  141. package/Runtime/Core/Random/SystemRandom.cs +162 -162
  142. package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
  143. package/Runtime/Core/Random/UnityRandom.cs +57 -57
  144. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  145. package/Runtime/Core/Random/WyRandom.cs +121 -121
  146. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  147. package/Runtime/Core/Random/XorShiftRandom.cs +47 -47
  148. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  149. package/Runtime/Core/Random/XorShiroRandom.cs +117 -117
  150. package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
  151. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
  152. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
  153. package/Runtime/Core/Serialization/Serializer.cs +184 -184
  154. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +107 -107
  155. package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
  156. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  157. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
  158. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
  159. package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
  160. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  161. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
  162. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
  163. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  164. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  165. package/Runtime/UI/LayeredImage.cs +364 -364
  166. package/Runtime/UI/LayeredImage.cs.meta +2 -2
  167. package/Runtime/UI.meta +2 -2
  168. package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
  169. package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
  170. package/Runtime/Utils/Buffers.cs +32 -32
  171. package/Runtime/Utils/CenterPointOffset.cs +30 -30
  172. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  173. package/Runtime/Utils/CircleLineRenderer.cs +134 -134
  174. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  175. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  176. package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
  177. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  178. package/Runtime/Utils/Oscillator.cs +27 -27
  179. package/Runtime/Utils/RuntimeSingleton.cs +57 -57
  180. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  181. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  182. package/Runtime/Utils/SpriteRendererMetadata.cs +312 -312
  183. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  184. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  185. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  186. package/Runtime/Utils/TextureScale.cs +179 -179
  187. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  188. package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
  189. package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
  190. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  191. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  192. package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
  193. package/Tests/Runtime/Components/RelationalComponentTester.cs +34 -34
  194. package/Tests/Runtime/Components/RelationalComponentTester.cs.meta +2 -2
  195. package/Tests/Runtime/Components.meta +2 -2
  196. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
  197. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
  198. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
  199. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
  200. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
  201. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
  202. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
  203. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
  204. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
  205. package/Tests/Runtime/DataStructures.meta +8 -8
  206. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
  207. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  208. package/Tests/Runtime/Extensions/IListExtensionTests.cs +76 -76
  209. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
  210. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  211. package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
  212. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  213. package/Tests/Runtime/Extensions.meta +2 -2
  214. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  215. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  216. package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
  217. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  218. package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
  219. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  220. package/Tests/Runtime/Helper.meta +2 -2
  221. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
  222. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
  223. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
  224. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
  225. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +139 -139
  226. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  227. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +37 -37
  228. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  229. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
  230. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
  231. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
  232. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
  233. package/Tests/Runtime/Performance.meta +8 -8
  234. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  235. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  236. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  237. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  238. package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
  239. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  240. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  241. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  242. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  243. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  244. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  245. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  246. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  247. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  248. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  249. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  250. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  251. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  252. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  253. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  254. package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
  255. package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
  256. package/Tests/Runtime/Random.meta +8 -8
  257. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +84 -84
  258. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  259. package/Tests/Runtime/Serialization.meta +2 -2
  260. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
  261. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  262. package/Tests/Runtime/Utils.meta +2 -2
  263. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
  264. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  265. package/Tests/Runtime.meta +8 -8
  266. package/package.json +38 -38
@@ -1,388 +1,388 @@
1
- namespace UnityHelpers.Core.Helper
2
- {
3
- using System;
4
- using Extension;
5
- using UnityEngine;
6
- using UnityEngine.SceneManagement;
7
- using Object = UnityEngine.Object;
8
- #if UNITY_EDITOR
9
- using UnityEditor;
10
- using UnityEditor.SceneManagement;
11
- #endif
12
-
13
- public static partial class Helpers
14
- {
15
- public static T Find<T>(this Object component, string tag, bool log = true)
16
- where T : Object
17
- {
18
- if (ObjectsByTag.TryGetValue(tag, out Object value))
19
- {
20
- if (value != null && value is T typed)
21
- {
22
- return typed;
23
- }
24
-
25
- _ = ObjectsByTag.Remove(tag);
26
- }
27
-
28
- GameObject gameObject = GameObject.FindGameObjectWithTag(tag);
29
- if (gameObject == null)
30
- {
31
- if (log)
32
- {
33
- component.LogWarn("Could not find {0}.", tag);
34
- }
35
-
36
- return default;
37
- }
38
-
39
- if (gameObject.TryGetComponent(out T instance))
40
- {
41
- ObjectsByTag[tag] = instance;
42
- return instance;
43
- }
44
-
45
- if (log)
46
- {
47
- component.LogWarn(
48
- "Failed to find {0} on {1} (name: {2}), id [{3}].",
49
- typeof(T).Name,
50
- tag,
51
- gameObject.name,
52
- gameObject.GetInstanceID()
53
- );
54
- }
55
-
56
- return default;
57
- }
58
-
59
- public static T Find<T>(string tag, bool log = true)
60
- where T : MonoBehaviour
61
- {
62
- if (ObjectsByTag.TryGetValue(tag, out Object value))
63
- {
64
- if (value != null && value is T typed)
65
- {
66
- return typed;
67
- }
68
-
69
- _ = ObjectsByTag.Remove(tag);
70
- }
71
-
72
- GameObject gameObject = GameObject.FindGameObjectWithTag(tag);
73
- if (gameObject == null)
74
- {
75
- if (log)
76
- {
77
- LogObject.Log($"Could not find {tag}.");
78
- }
79
-
80
- return default;
81
- }
82
-
83
- if (gameObject.TryGetComponent(out T instance))
84
- {
85
- ObjectsByTag[tag] = instance;
86
- return instance;
87
- }
88
-
89
- if (log)
90
- {
91
- LogObject.Log($"Failed to find {typeof(T).Name} on {tag}");
92
- }
93
-
94
- return default;
95
- }
96
-
97
- public static void SetInstance<T>(string tag, T instance)
98
- where T : MonoBehaviour
99
- {
100
- ObjectsByTag[tag] = instance;
101
- }
102
-
103
- public static void ClearInstance<T>(string tag, T instance)
104
- where T : MonoBehaviour
105
- {
106
- if (ObjectsByTag.TryGetValue(tag, out Object existing) && existing == instance)
107
- {
108
- _ = ObjectsByTag.Remove(tag);
109
- }
110
- }
111
-
112
- public static bool HasComponent<T>(this Object unityObject)
113
- where T : Object
114
- {
115
- return unityObject switch
116
- {
117
- GameObject go => go.HasComponent<T>(),
118
- Component component => component.HasComponent<T>(),
119
- _ => false,
120
- };
121
- }
122
-
123
- public static bool HasComponent<T>(this Component component)
124
- where T : Object
125
- {
126
- return component.TryGetComponent<T>(out _);
127
- }
128
-
129
- public static bool HasComponent<T>(this GameObject gameObject)
130
- where T : Object
131
- {
132
- return gameObject.TryGetComponent<T>(out _);
133
- }
134
-
135
- public static bool HasComponent(this Object unityObject, Type type)
136
- {
137
- return unityObject switch
138
- {
139
- GameObject go => go.TryGetComponent(type, out _),
140
- Component component => component.TryGetComponent(type, out _),
141
- _ => false,
142
- };
143
- }
144
-
145
- public static void EnableRecursively<T>(
146
- this Component component,
147
- bool enabled,
148
- Func<T, bool> exclude = null
149
- )
150
- where T : Behaviour
151
- {
152
- if (component == null)
153
- {
154
- return;
155
- }
156
-
157
- foreach (T behaviour in component.GetComponents<T>())
158
- {
159
- if (behaviour != null && !(exclude?.Invoke(behaviour) ?? false))
160
- {
161
- behaviour.enabled = enabled;
162
- }
163
- }
164
-
165
- Transform transform = (component as Transform) ?? component.transform;
166
- if (transform == null)
167
- {
168
- return;
169
- }
170
-
171
- for (int i = 0; i < transform.childCount; ++i)
172
- {
173
- Transform child = transform.GetChild(i);
174
- EnableRecursively<T>(child, enabled, exclude);
175
- }
176
- }
177
-
178
- public static void EnableRendererRecursively<T>(
179
- this Component component,
180
- bool enabled,
181
- Func<T, bool> exclude = null
182
- )
183
- where T : Renderer
184
- {
185
- if (component == null)
186
- {
187
- return;
188
- }
189
-
190
- T behavior = component as T ?? component.GetComponent<T>();
191
- if (behavior != null && !(exclude?.Invoke(behavior) ?? false))
192
- {
193
- behavior.enabled = enabled;
194
- }
195
-
196
- Transform transform = (component as Transform) ?? component.transform;
197
- if (transform == null)
198
- {
199
- return;
200
- }
201
-
202
- for (int i = 0; i < transform.childCount; ++i)
203
- {
204
- Transform child = transform.GetChild(i);
205
- EnableRendererRecursively<T>(child, enabled, exclude);
206
- }
207
- }
208
-
209
- public static void DestroyAllChildrenGameObjects(this GameObject gameObject)
210
- {
211
- if (Application.isEditor)
212
- {
213
- EditorDestroyAllChildrenGameObjects(gameObject);
214
- }
215
- else
216
- {
217
- PlayDestroyAllChildrenGameObjects(gameObject);
218
- }
219
- }
220
-
221
- public static void DestroyAllComponentsOfType<T>(this GameObject gameObject)
222
- where T : Component
223
- {
224
- foreach (T component in gameObject.GetComponents<T>())
225
- {
226
- SmartDestroy(component);
227
- }
228
- }
229
-
230
- public static void SmartDestroy(this Object obj, float? afterTime = null)
231
- {
232
- if (Application.isEditor && !Application.isPlaying)
233
- {
234
- Object.DestroyImmediate(obj);
235
- }
236
- else
237
- {
238
- if (afterTime.HasValue)
239
- {
240
- Object.Destroy(obj, afterTime.Value);
241
- }
242
- else
243
- {
244
- Object.Destroy(obj);
245
- }
246
- }
247
- }
248
-
249
- public static void DestroyAllChildrenGameObjectsImmediatelyConditionally(
250
- this GameObject gameObject,
251
- Func<GameObject, bool> acceptancePredicate
252
- )
253
- {
254
- InternalDestroyAllChildrenGameObjects(
255
- gameObject,
256
- toDestroy =>
257
- {
258
- if (!acceptancePredicate(toDestroy))
259
- {
260
- return;
261
- }
262
-
263
- Object.DestroyImmediate(toDestroy);
264
- }
265
- );
266
- }
267
-
268
- public static void DestroyAllChildGameObjectsConditionally(
269
- this GameObject gameObject,
270
- Func<GameObject, bool> acceptancePredicate
271
- )
272
- {
273
- InternalDestroyAllChildrenGameObjects(
274
- gameObject,
275
- toDestroy =>
276
- {
277
- if (!acceptancePredicate(toDestroy))
278
- {
279
- return;
280
- }
281
-
282
- toDestroy.Destroy();
283
- }
284
- );
285
- }
286
-
287
- public static void DestroyAllChildrenGameObjectsImmediately(this GameObject gameObject) =>
288
- InternalDestroyAllChildrenGameObjects(gameObject, Object.DestroyImmediate);
289
-
290
- public static void PlayDestroyAllChildrenGameObjects(this GameObject gameObject) =>
291
- InternalDestroyAllChildrenGameObjects(gameObject, go => go.Destroy());
292
-
293
- public static void EditorDestroyAllChildrenGameObjects(this GameObject gameObject) =>
294
- InternalDestroyAllChildrenGameObjects(gameObject, go => go.Destroy());
295
-
296
- private static void InternalDestroyAllChildrenGameObjects(
297
- this GameObject gameObject,
298
- Action<GameObject> destroyFunction
299
- )
300
- {
301
- for (int i = gameObject.transform.childCount - 1; 0 <= i; --i)
302
- {
303
- destroyFunction(gameObject.transform.GetChild(i).gameObject);
304
- }
305
- }
306
-
307
- public static bool IsPrefab(this GameObject gameObject)
308
- {
309
- Scene scene = gameObject.scene;
310
- #if UNITY_EDITOR
311
- if (scene.rootCount == 1 && string.Equals(scene.name, gameObject.name))
312
- {
313
- return true;
314
- }
315
-
316
- return PrefabUtility.GetPrefabAssetType(gameObject) switch
317
- {
318
- PrefabAssetType.NotAPrefab => false,
319
- PrefabAssetType.MissingAsset => scene.rootCount == 0,
320
- _ => true,
321
- };
322
- #else
323
- return scene.rootCount == 0;
324
- #endif
325
- }
326
-
327
- public static bool IsPrefab(this Component component)
328
- {
329
- return IsPrefab(component.gameObject);
330
- }
331
-
332
- public static T GetOrAddComponent<T>(this GameObject unityObject)
333
- where T : Component
334
- {
335
- if (!unityObject.TryGetComponent(out T instance))
336
- {
337
- instance = unityObject.AddComponent<T>();
338
- }
339
-
340
- return instance;
341
- }
342
-
343
- public static Component GetOrAddComponent(this GameObject unityObject, Type componentType)
344
- {
345
- if (!unityObject.TryGetComponent(componentType, out Component instance))
346
- {
347
- instance = unityObject.AddComponent(componentType);
348
- }
349
-
350
- return instance;
351
- }
352
-
353
- public static void ModifyAndSavePrefab(GameObject prefab, Action<GameObject> modifyAction)
354
- {
355
- if (prefab == null)
356
- {
357
- return;
358
- }
359
-
360
- #if UNITY_EDITOR
361
- if (PrefabUtility.IsPartOfPrefabAsset(prefab))
362
- {
363
- string assetPath = AssetDatabase.GetAssetPath(prefab);
364
- GameObject content = PrefabUtility.LoadPrefabContents(assetPath);
365
-
366
- if (content == null)
367
- {
368
- Debug.LogError($"Unable to load {prefab} as a prefab");
369
- return;
370
- }
371
-
372
- modifyAction(content);
373
- _ = PrefabUtility.SaveAsPrefabAsset(content, assetPath);
374
- PrefabUtility.UnloadPrefabContents(content);
375
- }
376
- else
377
- {
378
- modifyAction(prefab);
379
- PrefabStage stage = PrefabStageUtility.GetPrefabStage(prefab);
380
- if (stage)
381
- {
382
- _ = EditorSceneManager.MarkSceneDirty(stage.scene);
383
- }
384
- }
385
- #endif
386
- }
387
- }
388
- }
1
+ namespace UnityHelpers.Core.Helper
2
+ {
3
+ using System;
4
+ using Extension;
5
+ using UnityEngine;
6
+ using UnityEngine.SceneManagement;
7
+ using Object = UnityEngine.Object;
8
+ #if UNITY_EDITOR
9
+ using UnityEditor;
10
+ using UnityEditor.SceneManagement;
11
+ #endif
12
+
13
+ public static partial class Helpers
14
+ {
15
+ public static T Find<T>(this Object component, string tag, bool log = true)
16
+ where T : Object
17
+ {
18
+ if (ObjectsByTag.TryGetValue(tag, out Object value))
19
+ {
20
+ if (value != null && value is T typed)
21
+ {
22
+ return typed;
23
+ }
24
+
25
+ _ = ObjectsByTag.Remove(tag);
26
+ }
27
+
28
+ GameObject gameObject = GameObject.FindGameObjectWithTag(tag);
29
+ if (gameObject == null)
30
+ {
31
+ if (log)
32
+ {
33
+ component.LogWarn("Could not find {0}.", tag);
34
+ }
35
+
36
+ return default;
37
+ }
38
+
39
+ if (gameObject.TryGetComponent(out T instance))
40
+ {
41
+ ObjectsByTag[tag] = instance;
42
+ return instance;
43
+ }
44
+
45
+ if (log)
46
+ {
47
+ component.LogWarn(
48
+ "Failed to find {0} on {1} (name: {2}), id [{3}].",
49
+ typeof(T).Name,
50
+ tag,
51
+ gameObject.name,
52
+ gameObject.GetInstanceID()
53
+ );
54
+ }
55
+
56
+ return default;
57
+ }
58
+
59
+ public static T Find<T>(string tag, bool log = true)
60
+ where T : MonoBehaviour
61
+ {
62
+ if (ObjectsByTag.TryGetValue(tag, out Object value))
63
+ {
64
+ if (value != null && value is T typed)
65
+ {
66
+ return typed;
67
+ }
68
+
69
+ _ = ObjectsByTag.Remove(tag);
70
+ }
71
+
72
+ GameObject gameObject = GameObject.FindGameObjectWithTag(tag);
73
+ if (gameObject == null)
74
+ {
75
+ if (log)
76
+ {
77
+ LogObject.Log($"Could not find {tag}.");
78
+ }
79
+
80
+ return default;
81
+ }
82
+
83
+ if (gameObject.TryGetComponent(out T instance))
84
+ {
85
+ ObjectsByTag[tag] = instance;
86
+ return instance;
87
+ }
88
+
89
+ if (log)
90
+ {
91
+ LogObject.Log($"Failed to find {typeof(T).Name} on {tag}");
92
+ }
93
+
94
+ return default;
95
+ }
96
+
97
+ public static void SetInstance<T>(string tag, T instance)
98
+ where T : MonoBehaviour
99
+ {
100
+ ObjectsByTag[tag] = instance;
101
+ }
102
+
103
+ public static void ClearInstance<T>(string tag, T instance)
104
+ where T : MonoBehaviour
105
+ {
106
+ if (ObjectsByTag.TryGetValue(tag, out Object existing) && existing == instance)
107
+ {
108
+ _ = ObjectsByTag.Remove(tag);
109
+ }
110
+ }
111
+
112
+ public static bool HasComponent<T>(this Object unityObject)
113
+ where T : Object
114
+ {
115
+ return unityObject switch
116
+ {
117
+ GameObject go => go.HasComponent<T>(),
118
+ Component component => component.HasComponent<T>(),
119
+ _ => false,
120
+ };
121
+ }
122
+
123
+ public static bool HasComponent<T>(this Component component)
124
+ where T : Object
125
+ {
126
+ return component.TryGetComponent<T>(out _);
127
+ }
128
+
129
+ public static bool HasComponent<T>(this GameObject gameObject)
130
+ where T : Object
131
+ {
132
+ return gameObject.TryGetComponent<T>(out _);
133
+ }
134
+
135
+ public static bool HasComponent(this Object unityObject, Type type)
136
+ {
137
+ return unityObject switch
138
+ {
139
+ GameObject go => go.TryGetComponent(type, out _),
140
+ Component component => component.TryGetComponent(type, out _),
141
+ _ => false,
142
+ };
143
+ }
144
+
145
+ public static void EnableRecursively<T>(
146
+ this Component component,
147
+ bool enabled,
148
+ Func<T, bool> exclude = null
149
+ )
150
+ where T : Behaviour
151
+ {
152
+ if (component == null)
153
+ {
154
+ return;
155
+ }
156
+
157
+ foreach (T behaviour in component.GetComponents<T>())
158
+ {
159
+ if (behaviour != null && !(exclude?.Invoke(behaviour) ?? false))
160
+ {
161
+ behaviour.enabled = enabled;
162
+ }
163
+ }
164
+
165
+ Transform transform = (component as Transform) ?? component.transform;
166
+ if (transform == null)
167
+ {
168
+ return;
169
+ }
170
+
171
+ for (int i = 0; i < transform.childCount; ++i)
172
+ {
173
+ Transform child = transform.GetChild(i);
174
+ EnableRecursively<T>(child, enabled, exclude);
175
+ }
176
+ }
177
+
178
+ public static void EnableRendererRecursively<T>(
179
+ this Component component,
180
+ bool enabled,
181
+ Func<T, bool> exclude = null
182
+ )
183
+ where T : Renderer
184
+ {
185
+ if (component == null)
186
+ {
187
+ return;
188
+ }
189
+
190
+ T behavior = component as T ?? component.GetComponent<T>();
191
+ if (behavior != null && !(exclude?.Invoke(behavior) ?? false))
192
+ {
193
+ behavior.enabled = enabled;
194
+ }
195
+
196
+ Transform transform = (component as Transform) ?? component.transform;
197
+ if (transform == null)
198
+ {
199
+ return;
200
+ }
201
+
202
+ for (int i = 0; i < transform.childCount; ++i)
203
+ {
204
+ Transform child = transform.GetChild(i);
205
+ EnableRendererRecursively<T>(child, enabled, exclude);
206
+ }
207
+ }
208
+
209
+ public static void DestroyAllChildrenGameObjects(this GameObject gameObject)
210
+ {
211
+ if (Application.isEditor)
212
+ {
213
+ EditorDestroyAllChildrenGameObjects(gameObject);
214
+ }
215
+ else
216
+ {
217
+ PlayDestroyAllChildrenGameObjects(gameObject);
218
+ }
219
+ }
220
+
221
+ public static void DestroyAllComponentsOfType<T>(this GameObject gameObject)
222
+ where T : Component
223
+ {
224
+ foreach (T component in gameObject.GetComponents<T>())
225
+ {
226
+ SmartDestroy(component);
227
+ }
228
+ }
229
+
230
+ public static void SmartDestroy(this Object obj, float? afterTime = null)
231
+ {
232
+ if (Application.isEditor && !Application.isPlaying)
233
+ {
234
+ Object.DestroyImmediate(obj);
235
+ }
236
+ else
237
+ {
238
+ if (afterTime.HasValue)
239
+ {
240
+ Object.Destroy(obj, afterTime.Value);
241
+ }
242
+ else
243
+ {
244
+ Object.Destroy(obj);
245
+ }
246
+ }
247
+ }
248
+
249
+ public static void DestroyAllChildrenGameObjectsImmediatelyConditionally(
250
+ this GameObject gameObject,
251
+ Func<GameObject, bool> acceptancePredicate
252
+ )
253
+ {
254
+ InternalDestroyAllChildrenGameObjects(
255
+ gameObject,
256
+ toDestroy =>
257
+ {
258
+ if (!acceptancePredicate(toDestroy))
259
+ {
260
+ return;
261
+ }
262
+
263
+ Object.DestroyImmediate(toDestroy);
264
+ }
265
+ );
266
+ }
267
+
268
+ public static void DestroyAllChildGameObjectsConditionally(
269
+ this GameObject gameObject,
270
+ Func<GameObject, bool> acceptancePredicate
271
+ )
272
+ {
273
+ InternalDestroyAllChildrenGameObjects(
274
+ gameObject,
275
+ toDestroy =>
276
+ {
277
+ if (!acceptancePredicate(toDestroy))
278
+ {
279
+ return;
280
+ }
281
+
282
+ toDestroy.Destroy();
283
+ }
284
+ );
285
+ }
286
+
287
+ public static void DestroyAllChildrenGameObjectsImmediately(this GameObject gameObject) =>
288
+ InternalDestroyAllChildrenGameObjects(gameObject, Object.DestroyImmediate);
289
+
290
+ public static void PlayDestroyAllChildrenGameObjects(this GameObject gameObject) =>
291
+ InternalDestroyAllChildrenGameObjects(gameObject, go => go.Destroy());
292
+
293
+ public static void EditorDestroyAllChildrenGameObjects(this GameObject gameObject) =>
294
+ InternalDestroyAllChildrenGameObjects(gameObject, go => go.Destroy());
295
+
296
+ private static void InternalDestroyAllChildrenGameObjects(
297
+ this GameObject gameObject,
298
+ Action<GameObject> destroyFunction
299
+ )
300
+ {
301
+ for (int i = gameObject.transform.childCount - 1; 0 <= i; --i)
302
+ {
303
+ destroyFunction(gameObject.transform.GetChild(i).gameObject);
304
+ }
305
+ }
306
+
307
+ public static bool IsPrefab(this GameObject gameObject)
308
+ {
309
+ Scene scene = gameObject.scene;
310
+ #if UNITY_EDITOR
311
+ if (scene.rootCount == 1 && string.Equals(scene.name, gameObject.name))
312
+ {
313
+ return true;
314
+ }
315
+
316
+ return PrefabUtility.GetPrefabAssetType(gameObject) switch
317
+ {
318
+ PrefabAssetType.NotAPrefab => false,
319
+ PrefabAssetType.MissingAsset => scene.rootCount == 0,
320
+ _ => true,
321
+ };
322
+ #else
323
+ return scene.rootCount == 0;
324
+ #endif
325
+ }
326
+
327
+ public static bool IsPrefab(this Component component)
328
+ {
329
+ return IsPrefab(component.gameObject);
330
+ }
331
+
332
+ public static T GetOrAddComponent<T>(this GameObject unityObject)
333
+ where T : Component
334
+ {
335
+ if (!unityObject.TryGetComponent(out T instance))
336
+ {
337
+ instance = unityObject.AddComponent<T>();
338
+ }
339
+
340
+ return instance;
341
+ }
342
+
343
+ public static Component GetOrAddComponent(this GameObject unityObject, Type componentType)
344
+ {
345
+ if (!unityObject.TryGetComponent(componentType, out Component instance))
346
+ {
347
+ instance = unityObject.AddComponent(componentType);
348
+ }
349
+
350
+ return instance;
351
+ }
352
+
353
+ public static void ModifyAndSavePrefab(GameObject prefab, Action<GameObject> modifyAction)
354
+ {
355
+ if (prefab == null)
356
+ {
357
+ return;
358
+ }
359
+
360
+ #if UNITY_EDITOR
361
+ if (PrefabUtility.IsPartOfPrefabAsset(prefab))
362
+ {
363
+ string assetPath = AssetDatabase.GetAssetPath(prefab);
364
+ GameObject content = PrefabUtility.LoadPrefabContents(assetPath);
365
+
366
+ if (content == null)
367
+ {
368
+ Debug.LogError($"Unable to load {prefab} as a prefab");
369
+ return;
370
+ }
371
+
372
+ modifyAction(content);
373
+ _ = PrefabUtility.SaveAsPrefabAsset(content, assetPath);
374
+ PrefabUtility.UnloadPrefabContents(content);
375
+ }
376
+ else
377
+ {
378
+ modifyAction(prefab);
379
+ PrefabStage stage = PrefabStageUtility.GetPrefabStage(prefab);
380
+ if (stage)
381
+ {
382
+ _ = EditorSceneManager.MarkSceneDirty(stage.scene);
383
+ }
384
+ }
385
+ #endif
386
+ }
387
+ }
388
+ }