com.wallstop-studios.unity-helpers 2.0.0-rc05 → 2.0.0-rc07

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 (46) hide show
  1. package/Runtime/Core/DataStructure/TimedCache.cs +4 -3
  2. package/Runtime/Core/Extension/IListExtensions.cs +2 -2
  3. package/Runtime/Core/Extension/RandomExtensions.cs +23 -4
  4. package/Runtime/Core/Extension/UnityExtensions.cs +278 -90
  5. package/Runtime/Core/Helper/ArrayConverter.cs +39 -0
  6. package/Runtime/Core/Helper/ArrayConverter.cs.meta +3 -0
  7. package/Runtime/Core/Helper/Helpers.cs +133 -563
  8. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -0
  9. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +3 -0
  10. package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -0
  11. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +3 -0
  12. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -0
  13. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +3 -0
  14. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -0
  15. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +3 -0
  16. package/Runtime/Core/Helper/Partials.meta +3 -0
  17. package/Runtime/Core/Helper/WallMath.cs +85 -22
  18. package/Runtime/Core/Random/AbstractRandom.cs +208 -162
  19. package/Runtime/Core/Random/DotNetRandom.cs +3 -5
  20. package/Runtime/Core/Random/PRNG.cs +7 -0
  21. package/Runtime/Core/Random/PRNG.cs.meta +3 -0
  22. package/Runtime/Core/Random/PcgRandom.cs +4 -6
  23. package/Runtime/Core/Random/RandomState.cs +31 -3
  24. package/Runtime/Core/Random/SquirrelRandom.cs +12 -15
  25. package/Runtime/Core/Random/SystemRandom.cs +92 -46
  26. package/Runtime/Core/Random/ThreadLocalRandom.cs +2 -1
  27. package/Runtime/Core/Random/UnityRandom.cs +2 -4
  28. package/Runtime/Core/Random/WyRandom.cs +2 -4
  29. package/Runtime/Core/Random/XorShiftRandom.cs +3 -5
  30. package/Runtime/Core/Serialization/Serializer.cs +36 -14
  31. package/Runtime/Utils/CircleLineRenderer.cs +17 -5
  32. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +34 -10
  33. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -0
  34. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +3 -0
  35. package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -0
  36. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +3 -0
  37. package/Tests/Runtime/Helper/WallMathTests.cs +221 -0
  38. package/Tests/Runtime/Helper/WallMathTests.cs.meta +3 -0
  39. package/Tests/Runtime/Helper.meta +3 -0
  40. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +58 -3
  41. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +47 -34
  42. package/Tests/Runtime/Random/RandomTestBase.cs +284 -9
  43. package/Tests/Runtime/Random/SquirrelRandomTests.cs +5 -0
  44. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +24 -11
  45. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +21 -17
  46. package/package.json +1 -1
@@ -8,9 +8,10 @@
8
8
  using NUnit.Framework;
9
9
  using Vector2 = UnityEngine.Vector2;
10
10
 
11
- public abstract class SpatialTreeTests<TTree> where TTree : ISpatialTree<Vector2>
11
+ public abstract class SpatialTreeTests<TTree>
12
+ where TTree : ISpatialTree<Vector2>
12
13
  {
13
- private IRandom Random => PcgRandom.Instance;
14
+ private IRandom Random => PRNG.Instance;
14
15
 
15
16
  protected abstract TTree CreateTree(IEnumerable<Vector2> points);
16
17
 
@@ -28,14 +29,18 @@
28
29
  do
29
30
  {
30
31
  point = Helpers.GetRandomPointInCircle(center, radius);
31
- }
32
- while (!points.Add(point));
32
+ } while (!points.Add(point));
33
33
  }
34
34
 
35
35
  TTree quadTree = CreateTree(points);
36
36
 
37
37
  List<Vector2> pointsInRange = quadTree.GetElementsInRange(center, radius).ToList();
38
- Assert.IsTrue(points.SetEquals(pointsInRange), "Found {0} points in range, expected {1}.", pointsInRange.Count, points.Count);
38
+ Assert.IsTrue(
39
+ points.SetEquals(pointsInRange),
40
+ "Found {0} points in range, expected {1}.",
41
+ pointsInRange.Count,
42
+ points.Count
43
+ );
39
44
  // Translate by a unit-square - there should be no points in this range
40
45
  Vector2 offset = center;
41
46
  offset.x -= radius * 2;
@@ -43,8 +48,14 @@
43
48
 
44
49
  pointsInRange = quadTree.GetElementsInRange(offset, radius).ToList();
