com.wallstop-studios.unity-helpers 2.0.0-rc27 → 2.0.0-rc31
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.
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +60 -0
- package/.github/workflows/unity-package.yml +101 -0
- package/.github/workflows/unity-tests.yml +38 -0
- package/Editor/AnimationCopier.cs +158 -158
- package/Editor/AnimationCopier.cs.meta +2 -2
- package/Editor/AnimationCreator.cs +262 -262
- package/Editor/AnimationCreator.cs.meta +11 -11
- package/Editor/AnimationEventEditor.cs +887 -887
- package/Editor/AnimatorControllerCopier.cs +162 -162
- package/Editor/AnimatorControllerCopier.cs.meta +2 -2
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
- package/Editor/CustomEditors.meta +2 -2
- package/Editor/EnsureTextureSizeWizard.cs +110 -110
- package/Editor/EnsureTextureSizeWizard.cs.meta +2 -2
- package/Editor/PrefabCheckWizard.cs +165 -165
- package/Editor/PrefabCheckWizard.cs.meta +11 -11
- package/Editor/SpriteSettingsApplier.cs +168 -168
- package/Editor/SpriteSettingsApplier.cs.meta +2 -2
- package/Editor/StringInListeDrawer.cs +56 -56
- package/Editor/TextureResizerWizard.cs +181 -181
- package/Editor/TextureResizerWizard.cs.meta +2 -2
- package/Editor/TextureSettingsApplier.cs +171 -171
- package/Editor/TextureSettingsApplier.cs.meta +2 -2
- package/Editor/Utils/EditorUtilities.cs +22 -22
- package/Editor/Utils/EditorUtilities.cs.meta +11 -11
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs +26 -26
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs.meta +11 -11
- package/Editor/Utils.meta +8 -8
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
- package/LICENSE +21 -21
- package/LICENSE.md +6 -6
- package/LICENSE.meta +7 -7
- package/README.md +117 -117
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
- package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
- package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
- package/Runtime/Binaries.meta +8 -8
- package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
- package/Runtime/Core/Attributes/ChildComponentAttribute.cs +189 -189
- package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
- package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
- package/Runtime/Core/Attributes/ParentComponent.cs +184 -184
- package/Runtime/Core/Attributes/ReadOnlyAttribute.cs +6 -6
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +119 -119
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes.meta +8 -8
- package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
- package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
- package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
- package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
- package/Runtime/Core/DataStructure/Circle.cs +50 -50
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +155 -155
- package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
- package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/KDTree.cs +290 -290
- package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/QuadTree.cs +279 -279
- package/Runtime/Core/DataStructure/RTree.cs +336 -336
- package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
- package/Runtime/Core/DataStructure/TimedCache.cs +51 -51
- package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
- package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
- package/Runtime/Core/Extension/ColorExtensions.cs +338 -338
- package/Runtime/Core/Extension/DictionaryExtensions.cs +251 -251
- package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
- package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
- package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
- package/Runtime/Core/Extension/IListExtensions.cs +89 -89
- package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
- package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
- package/Runtime/Core/Extension/StringExtensions.cs +151 -151
- package/Runtime/Core/Extension/UnityExtensions.cs +1607 -1607
- package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
- package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
- package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
- package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
- package/Runtime/Core/Helper/Enumerables.cs +17 -17
- package/Runtime/Core/Helper/Geometry.cs +43 -43
- package/Runtime/Core/Helper/Helpers.cs +722 -722
- package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
- package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
- package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
- package/Runtime/Core/Helper/Objects.cs +767 -767
- package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
- package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
- package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -167
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials.meta +2 -2
- package/Runtime/Core/Helper/ReflectionHelpers.cs +152 -152
- package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/SpriteHelpers.cs +86 -86
- package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/StringInList.cs +31 -31
- package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
- package/Runtime/Core/Helper/WallMath.cs +166 -166
- package/Runtime/Core/Math/Line.cs +55 -55
- package/Runtime/Core/Math/Parabola.cs +47 -47
- package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
- package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
- package/Runtime/Core/Math/Range.cs +92 -92
- package/Runtime/Core/Math/XXHash.cs +310 -310
- package/Runtime/Core/Math/XXHash.cs.meta +11 -11
- package/Runtime/Core/Model/Direction.cs +43 -43
- package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
- package/Runtime/Core/OneOf/None.cs +4 -4
- package/Runtime/Core/Random/AbstractRandom.cs +561 -561
- package/Runtime/Core/Random/DotNetRandom.cs +52 -52
- package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
- package/Runtime/Core/Random/IRandom.cs +160 -160
- package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
- package/Runtime/Core/Random/PRNG.cs +7 -7
- package/Runtime/Core/Random/PRNG.cs.meta +2 -2
- package/Runtime/Core/Random/PcgRandom.cs +149 -149
- package/Runtime/Core/Random/PerlinNoise.cs +369 -369
- package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
- package/Runtime/Core/Random/RandomState.cs +131 -131
- package/Runtime/Core/Random/RandomUtilities.cs +26 -26
- package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
- package/Runtime/Core/Random/RomuDuo.cs +116 -116
- package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
- package/Runtime/Core/Random/SplitMix64.cs +94 -94
- package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
- package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
- package/Runtime/Core/Random/SystemRandom.cs +162 -162
- package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
- package/Runtime/Core/Random/UnityRandom.cs +57 -57
- package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
- package/Runtime/Core/Random/WyRandom.cs +121 -121
- package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
- package/Runtime/Core/Random/XorShiftRandom.cs +47 -47
- package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
- package/Runtime/Core/Random/XorShiroRandom.cs +117 -117
- package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
- package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
- package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
- package/Runtime/Core/Serialization/Serializer.cs +184 -184
- package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +107 -107
- package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
- package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
- package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
- package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
- package/Runtime/UI/LayeredImage.cs +364 -364
- package/Runtime/UI/LayeredImage.cs.meta +2 -2
- package/Runtime/UI.meta +2 -2
- package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
- package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
- package/Runtime/Utils/Buffers.cs +32 -32
- package/Runtime/Utils/CenterPointOffset.cs +30 -30
- package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
- package/Runtime/Utils/CircleLineRenderer.cs +134 -134
- package/Runtime/Utils/CoroutineHandler.cs +4 -4
- package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
- package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
- package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
- package/Runtime/Utils/Oscillator.cs +27 -27
- package/Runtime/Utils/RuntimeSingleton.cs +57 -57
- package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
- package/Runtime/Utils/SetTextureImportData.cs +69 -69
- package/Runtime/Utils/SpriteRendererMetadata.cs +312 -312
- package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
- package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
- package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
- package/Runtime/Utils/TextureScale.cs +179 -179
- package/Runtime/Utils/TextureScale.cs.meta +2 -2
- package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
- package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
- package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
- package/Tests/Runtime/Components/RelationalComponentTester.cs +34 -34
- package/Tests/Runtime/Components/RelationalComponentTester.cs.meta +2 -2
- package/Tests/Runtime/Components.meta +2 -2
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures.meta +8 -8
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/IListExtensionTests.cs +76 -76
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
- package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions.meta +2 -2
- package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
- package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
- package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
- package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
- package/Tests/Runtime/Helper.meta +2 -2
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs +139 -139
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +37 -37
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/Performance.meta +8 -8
- package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
- package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
- package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
- package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
- package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
- package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
- package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
- package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random.meta +8 -8
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs +84 -84
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
- package/Tests/Runtime/Serialization.meta +2 -2
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
- package/Tests/Runtime/Utils.meta +2 -2
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
- package/Tests/Runtime.meta +8 -8
- package/package.json +38 -38
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Extension
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Collections.Concurrent;
|
|
5
|
-
using System.Collections.Generic;
|
|
6
|
-
using System.Linq;
|
|
7
|
-
using Random;
|
|
8
|
-
|
|
9
|
-
public static class IEnumerableExtensions
|
|
10
|
-
{
|
|
11
|
-
private static readonly ConcurrentDictionary<object, object> ComparerCache = new();
|
|
12
|
-
|
|
13
|
-
public static LinkedList<T> ToLinkedList<T>(this IEnumerable<T> source)
|
|
14
|
-
{
|
|
15
|
-
return new LinkedList<T>(source);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public static IList<T> AsList<T>(this IEnumerable<T> enumeration)
|
|
19
|
-
{
|
|
20
|
-
if (enumeration is IList<T> list)
|
|
21
|
-
{
|
|
22
|
-
return list;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return enumeration.ToList();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public static IEnumerable<T> OrderBy<T>(
|
|
29
|
-
this IEnumerable<T> enumeration,
|
|
30
|
-
Func<T, T, int> comparer
|
|
31
|
-
)
|
|
32
|
-
{
|
|
33
|
-
FuncBasedComparer<T> comparerObject =
|
|
34
|
-
(FuncBasedComparer<T>)
|
|
35
|
-
ComparerCache.GetOrAdd(comparer, () => new FuncBasedComparer<T>(comparer));
|
|
36
|
-
return enumeration.OrderBy(_ => _, comparerObject);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public static IEnumerable<T> Ordered<T>(this IEnumerable<T> enumerable)
|
|
40
|
-
where T : IComparable
|
|
41
|
-
{
|
|
42
|
-
return enumerable.OrderBy(_ => _);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public static IEnumerable<T> Shuffled<T>(
|
|
46
|
-
this IEnumerable<T> enumerable,
|
|
47
|
-
IRandom random = null
|
|
48
|
-
)
|
|
49
|
-
{
|
|
50
|
-
random = random ?? ThreadLocalRandom<PcgRandom>.Instance;
|
|
51
|
-
return enumerable.OrderBy(_ => random.Next());
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public static IEnumerable<T> Infinite<T>(this IEnumerable<T> enumerable)
|
|
55
|
-
{
|
|
56
|
-
ICollection<T> collection = enumerable as ICollection<T> ?? enumerable.ToList();
|
|
57
|
-
if (collection.Count == 0)
|
|
58
|
-
{
|
|
59
|
-
yield break;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
while (true)
|
|
63
|
-
{
|
|
64
|
-
foreach (T element in collection)
|
|
65
|
-
{
|
|
66
|
-
yield return element;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
|
|
72
|
-
{
|
|
73
|
-
foreach (T item in enumerable)
|
|
74
|
-
{
|
|
75
|
-
action(item);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
public static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> items, int size)
|
|
80
|
-
{
|
|
81
|
-
using var enumerator = items.GetEnumerator();
|
|
82
|
-
bool hasNext = enumerator.MoveNext();
|
|
83
|
-
|
|
84
|
-
IEnumerable<T> NextPartitionOf()
|
|
85
|
-
{
|
|
86
|
-
int remainingCountForPartition = size;
|
|
87
|
-
while (remainingCountForPartition-- > 0 && hasNext)
|
|
88
|
-
{
|
|
89
|
-
yield return enumerator.Current;
|
|
90
|
-
hasNext = enumerator.MoveNext();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
while (hasNext)
|
|
95
|
-
{
|
|
96
|
-
yield return NextPartitionOf().ToList();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
public static List<T> ToList<T>(this IEnumerable<T> enumerable, int count)
|
|
101
|
-
{
|
|
102
|
-
List<T> list = new(count);
|
|
103
|
-
list.AddRange(enumerable);
|
|
104
|
-
return list;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
private class FuncBasedComparer<T> : IComparer<T>
|
|
108
|
-
{
|
|
109
|
-
private readonly Func<T, T, int> _comparer;
|
|
110
|
-
|
|
111
|
-
public FuncBasedComparer(Func<T, T, int> comparer)
|
|
112
|
-
{
|
|
113
|
-
_comparer = comparer ?? throw new ArgumentNullException(nameof(comparer));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
public int Compare(T lhs, T rhs)
|
|
117
|
-
{
|
|
118
|
-
return _comparer(lhs, rhs);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Extension
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections.Concurrent;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
using System.Linq;
|
|
7
|
+
using Random;
|
|
8
|
+
|
|
9
|
+
public static class IEnumerableExtensions
|
|
10
|
+
{
|
|
11
|
+
private static readonly ConcurrentDictionary<object, object> ComparerCache = new();
|
|
12
|
+
|
|
13
|
+
public static LinkedList<T> ToLinkedList<T>(this IEnumerable<T> source)
|
|
14
|
+
{
|
|
15
|
+
return new LinkedList<T>(source);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public static IList<T> AsList<T>(this IEnumerable<T> enumeration)
|
|
19
|
+
{
|
|
20
|
+
if (enumeration is IList<T> list)
|
|
21
|
+
{
|
|
22
|
+
return list;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return enumeration.ToList();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public static IEnumerable<T> OrderBy<T>(
|
|
29
|
+
this IEnumerable<T> enumeration,
|
|
30
|
+
Func<T, T, int> comparer
|
|
31
|
+
)
|
|
32
|
+
{
|
|
33
|
+
FuncBasedComparer<T> comparerObject =
|
|
34
|
+
(FuncBasedComparer<T>)
|
|
35
|
+
ComparerCache.GetOrAdd(comparer, () => new FuncBasedComparer<T>(comparer));
|
|
36
|
+
return enumeration.OrderBy(_ => _, comparerObject);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public static IEnumerable<T> Ordered<T>(this IEnumerable<T> enumerable)
|
|
40
|
+
where T : IComparable
|
|
41
|
+
{
|
|
42
|
+
return enumerable.OrderBy(_ => _);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static IEnumerable<T> Shuffled<T>(
|
|
46
|
+
this IEnumerable<T> enumerable,
|
|
47
|
+
IRandom random = null
|
|
48
|
+
)
|
|
49
|
+
{
|
|
50
|
+
random = random ?? ThreadLocalRandom<PcgRandom>.Instance;
|
|
51
|
+
return enumerable.OrderBy(_ => random.Next());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public static IEnumerable<T> Infinite<T>(this IEnumerable<T> enumerable)
|
|
55
|
+
{
|
|
56
|
+
ICollection<T> collection = enumerable as ICollection<T> ?? enumerable.ToList();
|
|
57
|
+
if (collection.Count == 0)
|
|
58
|
+
{
|
|
59
|
+
yield break;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
while (true)
|
|
63
|
+
{
|
|
64
|
+
foreach (T element in collection)
|
|
65
|
+
{
|
|
66
|
+
yield return element;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
|
|
72
|
+
{
|
|
73
|
+
foreach (T item in enumerable)
|
|
74
|
+
{
|
|
75
|
+
action(item);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> items, int size)
|
|
80
|
+
{
|
|
81
|
+
using var enumerator = items.GetEnumerator();
|
|
82
|
+
bool hasNext = enumerator.MoveNext();
|
|
83
|
+
|
|
84
|
+
IEnumerable<T> NextPartitionOf()
|
|
85
|
+
{
|
|
86
|
+
int remainingCountForPartition = size;
|
|
87
|
+
while (remainingCountForPartition-- > 0 && hasNext)
|
|
88
|
+
{
|
|
89
|
+
yield return enumerator.Current;
|
|
90
|
+
hasNext = enumerator.MoveNext();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
while (hasNext)
|
|
95
|
+
{
|
|
96
|
+
yield return NextPartitionOf().ToList();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public static List<T> ToList<T>(this IEnumerable<T> enumerable, int count)
|
|
101
|
+
{
|
|
102
|
+
List<T> list = new(count);
|
|
103
|
+
list.AddRange(enumerable);
|
|
104
|
+
return list;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private class FuncBasedComparer<T> : IComparer<T>
|
|
108
|
+
{
|
|
109
|
+
private readonly Func<T, T, int> _comparer;
|
|
110
|
+
|
|
111
|
+
public FuncBasedComparer(Func<T, T, int> comparer)
|
|
112
|
+
{
|
|
113
|
+
_comparer = comparer ?? throw new ArgumentNullException(nameof(comparer));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public int Compare(T lhs, T rhs)
|
|
117
|
+
{
|
|
118
|
+
return _comparer(lhs, rhs);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Extension
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Collections.Generic;
|
|
5
|
-
using Helper;
|
|
6
|
-
using Random;
|
|
7
|
-
|
|
8
|
-
public static class IListExtensions
|
|
9
|
-
{
|
|
10
|
-
public static void Shuffle<T>(this IList<T> list, IRandom random = null)
|
|
11
|
-
{
|
|
12
|
-
if (list is not { Count: > 1 })
|
|
13
|
-
{
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
random ??= PRNG.Instance;
|
|
18
|
-
|
|
19
|
-
int length = list.Count;
|
|
20
|
-
for (int i = 0; i < length - 1; ++i)
|
|
21
|
-
{
|
|
22
|
-
int nextIndex = random.Next(i, length);
|
|
23
|
-
if (nextIndex == i)
|
|
24
|
-
{
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
(list[i], list[nextIndex]) = (list[nextIndex], list[i]);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public static void Shift<T>(this IList<T> list, int amount)
|
|
32
|
-
{
|
|
33
|
-
int count = list.Count;
|
|
34
|
-
if (count <= 1)
|
|
35
|
-
{
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
amount = amount.PositiveMod(count);
|
|
40
|
-
if (amount == 0)
|
|
41
|
-
{
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
Reverse(list, 0, count - 1);
|
|
46
|
-
Reverse(list, 0, amount - 1);
|
|
47
|
-
Reverse(list, amount, count - 1);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public static void Reverse<T>(this IList<T> list, int start, int end)
|
|
51
|
-
{
|
|
52
|
-
if (start < 0 || list.Count <= start)
|
|
53
|
-
{
|
|
54
|
-
throw new ArgumentException(nameof(start));
|
|
55
|
-
}
|
|
56
|
-
if (end < 0 || list.Count <= end)
|
|
57
|
-
{
|
|
58
|
-
throw new ArgumentException(nameof(end));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
while (start < end)
|
|
62
|
-
{
|
|
63
|
-
(list[start], list[end]) = (list[end], list[start]);
|
|
64
|
-
start++;
|
|
65
|
-
end--;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
public static void RemoveAtSwapBack<T>(this IList<T> list, int index)
|
|
70
|
-
{
|
|
71
|
-
if (list.Count <= 1)
|
|
72
|
-
{
|
|
73
|
-
list.Clear();
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
int lastIndex = list.Count - 1;
|
|
78
|
-
if (index == lastIndex)
|
|
79
|
-
{
|
|
80
|
-
list.RemoveAt(index);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
T last = list[lastIndex];
|
|
85
|
-
list[index] = last;
|
|
86
|
-
list.RemoveAt(lastIndex);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Extension
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
using Helper;
|
|
6
|
+
using Random;
|
|
7
|
+
|
|
8
|
+
public static class IListExtensions
|
|
9
|
+
{
|
|
10
|
+
public static void Shuffle<T>(this IList<T> list, IRandom random = null)
|
|
11
|
+
{
|
|
12
|
+
if (list is not { Count: > 1 })
|
|
13
|
+
{
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
random ??= PRNG.Instance;
|
|
18
|
+
|
|
19
|
+
int length = list.Count;
|
|
20
|
+
for (int i = 0; i < length - 1; ++i)
|
|
21
|
+
{
|
|
22
|
+
int nextIndex = random.Next(i, length);
|
|
23
|
+
if (nextIndex == i)
|
|
24
|
+
{
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
(list[i], list[nextIndex]) = (list[nextIndex], list[i]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public static void Shift<T>(this IList<T> list, int amount)
|
|
32
|
+
{
|
|
33
|
+
int count = list.Count;
|
|
34
|
+
if (count <= 1)
|
|
35
|
+
{
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
amount = amount.PositiveMod(count);
|
|
40
|
+
if (amount == 0)
|
|
41
|
+
{
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
Reverse(list, 0, count - 1);
|
|
46
|
+
Reverse(list, 0, amount - 1);
|
|
47
|
+
Reverse(list, amount, count - 1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public static void Reverse<T>(this IList<T> list, int start, int end)
|
|
51
|
+
{
|
|
52
|
+
if (start < 0 || list.Count <= start)
|
|
53
|
+
{
|
|
54
|
+
throw new ArgumentException(nameof(start));
|
|
55
|
+
}
|
|
56
|
+
if (end < 0 || list.Count <= end)
|
|
57
|
+
{
|
|
58
|
+
throw new ArgumentException(nameof(end));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
while (start < end)
|
|
62
|
+
{
|
|
63
|
+
(list[start], list[end]) = (list[end], list[start]);
|
|
64
|
+
start++;
|
|
65
|
+
end--;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public static void RemoveAtSwapBack<T>(this IList<T> list, int index)
|
|
70
|
+
{
|
|
71
|
+
if (list.Count <= 1)
|
|
72
|
+
{
|
|
73
|
+
list.Clear();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
int lastIndex = list.Count - 1;
|
|
78
|
+
if (index == lastIndex)
|
|
79
|
+
{
|
|
80
|
+
list.RemoveAt(index);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
T last = list[lastIndex];
|
|
85
|
+
list[index] = last;
|
|
86
|
+
list.RemoveAt(lastIndex);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|