com.wallstop-studios.unity-helpers 2.0.0-rc56 → 2.0.0-rc58
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/.config/dotnet-tools.json +9 -9
- package/.editorconfig +184 -184
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +66 -66
- package/.pre-commit-config.yaml +21 -21
- package/Editor/AnimationCopier.cs +181 -181
- package/Editor/AnimationCopier.cs.meta +2 -2
- package/Editor/AnimationCreator.cs +253 -253
- 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/FitTextureSizeWizard.cs +147 -147
- package/Editor/FitTextureSizeWizard.cs.meta +2 -2
- package/Editor/PrefabCheckWizard.cs +170 -170
- package/Editor/PrefabCheckWizard.cs.meta +11 -11
- package/Editor/SpriteSettingsApplier.cs +272 -272
- 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 +178 -178
- package/Editor/TextureSettingsApplier.cs.meta +2 -2
- package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
- package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
- package/Editor/Utils/EditorUtilities.cs +22 -22
- package/Editor/Utils/EditorUtilities.cs.meta +11 -11
- package/Editor/Utils.meta +8 -8
- package/Editor/WShowIfPropertyDrawer.cs +63 -63
- 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 +177 -177
- 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 +209 -209
- package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
- package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
- package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
- package/Runtime/Core/Attributes/ParentComponent.cs +185 -185
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +117 -117
- 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/WShowIfAttribute.cs +16 -16
- 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 +153 -153
- package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
- package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/KDTree.cs +292 -292
- package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/QuadTree.cs +287 -287
- package/Runtime/Core/DataStructure/RTree.cs +346 -346
- package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
- package/Runtime/Core/DataStructure/TimedCache.cs +66 -66
- package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
- package/Runtime/Core/Extension/AsyncOperationExtensions.cs +110 -108
- package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
- package/Runtime/Core/Extension/ColorExtensions.cs +629 -629
- package/Runtime/Core/Extension/DictionaryExtensions.cs +279 -279
- package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
- package/Runtime/Core/Extension/EnumExtensions.cs +37 -37
- package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
- package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
- package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
- package/Runtime/Core/Extension/IListExtensions.cs +106 -106
- package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
- package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
- package/Runtime/Core/Extension/SerializedPropertyExtensions.cs +157 -157
- package/Runtime/Core/Extension/StringExtensions.cs +151 -151
- package/Runtime/Core/Extension/UnityExtensions.cs +1608 -1608
- 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/FormattingHelpers.cs +32 -32
- 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 +769 -769
- 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 +189 -189
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials.meta +2 -2
- package/Runtime/Core/Helper/ReflectionHelpers.cs +452 -452
- package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/SceneHelper.cs +209 -213
- package/Runtime/Core/Helper/SpriteHelpers.cs +41 -41
- 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/UnityMainThreadDispatcher.cs +82 -80
- 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 +585 -585
- package/Runtime/Core/Random/DotNetRandom.cs +54 -54
- package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
- package/Runtime/Core/Random/IRandom.cs +161 -161
- package/Runtime/Core/Random/LinearCongruentialGenerator.cs +49 -49
- 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 +52 -52
- package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
- package/Runtime/Core/Random/XorShiroRandom.cs +119 -119
- package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
- package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
- package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +37 -37
- package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +218 -218
- package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +28 -28
- package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
- package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
- package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
- package/Runtime/Core/Serialization/Serializer.cs +195 -195
- package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +113 -113
- 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 +33 -33
- 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/DeferredDisposalResult.cs +23 -23
- 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 +69 -69
- package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
- package/Runtime/Utils/SetTextureImportData.cs +69 -69
- package/Runtime/Utils/SpriteRendererMetadata.cs +374 -374
- 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/RelationalComponentTesterComplex.cs +34 -34
- package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs.meta +2 -2
- package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +40 -40
- 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/EnumExtensionTests.cs +128 -128
- package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/IListExtensionTests.cs +104 -104
- 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/FormattingHelperTests.cs +129 -129
- package/Tests/Runtime/Helper/FormattingHelperTests.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/ReflectionHelperTests.cs +536 -536
- package/Tests/Runtime/Helper/SceneHelperTests.cs +94 -94
- 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 +157 -157
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +61 -61
- 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/LinearCongruentialGeneratorTests.cs +12 -12
- 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 +156 -156
- 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,97 +1,97 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Random
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
|
|
5
|
-
public struct NativePcgRandom
|
|
6
|
-
{
|
|
7
|
-
private const uint HalfwayUint = uint.MaxValue / 2;
|
|
8
|
-
private const double MagicDouble = 4.6566128752458E-10;
|
|
9
|
-
private const float MagicFloat = 5.960465E-008F;
|
|
10
|
-
|
|
11
|
-
private readonly ulong _increment;
|
|
12
|
-
private ulong _state;
|
|
13
|
-
|
|
14
|
-
public NativePcgRandom(Guid seed)
|
|
15
|
-
{
|
|
16
|
-
byte[] guidArray = seed.ToByteArray();
|
|
17
|
-
_state = BitConverter.ToUInt64(guidArray, 0);
|
|
18
|
-
_increment = BitConverter.ToUInt64(guidArray, sizeof(ulong));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public NativePcgRandom(int seed)
|
|
22
|
-
{
|
|
23
|
-
_increment = 6554638469UL;
|
|
24
|
-
_state = unchecked((ulong)seed);
|
|
25
|
-
_increment = NextUlong();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
public uint NextUint()
|
|
29
|
-
{
|
|
30
|
-
unchecked
|
|
31
|
-
{
|
|
32
|
-
ulong oldState = _state;
|
|
33
|
-
_state = oldState * 6364136223846793005UL + _increment;
|
|
34
|
-
uint xorShifted = (uint)(((oldState >> 18) ^ oldState) >> 27);
|
|
35
|
-
int rot = (int)(oldState >> 59);
|
|
36
|
-
return (xorShifted >> rot) | (xorShifted << (-rot & 31));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public int Next(int max)
|
|
41
|
-
{
|
|
42
|
-
if (max <= 0)
|
|
43
|
-
{
|
|
44
|
-
throw new ArgumentException($"Max {max} cannot be less-than or equal-to 0");
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return unchecked((int)NextUint(unchecked((uint)max)));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public uint NextUint(uint max)
|
|
51
|
-
{
|
|
52
|
-
/*
|
|
53
|
-
https://github.com/libevent/libevent/blob/3807a30b03ab42f2f503f2db62b1ef5876e2be80/arc4random.c#L531
|
|
54
|
-
|
|
55
|
-
http://cs.stackexchange.com/questions/570/generating-uniformly-distributed-random-numbers-using-a-coin
|
|
56
|
-
Generates a uniform random number within the bound, avoiding modulo bias
|
|
57
|
-
*/
|
|
58
|
-
uint threshold = unchecked((uint)((0x100000000UL - max) % max));
|
|
59
|
-
while (true)
|
|
60
|
-
{
|
|
61
|
-
uint randomValue = NextUint();
|
|
62
|
-
if (threshold <= randomValue)
|
|
63
|
-
{
|
|
64
|
-
return randomValue % max;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
public long NextLong()
|
|
70
|
-
{
|
|
71
|
-
uint upper = NextUint();
|
|
72
|
-
uint lower = NextUint();
|
|
73
|
-
// Mix things up a little
|
|
74
|
-
if (NextBool())
|
|
75
|
-
{
|
|
76
|
-
return unchecked((long)((ulong)upper << 32) | lower);
|
|
77
|
-
}
|
|
78
|
-
return unchecked((long)((ulong)lower << 32) | upper);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
public ulong NextUlong()
|
|
82
|
-
{
|
|
83
|
-
return unchecked((ulong)NextLong());
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public bool NextBool()
|
|
87
|
-
{
|
|
88
|
-
return NextUint() < HalfwayUint;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
public float NextFloat()
|
|
92
|
-
{
|
|
93
|
-
uint floatAsInt = NextUint();
|
|
94
|
-
return (floatAsInt >> 8) * MagicFloat;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Random
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
|
|
5
|
+
public struct NativePcgRandom
|
|
6
|
+
{
|
|
7
|
+
private const uint HalfwayUint = uint.MaxValue / 2;
|
|
8
|
+
private const double MagicDouble = 4.6566128752458E-10;
|
|
9
|
+
private const float MagicFloat = 5.960465E-008F;
|
|
10
|
+
|
|
11
|
+
private readonly ulong _increment;
|
|
12
|
+
private ulong _state;
|
|
13
|
+
|
|
14
|
+
public NativePcgRandom(Guid seed)
|
|
15
|
+
{
|
|
16
|
+
byte[] guidArray = seed.ToByteArray();
|
|
17
|
+
_state = BitConverter.ToUInt64(guidArray, 0);
|
|
18
|
+
_increment = BitConverter.ToUInt64(guidArray, sizeof(ulong));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public NativePcgRandom(int seed)
|
|
22
|
+
{
|
|
23
|
+
_increment = 6554638469UL;
|
|
24
|
+
_state = unchecked((ulong)seed);
|
|
25
|
+
_increment = NextUlong();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public uint NextUint()
|
|
29
|
+
{
|
|
30
|
+
unchecked
|
|
31
|
+
{
|
|
32
|
+
ulong oldState = _state;
|
|
33
|
+
_state = oldState * 6364136223846793005UL + _increment;
|
|
34
|
+
uint xorShifted = (uint)(((oldState >> 18) ^ oldState) >> 27);
|
|
35
|
+
int rot = (int)(oldState >> 59);
|
|
36
|
+
return (xorShifted >> rot) | (xorShifted << (-rot & 31));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public int Next(int max)
|
|
41
|
+
{
|
|
42
|
+
if (max <= 0)
|
|
43
|
+
{
|
|
44
|
+
throw new ArgumentException($"Max {max} cannot be less-than or equal-to 0");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return unchecked((int)NextUint(unchecked((uint)max)));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public uint NextUint(uint max)
|
|
51
|
+
{
|
|
52
|
+
/*
|
|
53
|
+
https://github.com/libevent/libevent/blob/3807a30b03ab42f2f503f2db62b1ef5876e2be80/arc4random.c#L531
|
|
54
|
+
|
|
55
|
+
http://cs.stackexchange.com/questions/570/generating-uniformly-distributed-random-numbers-using-a-coin
|
|
56
|
+
Generates a uniform random number within the bound, avoiding modulo bias
|
|
57
|
+
*/
|
|
58
|
+
uint threshold = unchecked((uint)((0x100000000UL - max) % max));
|
|
59
|
+
while (true)
|
|
60
|
+
{
|
|
61
|
+
uint randomValue = NextUint();
|
|
62
|
+
if (threshold <= randomValue)
|
|
63
|
+
{
|
|
64
|
+
return randomValue % max;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public long NextLong()
|
|
70
|
+
{
|
|
71
|
+
uint upper = NextUint();
|
|
72
|
+
uint lower = NextUint();
|
|
73
|
+
// Mix things up a little
|
|
74
|
+
if (NextBool())
|
|
75
|
+
{
|
|
76
|
+
return unchecked((long)((ulong)upper << 32) | lower);
|
|
77
|
+
}
|
|
78
|
+
return unchecked((long)((ulong)lower << 32) | upper);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public ulong NextUlong()
|
|
82
|
+
{
|
|
83
|
+
return unchecked((ulong)NextLong());
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public bool NextBool()
|
|
87
|
+
{
|
|
88
|
+
return NextUint() < HalfwayUint;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public float NextFloat()
|
|
92
|
+
{
|
|
93
|
+
uint floatAsInt = NextUint();
|
|
94
|
+
return (floatAsInt >> 8) * MagicFloat;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Random
|
|
2
|
-
{
|
|
3
|
-
public static class PRNG
|
|
4
|
-
{
|
|
5
|
-
public static IRandom Instance => PcgRandom.Instance;
|
|
6
|
-
}
|
|
7
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Random
|
|
2
|
+
{
|
|
3
|
+
public static class PRNG
|
|
4
|
+
{
|
|
5
|
+
public static IRandom Instance => PcgRandom.Instance;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 5041bafe46dc450bb37153e394011636
|
|
1
|
+
fileFormatVersion: 2
|
|
2
|
+
guid: 5041bafe46dc450bb37153e394011636
|
|
3
3
|
timeCreated: 1732564259
|
|
@@ -1,149 +1,149 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Random
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Runtime.Serialization;
|
|
5
|
-
using System.Text.Json.Serialization;
|
|
6
|
-
|
|
7
|
-
/// <summary>
|
|
8
|
-
/// Implementation based off of the reference PCG Random, found here: https://www.pcg-random.org/index.html
|
|
9
|
-
/// </summary>
|
|
10
|
-
[Serializable]
|
|
11
|
-
[DataContract]
|
|
12
|
-
public sealed class PcgRandom
|
|
13
|
-
: AbstractRandom,
|
|
14
|
-
IEquatable<PcgRandom>,
|
|
15
|
-
IComparable,
|
|
16
|
-
IComparable<PcgRandom>
|
|
17
|
-
{
|
|
18
|
-
public static PcgRandom Instance => ThreadLocalRandom<PcgRandom>.Instance;
|
|
19
|
-
|
|
20
|
-
public override RandomState InternalState => new(_state, _increment, _cachedGaussian);
|
|
21
|
-
|
|
22
|
-
internal readonly ulong _increment;
|
|
23
|
-
|
|
24
|
-
internal ulong _state;
|
|
25
|
-
|
|
26
|
-
public PcgRandom()
|
|
27
|
-
: this(Guid.NewGuid()) { }
|
|
28
|
-
|
|
29
|
-
public PcgRandom(Guid guid)
|
|
30
|
-
{
|
|
31
|
-
byte[] guidArray = guid.ToByteArray();
|
|
32
|
-
_state = BitConverter.ToUInt64(guidArray, 0);
|
|
33
|
-
_increment = BitConverter.ToUInt64(guidArray, sizeof(ulong));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
[JsonConstructor]
|
|
37
|
-
public PcgRandom(RandomState internalState)
|
|
38
|
-
{
|
|
39
|
-
_state = internalState.State1;
|
|
40
|
-
_increment = internalState.State2;
|
|
41
|
-
_cachedGaussian = internalState.Gaussian;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
public PcgRandom(ulong increment, ulong state)
|
|
45
|
-
{
|
|
46
|
-
_increment = increment;
|
|
47
|
-
_state = state;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
public PcgRandom(long seed)
|
|
51
|
-
{
|
|
52
|
-
// Start with a nice prime
|
|
53
|
-
_increment = 6554638469UL;
|
|
54
|
-
_state = unchecked((ulong)seed);
|
|
55
|
-
_increment = NextUlong();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
public override uint NextUint()
|
|
59
|
-
{
|
|
60
|
-
unchecked
|
|
61
|
-
{
|
|
62
|
-
ulong oldState = _state;
|
|
63
|
-
_state = oldState * 6364136223846793005UL + _increment;
|
|
64
|
-
uint xorShifted = (uint)(((oldState >> 18) ^ oldState) >> 27);
|
|
65
|
-
int rot = (int)(oldState >> 59);
|
|
66
|
-
return (xorShifted >> rot) | (xorShifted << (-rot & 31));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
public bool Equals(PcgRandom other)
|
|
71
|
-
{
|
|
72
|
-
if (ReferenceEquals(other, null))
|
|
73
|
-
{
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// ReSharper disable once CompareOfFloatsByEqualityOperator
|
|
78
|
-
return _increment == other._increment
|
|
79
|
-
&& _state == other._state
|
|
80
|
-
&& _cachedGaussian == other._cachedGaussian;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
public override bool Equals(object obj)
|
|
84
|
-
{
|
|
85
|
-
return Equals(obj as PcgRandom);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
public int CompareTo(PcgRandom other)
|
|
89
|
-
{
|
|
90
|
-
if (ReferenceEquals(other, null))
|
|
91
|
-
{
|
|
92
|
-
return -1;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (_increment == other._increment)
|
|
96
|
-
{
|
|
97
|
-
if (_state == other._state)
|
|
98
|
-
{
|
|
99
|
-
return 0;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (_state < other._state)
|
|
103
|
-
{
|
|
104
|
-
return -1;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return 1;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
if (_increment < other._increment)
|
|
111
|
-
{
|
|
112
|
-
return -1;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (_cachedGaussian.HasValue != other._cachedGaussian.HasValue)
|
|
116
|
-
{
|
|
117
|
-
return _cachedGaussian.HasValue ? -1 : 1;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (!_cachedGaussian.HasValue)
|
|
121
|
-
{
|
|
122
|
-
return 0;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// ReSharper disable once PossibleInvalidOperationException
|
|
126
|
-
return _cachedGaussian.Value.CompareTo(other._cachedGaussian.Value);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
public int CompareTo(object obj)
|
|
130
|
-
{
|
|
131
|
-
return CompareTo(obj as PcgRandom);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
public override int GetHashCode()
|
|
135
|
-
{
|
|
136
|
-
return _increment.GetHashCode();
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
public override string ToString()
|
|
140
|
-
{
|
|
141
|
-
return $"{{\"Increment\": {_increment}, \"State\": {_state}}}";
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
public override IRandom Copy()
|
|
145
|
-
{
|
|
146
|
-
return new PcgRandom(InternalState);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Random
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Runtime.Serialization;
|
|
5
|
+
using System.Text.Json.Serialization;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Implementation based off of the reference PCG Random, found here: https://www.pcg-random.org/index.html
|
|
9
|
+
/// </summary>
|
|
10
|
+
[Serializable]
|
|
11
|
+
[DataContract]
|
|
12
|
+
public sealed class PcgRandom
|
|
13
|
+
: AbstractRandom,
|
|
14
|
+
IEquatable<PcgRandom>,
|
|
15
|
+
IComparable,
|
|
16
|
+
IComparable<PcgRandom>
|
|
17
|
+
{
|
|
18
|
+
public static PcgRandom Instance => ThreadLocalRandom<PcgRandom>.Instance;
|
|
19
|
+
|
|
20
|
+
public override RandomState InternalState => new(_state, _increment, _cachedGaussian);
|
|
21
|
+
|
|
22
|
+
internal readonly ulong _increment;
|
|
23
|
+
|
|
24
|
+
internal ulong _state;
|
|
25
|
+
|
|
26
|
+
public PcgRandom()
|
|
27
|
+
: this(Guid.NewGuid()) { }
|
|
28
|
+
|
|
29
|
+
public PcgRandom(Guid guid)
|
|
30
|
+
{
|
|
31
|
+
byte[] guidArray = guid.ToByteArray();
|
|
32
|
+
_state = BitConverter.ToUInt64(guidArray, 0);
|
|
33
|
+
_increment = BitConverter.ToUInt64(guidArray, sizeof(ulong));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
[JsonConstructor]
|
|
37
|
+
public PcgRandom(RandomState internalState)
|
|
38
|
+
{
|
|
39
|
+
_state = internalState.State1;
|
|
40
|
+
_increment = internalState.State2;
|
|
41
|
+
_cachedGaussian = internalState.Gaussian;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public PcgRandom(ulong increment, ulong state)
|
|
45
|
+
{
|
|
46
|
+
_increment = increment;
|
|
47
|
+
_state = state;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public PcgRandom(long seed)
|
|
51
|
+
{
|
|
52
|
+
// Start with a nice prime
|
|
53
|
+
_increment = 6554638469UL;
|
|
54
|
+
_state = unchecked((ulong)seed);
|
|
55
|
+
_increment = NextUlong();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public override uint NextUint()
|
|
59
|
+
{
|
|
60
|
+
unchecked
|
|
61
|
+
{
|
|
62
|
+
ulong oldState = _state;
|
|
63
|
+
_state = oldState * 6364136223846793005UL + _increment;
|
|
64
|
+
uint xorShifted = (uint)(((oldState >> 18) ^ oldState) >> 27);
|
|
65
|
+
int rot = (int)(oldState >> 59);
|
|
66
|
+
return (xorShifted >> rot) | (xorShifted << (-rot & 31));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public bool Equals(PcgRandom other)
|
|
71
|
+
{
|
|
72
|
+
if (ReferenceEquals(other, null))
|
|
73
|
+
{
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ReSharper disable once CompareOfFloatsByEqualityOperator
|
|
78
|
+
return _increment == other._increment
|
|
79
|
+
&& _state == other._state
|
|
80
|
+
&& _cachedGaussian == other._cachedGaussian;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public override bool Equals(object obj)
|
|
84
|
+
{
|
|
85
|
+
return Equals(obj as PcgRandom);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public int CompareTo(PcgRandom other)
|
|
89
|
+
{
|
|
90
|
+
if (ReferenceEquals(other, null))
|
|
91
|
+
{
|
|
92
|
+
return -1;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (_increment == other._increment)
|
|
96
|
+
{
|
|
97
|
+
if (_state == other._state)
|
|
98
|
+
{
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (_state < other._state)
|
|
103
|
+
{
|
|
104
|
+
return -1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return 1;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (_increment < other._increment)
|
|
111
|
+
{
|
|
112
|
+
return -1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (_cachedGaussian.HasValue != other._cachedGaussian.HasValue)
|
|
116
|
+
{
|
|
117
|
+
return _cachedGaussian.HasValue ? -1 : 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (!_cachedGaussian.HasValue)
|
|
121
|
+
{
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ReSharper disable once PossibleInvalidOperationException
|
|
126
|
+
return _cachedGaussian.Value.CompareTo(other._cachedGaussian.Value);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public int CompareTo(object obj)
|
|
130
|
+
{
|
|
131
|
+
return CompareTo(obj as PcgRandom);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public override int GetHashCode()
|
|
135
|
+
{
|
|
136
|
+
return _increment.GetHashCode();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public override string ToString()
|
|
140
|
+
{
|
|
141
|
+
return $"{{\"Increment\": {_increment}, \"State\": {_state}}}";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public override IRandom Copy()
|
|
145
|
+
{
|
|
146
|
+
return new PcgRandom(InternalState);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|