45
50
  Assert.AreEqual(
46
- 0, pointsInRange.Count, "Found {0} points within {1} range of {2} (original center {3})",
47
- pointsInRange.Count, radius, offset, center);
51
+ 0,
52
+ pointsInRange.Count,
53
+ "Found {0} points within {1} range of {2} (original center {3})",
54
+ pointsInRange.Count,
55
+ radius,
56
+ offset,
57
+ center
58
+ );
48
59
  }
49
60
 
50
61
  [Test]
@@ -58,10 +69,19 @@
58
69
  List<Vector2> points = new(1) { testPoint };
59
70
 
60
71
  TTree quadTree = CreateTree(points);
61
- List<Vector2> pointsInRange = quadTree.GetElementsInRange(point, range * 0.99f).ToList();
72
+ List<Vector2> pointsInRange = quadTree
73
+ .GetElementsInRange(point, range * 0.99f)
74
+ .ToList();
62
75
  Assert.AreEqual(0, pointsInRange.Count);
63
76
  pointsInRange = quadTree.GetElementsInRange(point, range * 1.01f).ToList();
64
- Assert.AreEqual(1, pointsInRange.Count, "Failed to find point {0} from test point {1} with {2:0.00} range.", point, testPoint, range);
77
+ Assert.AreEqual(
78
+ 1,
79
+ pointsInRange.Count,
80
+ "Failed to find point {0} from test point {1} with {2:0.00} range.",
81
+ point,
82
+ testPoint,
83
+ range
84
+ );
65
85
  Assert.AreEqual(testPoint, pointsInRange[0]);
66
86
  }
67
87
 
@@ -95,7 +115,11 @@
95
115
  nearestNeighborCount = 16;
96
116
  quadTree.GetApproximateNearestNeighbors(center, nearestNeighborCount, nearestNeighbors);
97
117
  Assert.AreEqual(nearestNeighborCount, nearestNeighbors.Count);
98
- Assert.IsTrue(nearestNeighbors.All(neighbor => (neighbor - center).magnitude <= 5.6f), "Max: {0}", nearestNeighbors.Select(neighbor => (neighbor - center).magnitude).Max());
118
+ Assert.IsTrue(
119
+ nearestNeighbors.All(neighbor => (neighbor - center).magnitude <= 5.6f),
120
+ "Max: {0}",
121
+ nearestNeighbors.Select(neighbor => (neighbor - center).magnitude).Max()
122
+ );
99
123
 
100
124
  center = new Vector2(-100, -100);
101
125
 
@@ -0,0 +1,19 @@
1
+ namespace UnityHelpers.Tests.Tests.Runtime.Helper
2
+ {
3
+ using System.Linq;
4
+ using Core.Helper;
5
+ using Core.Random;
6
+ using NUnit.Framework;
7
+
8
+ public sealed class ArrayConverterTests
9
+ {
10
+ [Test]
11
+ public void IntToByteArray()
12
+ {
13
+ int[] ints = Enumerable.Range(0, 1000).Select(_ => PRNG.Instance.Next()).ToArray();
14
+ byte[] bytes = ArrayConverter.IntArrayToByteArrayBlockCopy(ints);
15
+ int[] decoded = ArrayConverter.ByteArrayToIntArrayBlockCopy(bytes);
16
+ Assert.IsTrue(ints.SequenceEqual(decoded));
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 35d3b0e1ba0e43bbb9d899a44b36812a
3
+ timeCreated: 1732492102
@@ -0,0 +1,402 @@
1
+ namespace UnityHelpers.Tests.Tests.Runtime.Helper
2
+ {
3
+ using System.Collections;
4
+ using Core.Helper;
5
+ using JetBrains.Annotations;
6
+ using NUnit.Framework;
7
+ using UnityEngine;
8
+ using UnityEngine.TestTools;
9
+
10
+ [UsedImplicitly]
11
+ public sealed class ObjectHelperComponent : MonoBehaviour { }
12
+
13
+ public sealed class ObjectHelperTests
14
+ {
15
+ [UnityTest]
16
+ public IEnumerator HasComponent()
17
+ {
18
+ GameObject go = new("Test SpriteRenderer", typeof(SpriteRenderer));
19
+ SpriteRenderer spriteRenderer = go.GetComponent<SpriteRenderer>();
20
+
21
+ Assert.IsTrue(go.HasComponent(typeof(SpriteRenderer)));
22
+ Assert.IsTrue(go.HasComponent<SpriteRenderer>());
23
+ Assert.IsTrue(spriteRenderer.HasComponent<SpriteRenderer>());
24
+ Assert.IsTrue(spriteRenderer.HasComponent(typeof(SpriteRenderer)));
25
+
26
+ Assert.IsFalse(go.HasComponent<LineRenderer>());
27
+ Assert.IsFalse(go.HasComponent(typeof(LineRenderer)));
28
+ Assert.IsFalse(spriteRenderer.HasComponent<LineRenderer>());
29
+ Assert.IsFalse(spriteRenderer.HasComponent(typeof(LineRenderer)));
30
+
31
+ Object obj = go;
32
+ Assert.IsTrue(obj.HasComponent<SpriteRenderer>());
33
+ Assert.IsTrue(obj.HasComponent(typeof(SpriteRenderer)));
34
+ Assert.IsFalse(obj.HasComponent<LineRenderer>());
35
+ Assert.IsFalse(obj.HasComponent(typeof(LineRenderer)));
36
+
37
+ yield break;
38
+ }
39
+
40
+ [UnityTest]
41
+ public IEnumerator EnableRendererRecursively()
42
+ {
43
+ GameObject one = New("1");
44
+ GameObject two = New("2");
45
+ two.transform.SetParent(one.transform);
46
+ GameObject three = New("3");
47
+ three.transform.SetParent(two.transform);
48
+ GameObject four = New("4");
49
+ four.transform.SetParent(three.transform);
50
+
51
+ // Act
52
+ two.transform.EnableRendererRecursively<SpriteRenderer>(false);
53
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
54
+ Assert.IsFalse(two.GetComponent<SpriteRenderer>().enabled);
55
+ Assert.IsFalse(three.GetComponent<SpriteRenderer>().enabled);
56
+ Assert.IsFalse(four.GetComponent<SpriteRenderer>().enabled);
57
+
58
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
59
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
60
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
61
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
62
+
63
+ // Act
64
+ three.transform.EnableRendererRecursively<SpriteRenderer>(true);
65
+
66
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
67
+ Assert.IsFalse(two.GetComponent<SpriteRenderer>().enabled);
68
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
69
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
70
+
71
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
72
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
73
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
74
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
75
+
76
+ // Act
77
+ one.transform.EnableRendererRecursively<SpriteRenderer>(true);
78
+
79
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
80
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
81
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
82
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
83
+
84
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
85
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
86
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
87
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
88
+
89
+ // Act
90
+ two.transform.EnableRendererRecursively<SpriteRenderer>(
91
+ false,
92
+ renderer => renderer.gameObject == three
93
+ );
94
+
95
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
96
+ Assert.IsFalse(two.GetComponent<SpriteRenderer>().enabled);
97
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
98
+ Assert.IsFalse(four.GetComponent<SpriteRenderer>().enabled);
99
+
100
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
101
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
102
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
103
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
104
+
105
+ // Act
106
+ one.transform.EnableRendererRecursively<SpriteRenderer>(
107
+ true,
108
+ renderer => renderer.gameObject == four
109
+ );
110
+
111
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
112
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
113
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
114
+ Assert.IsFalse(four.GetComponent<SpriteRenderer>().enabled);
115
+
116
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
117
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
118
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
119
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
120
+
121
+ yield break;
122
+
123
+ GameObject New(string name)
124
+ {
125
+ return new GameObject(name, typeof(SpriteRenderer), typeof(CircleCollider2D));
126
+ }
127
+ }
128
+
129
+ [UnityTest]
130
+ public IEnumerator EnableRecursively()
131
+ {
132
+ GameObject one = New("1");
133
+ GameObject two = New("2");
134
+ two.transform.SetParent(one.transform);
135
+ GameObject three = New("3");
136
+ three.transform.SetParent(two.transform);
137
+ GameObject four = New("4");
138
+ four.transform.SetParent(three.transform);
139
+
140
+ // Act
141
+ two.transform.EnableRecursively<CircleCollider2D>(false);
142
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
143
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
144
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
145
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
146
+
147
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
148
+ Assert.IsFalse(two.GetComponent<CircleCollider2D>().enabled);
149
+ Assert.IsFalse(three.GetComponent<CircleCollider2D>().enabled);
150
+ Assert.IsFalse(four.GetComponent<CircleCollider2D>().enabled);
151
+
152
+ // Act
153
+ three.transform.EnableRecursively<CircleCollider2D>(true);
154
+
155
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
156
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
157
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
158
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
159
+
160
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
161
+ Assert.IsFalse(two.GetComponent<CircleCollider2D>().enabled);
162
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
163
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
164
+
165
+ // Act
166
+ one.transform.EnableRecursively<CircleCollider2D>(true);
167
+
168
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
169
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
170
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
171
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
172
+
173
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
174
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
175
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
176
+ Assert.IsTrue(four.GetComponent<CircleCollider2D>().enabled);
177
+
178
+ // Act
179
+ two.transform.EnableRecursively<CircleCollider2D>(
180
+ false,
181
+ collider => collider.gameObject == three
182
+ );
183
+
184
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
185
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
186
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
187
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
188
+
189
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
190
+ Assert.IsFalse(two.GetComponent<CircleCollider2D>().enabled);
191
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
192
+ Assert.IsFalse(four.GetComponent<CircleCollider2D>().enabled);
193
+
194
+ // Act
195
+ one.transform.EnableRecursively<CircleCollider2D>(
196
+ true,
197
+ collider => collider.gameObject == four
198
+ );
199
+
200
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>().enabled);
201
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>().enabled);
202
+ Assert.IsTrue(three.GetComponent<SpriteRenderer>().enabled);
203
+ Assert.IsTrue(four.GetComponent<SpriteRenderer>().enabled);
204
+
205
+ Assert.IsTrue(one.GetComponent<CircleCollider2D>().enabled);
206
+ Assert.IsTrue(two.GetComponent<CircleCollider2D>().enabled);
207
+ Assert.IsTrue(three.GetComponent<CircleCollider2D>().enabled);
208
+ Assert.IsFalse(four.GetComponent<CircleCollider2D>().enabled);
209
+
210
+ yield break;
211
+
212
+ GameObject New(string name)
213
+ {
214
+ return new GameObject(name, typeof(SpriteRenderer), typeof(CircleCollider2D));
215
+ }
216
+ }
217
+
218
+ [UnityTest]
219
+ public IEnumerator DestroyAllChildGameObjects()
220
+ {
221
+ GameObject one = new("1");
222
+ GameObject two = new("2");
223
+ two.transform.SetParent(one.transform);
224
+ GameObject three = new("3");
225
+ three.transform.SetParent(two.transform);
226
+ GameObject four = new("4");
227
+ four.transform.SetParent(three.transform);
228
+
229
+ // Act
230
+ two.DestroyAllChildrenGameObjects();
231
+ yield return null;
232
+
233
+ Assert.IsTrue(one != null);
234
+ Assert.IsTrue(two != null);
235
+ Assert.IsTrue(three == null);
236
+ Assert.IsTrue(four == null);
237
+
238
+ three = new GameObject("3");
239
+ three.transform.SetParent(two.transform);
240
+ four = new GameObject("4");
241
+ four.transform.SetParent(three.transform);
242
+
243
+ // Act
244
+ one.DestroyAllChildrenGameObjects();
245
+ yield return null;
246
+
247
+ Assert.IsTrue(one != null);
248
+ Assert.IsTrue(two == null);
249
+ Assert.IsTrue(three == null);
250
+ Assert.IsTrue(four == null);
251
+ }
252
+
253
+ [UnityTest]
254
+ public IEnumerator DestroyAllComponentsOfType()
255
+ {
256
+ GameObject one = New("1");
257
+ Assert.AreEqual(4, one.GetComponents<ObjectHelperComponent>().Length);
258
+
259
+ GameObject two = New("2");
260
+ two.transform.SetParent(one.transform);
261
+
262
+ one.DestroyAllComponentsOfType<ObjectHelperComponent>();
263
+ yield return null;
264
+ Assert.AreEqual(0, one.GetComponents<ObjectHelperComponent>().Length);
265
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>() != null);
266
+ Assert.AreEqual(4, two.GetComponents<ObjectHelperComponent>().Length);
267
+
268
+ two.DestroyAllComponentsOfType<ObjectHelperComponent>();
269
+ yield return null;
270
+ Assert.AreEqual(0, one.GetComponents<ObjectHelperComponent>().Length);
271
+ Assert.IsTrue(one.GetComponent<SpriteRenderer>() != null);
272
+ Assert.AreEqual(0, two.GetComponents<ObjectHelperComponent>().Length);
273
+ Assert.IsTrue(two.GetComponent<SpriteRenderer>() != null);
274
+
275
+ GameObject New(string name)
276
+ {
277
+ return new GameObject(
278
+ name,
279
+ typeof(SpriteRenderer),
280
+ typeof(ObjectHelperComponent),
281
+ typeof(ObjectHelperComponent),
282
+ typeof(ObjectHelperComponent),
283
+ typeof(ObjectHelperComponent)
284
+ );
285
+ }
286
+ }
287
+
288
+ [UnityTest]
289
+ public IEnumerator SmartDestroy()
290
+ {
291
+ GameObject one = new("1");
292
+
293
+ one.SmartDestroy();
294
+ yield return null;
295
+ Assert.IsTrue(one == null);
296
+
297
+ GameObject two = new("2");
298
+ two.SmartDestroy(1.5f);
299
+ yield return null;
300
+ Assert.IsTrue(two != null);
301
+ yield return new WaitForSeconds(1.6f);
302
+
303
+ Assert.IsTrue(two == null);
304
+ }
305
+
306
+ [UnityTest]
307
+ public IEnumerator DestroyAllChildrenGameObjectsImmediatelyConditionally()
308
+ {
309
+ GameObject one = new("1");
310
+ GameObject two = new("2");
311
+ two.transform.SetParent(one.transform);
312
+ GameObject three = new("3");
313
+ three.transform.SetParent(two.transform);
314
+ GameObject four = new("4");
315
+ four.transform.SetParent(two.transform);
316
+
317
+ two.DestroyAllChildrenGameObjectsImmediatelyConditionally(go => go == four);
318
+ Assert.IsTrue(one != null);
319
+ Assert.IsTrue(two != null);
320
+ Assert.IsTrue(three != null);
321
+ Assert.IsTrue(four == null);
322
+
323
+ one.DestroyAllChildrenGameObjectsImmediatelyConditionally(go => go != two);
324
+ Assert.IsTrue(one != null);
325
+ Assert.IsTrue(two != null);
326
+ Assert.IsTrue(three != null);
327
+ Assert.IsTrue(four == null);
328
+
329
+ one.DestroyAllChildrenGameObjectsImmediatelyConditionally(go => go == two);
330
+ Assert.IsTrue(one != null);
331
+ Assert.IsTrue(two == null);
332
+ Assert.IsTrue(three == null);
333
+ Assert.IsTrue(four == null);
334
+
335
+ yield break;
336
+ }
337
+
338
+ [UnityTest]
339
+ public IEnumerator DestroyAllChildGameObjectsConditionally()
340
+ {
341
+ GameObject one = new("1");
342
+ GameObject two = new("2");
343
+ two.transform.SetParent(one.transform);
344
+ GameObject three = new("3");
345
+ three.transform.SetParent(two.transform);
346
+ GameObject four = new("4");
347
+ four.transform.SetParent(two.transform);
348
+
349
+ two.DestroyAllChildGameObjectsConditionally(go => go == four);
350
+ yield return null;
351
+ Assert.IsTrue(one != null);
352
+ Assert.IsTrue(two != null);
353
+ Assert.IsTrue(three != null);
354
+ Assert.IsTrue(four == null);
355
+
356
+ one.DestroyAllChildGameObjectsConditionally(go => go != two);
357
+ yield return null;
358
+ Assert.IsTrue(one != null);
359
+ Assert.IsTrue(two != null);
360
+ Assert.IsTrue(three != null);
361
+ Assert.IsTrue(four == null);
362
+
363
+ one.DestroyAllChildGameObjectsConditionally(go => go == two);
364
+ yield return null;
365
+ Assert.IsTrue(one != null);
366
+ Assert.IsTrue(two == null);
367
+ Assert.IsTrue(three == null);
368
+ Assert.IsTrue(four == null);
369
+ }
370
+
371
+ [UnityTest]
372
+ public IEnumerator DestroyAllChildrenGameObjectsImmediately()
373
+ {
374
+ GameObject one = new("1");
375
+ GameObject two = new("2");
376
+ two.transform.SetParent(one.transform);
377
+ GameObject three = new("3");
378
+ three.transform.SetParent(two.transform);
379
+ GameObject four = new("4");
380
+ four.transform.SetParent(two.transform);
381
+
382
+ two.DestroyAllChildrenGameObjectsImmediately();
383
+ Assert.IsTrue(one != null);
384
+ Assert.IsTrue(two != null);
385
+ Assert.IsTrue(three == null);
386
+ Assert.IsTrue(four == null);
387
+
388
+ three = new GameObject("3");
389
+ three.transform.SetParent(two.transform);
390
+ four = new("4");
391
+ four.transform.SetParent(two.transform);
392
+
393
+ one.DestroyAllChildrenGameObjectsImmediately();
394
+ Assert.IsTrue(one != null);
395
+ Assert.IsTrue(two == null);
396
+ Assert.IsTrue(three == null);
397
+ Assert.IsTrue(four == null);
398
+
399
+ yield break;
400
+ }
401
+ }
402
+ }
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 7cff29f44c1e49f1bc4149eeacea7b9b
3
+ timeCreated: 1732646804