com.wallstop-studios.unity-helpers 2.0.0-rc57 → 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 -110
- 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 -82
- 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,374 +1,374 @@
|
|
|
1
|
-
namespace UnityHelpers.Utils
|
|
2
|
-
{
|
|
3
|
-
using System.Collections.Generic;
|
|
4
|
-
using System.Linq;
|
|
5
|
-
using Core.Attributes;
|
|
6
|
-
using UnityEngine;
|
|
7
|
-
|
|
8
|
-
/// <summary>
|
|
9
|
-
/// Keeps stack-like track of Colors and Materials of SpriteRenderers
|
|
10
|
-
/// </summary>
|
|
11
|
-
[DisallowMultipleComponent]
|
|
12
|
-
public sealed class SpriteRendererMetadata : MonoBehaviour
|
|
13
|
-
{
|
|
14
|
-
private bool Enabled => enabled && gameObject.activeInHierarchy;
|
|
15
|
-
|
|
16
|
-
private readonly List<(Component component, Color color)> _colorStack = new();
|
|
17
|
-
private readonly List<(Component component, Material material)> _materialStack = new();
|
|
18
|
-
|
|
19
|
-
private readonly List<(Component component, Color color)> _colorStackCache = new();
|
|
20
|
-
private readonly List<(Component component, Material material)> _materialStackCache = new();
|
|
21
|
-
|
|
22
|
-
public Color OriginalColor => _colorStack[0].color;
|
|
23
|
-
|
|
24
|
-
public Color CurrentColor => _colorStack[^1].color;
|
|
25
|
-
|
|
26
|
-
public Material OriginalMaterial => _materialStack[0].material;
|
|
27
|
-
|
|
28
|
-
public Material CurrentMaterial => _materialStack[^1].material;
|
|
29
|
-
|
|
30
|
-
public IEnumerable<Material> Materials =>
|
|
31
|
-
_materialStack.Select(entry => entry.material).Reverse();
|
|
32
|
-
|
|
33
|
-
public IEnumerable<Color> Colors => _colorStack.Select(entry => entry.color).Reverse();
|
|
34
|
-
|
|
35
|
-
[SiblingComponent]
|
|
36
|
-
[SerializeField]
|
|
37
|
-
private SpriteRenderer _spriteRenderer;
|
|
38
|
-
|
|
39
|
-
private bool _enabled;
|
|
40
|
-
|
|
41
|
-
public void PushColor(Component component, Color color, bool force = false)
|
|
42
|
-
{
|
|
43
|
-
if (component == this)
|
|
44
|
-
{
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (!force && !Enabled)
|
|
49
|
-
{
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
InternalPushColor(component, color);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private void InternalPushColor(Component component, Color color)
|
|
57
|
-
{
|
|
58
|
-
RemoveColor(component);
|
|
59
|
-
_colorStack.Add((component, color));
|
|
60
|
-
_spriteRenderer.color = CurrentColor;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public void PushBackColor(Component component, Color color, bool force = false)
|
|
64
|
-
{
|
|
65
|
-
if (component == this)
|
|
66
|
-
{
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (!force && !Enabled)
|
|
71
|
-
{
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
RemoveColor(component);
|
|
76
|
-
_colorStack.Insert(1, (component, color));
|
|
77
|
-
_spriteRenderer.color = CurrentColor;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public void PopColor(Component component)
|
|
81
|
-
{
|
|
82
|
-
RemoveColor(component);
|
|
83
|
-
_spriteRenderer.color = CurrentColor;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public bool TryGetColor(Component component, out Color color)
|
|
87
|
-
{
|
|
88
|
-
foreach ((Component component, Color color) entry in _colorStack)
|
|
89
|
-
{
|
|
90
|
-
if (entry.component == component)
|
|
91
|
-
{
|
|
92
|
-
color = entry.color;
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
color = default;
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/// <summary>
|
|
102
|
-
/// Inserts a material as "first in the queue".
|
|
103
|
-
/// </summary>
|
|
104
|
-
/// <param name="component">Component that owns the material.</param>
|
|
105
|
-
/// <param name="material">Material to use.</param>
|
|
106
|
-
/// <param name="force">If true, overrides the enabled check.</param>
|
|
107
|
-
/// <returns>The instanced material, if possible.</returns>
|
|
108
|
-
public Material PushMaterial(Component component, Material material, bool force = false)
|
|
109
|
-
{
|
|
110
|
-
if (component == this)
|
|
111
|
-
{
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (!force && !Enabled)
|
|
116
|
-
{
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
#if UNITY_EDITOR
|
|
121
|
-
if (!Application.isPlaying)
|
|
122
|
-
{
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
#endif
|
|
126
|
-
return InternalPushMaterial(component, material);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
private Material InternalPushMaterial(Component component, Material material)
|
|
130
|
-
{
|
|
131
|
-
RemoveMaterial(component);
|
|
132
|
-
_spriteRenderer.material = material;
|
|
133
|
-
Material instanced = _spriteRenderer.material;
|
|
134
|
-
_materialStack.Add((component, instanced));
|
|
135
|
-
return instanced;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/// <summary>
|
|
139
|
-
/// Inserts a material as "last in the queue".
|
|
140
|
-
/// </summary>
|
|
141
|
-
/// <param name="component">Component that owns the material.</param>
|
|
142
|
-
/// <param name="material">Material to use.</param>
|
|
143
|
-
/// <param name="force">If true, overrides the enabled check.</param>
|
|
144
|
-
/// <returns>The instanced material, if possible.</returns>
|
|
145
|
-
public Material PushBackMaterial(Component component, Material material, bool force = false)
|
|
146
|
-
{
|
|
147
|
-
if (component == this)
|
|
148
|
-
{
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (!force && !Enabled)
|
|
153
|
-
{
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
#if UNITY_EDITOR
|
|
158
|
-
if (!Application.isPlaying)
|
|
159
|
-
{
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
#endif
|
|
163
|
-
|
|
164
|
-
RemoveMaterial(component);
|
|
165
|
-
Material instanced = material;
|
|
166
|
-
if (_materialStack.Count <= 1)
|
|
167
|
-
{
|
|
168
|
-
_spriteRenderer.material = material;
|
|
169
|
-
instanced = _spriteRenderer.material;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
_materialStack.Insert(1, (component, instanced));
|
|
173
|
-
return instanced;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
public void PopMaterial(Component component)
|
|
177
|
-
{
|
|
178
|
-
#if UNITY_EDITOR
|
|
179
|
-
if (!Application.isPlaying)
|
|
180
|
-
{
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
#endif
|
|
184
|
-
|
|
185
|
-
RemoveMaterial(component);
|
|
186
|
-
_spriteRenderer.material = CurrentMaterial;
|
|
187
|
-
Material instanced = _spriteRenderer.material;
|
|
188
|
-
Component currentComponent = _materialStack[^1].component;
|
|
189
|
-
_materialStack[^1] = (currentComponent, instanced);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
public bool TryGetMaterial(Component component, out Material material)
|
|
193
|
-
{
|
|
194
|
-
foreach ((Component component, Material material) entry in _materialStack)
|
|
195
|
-
{
|
|
196
|
-
if (entry.component == component)
|
|
197
|
-
{
|
|
198
|
-
material = entry.material;
|
|
199
|
-
return true;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
material = default;
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
private void Awake()
|
|
208
|
-
{
|
|
209
|
-
if (_spriteRenderer == null)
|
|
210
|
-
{
|
|
211
|
-
this.AssignSiblingComponents();
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
InternalPushColor(this, _spriteRenderer.color);
|
|
215
|
-
foreach ((Component component, Color color) entry in _colorStack)
|
|
216
|
-
{
|
|
217
|
-
_colorStackCache.Add(entry);
|
|
218
|
-
}
|
|
219
|
-
_ = InternalPushMaterial(this, _spriteRenderer.material);
|
|
220
|
-
foreach ((Component component, Material material) entry in _materialStack)
|
|
221
|
-
{
|
|
222
|
-
_materialStackCache.Add(entry);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
private void OnEnable()
|
|
227
|
-
{
|
|
228
|
-
// Ignore the OnEnable call from when the object is first initialized
|
|
229
|
-
if (!_enabled)
|
|
230
|
-
{
|
|
231
|
-
_enabled = true;
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
_colorStack.Clear();
|
|
236
|
-
if (0 < _colorStackCache.Count)
|
|
237
|
-
{
|
|
238
|
-
_colorStack.Add(_colorStackCache[0]);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
List<(Component component, Color color)> colorBuffer = Buffers<(
|
|
242
|
-
Component component,
|
|
243
|
-
Color color
|
|
244
|
-
)>.List;
|
|
245
|
-
colorBuffer.Clear();
|
|
246
|
-
foreach ((Component component, Color color) entry in _colorStackCache)
|
|
247
|
-
{
|
|
248
|
-
colorBuffer.Add(entry);
|
|
249
|
-
}
|
|
250
|
-
for (int i = 1; i < colorBuffer.Count; ++i)
|
|
251
|
-
{
|
|
252
|
-
(Component component, Color color) entry = colorBuffer[i];
|
|
253
|
-
PushColor(entry.component, entry.color, force: true);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
_materialStack.Clear();
|
|
257
|
-
if (0 < _materialStackCache.Count)
|
|
258
|
-
{
|
|
259
|
-
_materialStack.Add(_materialStackCache[0]);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
List<(Component component, Material material)> materialBuffer = Buffers<(
|
|
263
|
-
Component component,
|
|
264
|
-
Material material
|
|
265
|
-
)>.List;
|
|
266
|
-
materialBuffer.Clear();
|
|
267
|
-
foreach ((Component component, Material material) entry in _materialStackCache)
|
|
268
|
-
{
|
|
269
|
-
materialBuffer.Add(entry);
|
|
270
|
-
}
|
|
271
|
-
for (int i = 1; i < materialBuffer.Count; ++i)
|
|
272
|
-
{
|
|
273
|
-
(Component component, Material material) entry = materialBuffer[i];
|
|
274
|
-
PushMaterial(entry.component, entry.material, force: true);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
private void OnDisable()
|
|
279
|
-
{
|
|
280
|
-
List<(Component component, Color color)> colorBuffer = Buffers<(
|
|
281
|
-
Component component,
|
|
282
|
-
Color color
|
|
283
|
-
)>.List;
|
|
284
|
-
colorBuffer.Clear();
|
|
285
|
-
foreach ((Component component, Color color) entry in _colorStack)
|
|
286
|
-
{
|
|
287
|
-
colorBuffer.Add(entry);
|
|
288
|
-
}
|
|
289
|
-
for (int i = colorBuffer.Count - 1; 1 <= i; --i)
|
|
290
|
-
{
|
|
291
|
-
PopColor(colorBuffer[i].component);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
_colorStackCache.Clear();
|
|
295
|
-
foreach ((Component component, Color color) entry in colorBuffer)
|
|
296
|
-
{
|
|
297
|
-
_colorStackCache.Add(entry);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
List<(Component component, Material material)> materialBuffer = Buffers<(
|
|
301
|
-
Component component,
|
|
302
|
-
Material material
|
|
303
|
-
)>.List;
|
|
304
|
-
materialBuffer.Clear();
|
|
305
|
-
foreach ((Component component, Material material) entry in _materialStack)
|
|
306
|
-
{
|
|
307
|
-
materialBuffer.Add(entry);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
for (int i = materialBuffer.Count - 1; 1 <= i; --i)
|
|
311
|
-
{
|
|
312
|
-
PopMaterial(materialBuffer[i].component);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
_materialStackCache.Clear();
|
|
316
|
-
foreach ((Component component, Material material) entry in materialBuffer)
|
|
317
|
-
{
|
|
318
|
-
_materialStackCache.Add(entry);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
private void RemoveColor(Component component)
|
|
323
|
-
{
|
|
324
|
-
if (component == this)
|
|
325
|
-
{
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
for (int i = _colorStack.Count - 1; 0 <= i; --i)
|
|
330
|
-
{
|
|
331
|
-
(Component component, Color color) stackEntry = _colorStack[i];
|
|
332
|
-
if (stackEntry.component == component || stackEntry.component == null)
|
|
333
|
-
{
|
|
334
|
-
_colorStack.RemoveAt(i);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
for (int i = _colorStackCache.Count - 1; 0 <= i; --i)
|
|
339
|
-
{
|
|
340
|
-
(Component component, Color color) stackEntry = _colorStackCache[i];
|
|
341
|
-
if (stackEntry.component == component || stackEntry.component == null)
|
|
342
|
-
{
|
|
343
|
-
_colorStackCache.RemoveAt(i);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
private void RemoveMaterial(Component component)
|
|
349
|
-
{
|
|
350
|
-
if (component == this)
|
|
351
|
-
{
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
for (int i = _materialStack.Count - 1; 0 <= i; --i)
|
|
356
|
-
{
|
|
357
|
-
(Component component, Material material) stackEntry = _materialStack[i];
|
|
358
|
-
if (stackEntry.component == component || stackEntry.component == null)
|
|
359
|
-
{
|
|
360
|
-
_materialStack.RemoveAt(i);
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
for (int i = _materialStackCache.Count - 1; 0 <= i; --i)
|
|
365
|
-
{
|
|
366
|
-
(Component component, Material material) stackEntry = _materialStackCache[i];
|
|
367
|
-
if (stackEntry.component == component || stackEntry.component == null)
|
|
368
|
-
{
|
|
369
|
-
_materialStackCache.RemoveAt(i);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
}
|
|
1
|
+
namespace UnityHelpers.Utils
|
|
2
|
+
{
|
|
3
|
+
using System.Collections.Generic;
|
|
4
|
+
using System.Linq;
|
|
5
|
+
using Core.Attributes;
|
|
6
|
+
using UnityEngine;
|
|
7
|
+
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Keeps stack-like track of Colors and Materials of SpriteRenderers
|
|
10
|
+
/// </summary>
|
|
11
|
+
[DisallowMultipleComponent]
|
|
12
|
+
public sealed class SpriteRendererMetadata : MonoBehaviour
|
|
13
|
+
{
|
|
14
|
+
private bool Enabled => enabled && gameObject.activeInHierarchy;
|
|
15
|
+
|
|
16
|
+
private readonly List<(Component component, Color color)> _colorStack = new();
|
|
17
|
+
private readonly List<(Component component, Material material)> _materialStack = new();
|
|
18
|
+
|
|
19
|
+
private readonly List<(Component component, Color color)> _colorStackCache = new();
|
|
20
|
+
private readonly List<(Component component, Material material)> _materialStackCache = new();
|
|
21
|
+
|
|
22
|
+
public Color OriginalColor => _colorStack[0].color;
|
|
23
|
+
|
|
24
|
+
public Color CurrentColor => _colorStack[^1].color;
|
|
25
|
+
|
|
26
|
+
public Material OriginalMaterial => _materialStack[0].material;
|
|
27
|
+
|
|
28
|
+
public Material CurrentMaterial => _materialStack[^1].material;
|
|
29
|
+
|
|
30
|
+
public IEnumerable<Material> Materials =>
|
|
31
|
+
_materialStack.Select(entry => entry.material).Reverse();
|
|
32
|
+
|
|
33
|
+
public IEnumerable<Color> Colors => _colorStack.Select(entry => entry.color).Reverse();
|
|
34
|
+
|
|
35
|
+
[SiblingComponent]
|
|
36
|
+
[SerializeField]
|
|
37
|
+
private SpriteRenderer _spriteRenderer;
|
|
38
|
+
|
|
39
|
+
private bool _enabled;
|
|
40
|
+
|
|
41
|
+
public void PushColor(Component component, Color color, bool force = false)
|
|
42
|
+
{
|
|
43
|
+
if (component == this)
|
|
44
|
+
{
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!force && !Enabled)
|
|
49
|
+
{
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
InternalPushColor(component, color);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private void InternalPushColor(Component component, Color color)
|
|
57
|
+
{
|
|
58
|
+
RemoveColor(component);
|
|
59
|
+
_colorStack.Add((component, color));
|
|
60
|
+
_spriteRenderer.color = CurrentColor;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public void PushBackColor(Component component, Color color, bool force = false)
|
|
64
|
+
{
|
|
65
|
+
if (component == this)
|
|
66
|
+
{
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (!force && !Enabled)
|
|
71
|
+
{
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
RemoveColor(component);
|
|
76
|
+
_colorStack.Insert(1, (component, color));
|
|
77
|
+
_spriteRenderer.color = CurrentColor;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public void PopColor(Component component)
|
|
81
|
+
{
|
|
82
|
+
RemoveColor(component);
|
|
83
|
+
_spriteRenderer.color = CurrentColor;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public bool TryGetColor(Component component, out Color color)
|
|
87
|
+
{
|
|
88
|
+
foreach ((Component component, Color color) entry in _colorStack)
|
|
89
|
+
{
|
|
90
|
+
if (entry.component == component)
|
|
91
|
+
{
|
|
92
|
+
color = entry.color;
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
color = default;
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/// <summary>
|
|
102
|
+
/// Inserts a material as "first in the queue".
|
|
103
|
+
/// </summary>
|
|
104
|
+
/// <param name="component">Component that owns the material.</param>
|
|
105
|
+
/// <param name="material">Material to use.</param>
|
|
106
|
+
/// <param name="force">If true, overrides the enabled check.</param>
|
|
107
|
+
/// <returns>The instanced material, if possible.</returns>
|
|
108
|
+
public Material PushMaterial(Component component, Material material, bool force = false)
|
|
109
|
+
{
|
|
110
|
+
if (component == this)
|
|
111
|
+
{
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (!force && !Enabled)
|
|
116
|
+
{
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
#if UNITY_EDITOR
|
|
121
|
+
if (!Application.isPlaying)
|
|
122
|
+
{
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
#endif
|
|
126
|
+
return InternalPushMaterial(component, material);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private Material InternalPushMaterial(Component component, Material material)
|
|
130
|
+
{
|
|
131
|
+
RemoveMaterial(component);
|
|
132
|
+
_spriteRenderer.material = material;
|
|
133
|
+
Material instanced = _spriteRenderer.material;
|
|
134
|
+
_materialStack.Add((component, instanced));
|
|
135
|
+
return instanced;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// <summary>
|
|
139
|
+
/// Inserts a material as "last in the queue".
|
|
140
|
+
/// </summary>
|
|
141
|
+
/// <param name="component">Component that owns the material.</param>
|
|
142
|
+
/// <param name="material">Material to use.</param>
|
|
143
|
+
/// <param name="force">If true, overrides the enabled check.</param>
|
|
144
|
+
/// <returns>The instanced material, if possible.</returns>
|
|
145
|
+
public Material PushBackMaterial(Component component, Material material, bool force = false)
|
|
146
|
+
{
|
|
147
|
+
if (component == this)
|
|
148
|
+
{
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!force && !Enabled)
|
|
153
|
+
{
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#if UNITY_EDITOR
|
|
158
|
+
if (!Application.isPlaying)
|
|
159
|
+
{
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
#endif
|
|
163
|
+
|
|
164
|
+
RemoveMaterial(component);
|
|
165
|
+
Material instanced = material;
|
|
166
|
+
if (_materialStack.Count <= 1)
|
|
167
|
+
{
|
|
168
|
+
_spriteRenderer.material = material;
|
|
169
|
+
instanced = _spriteRenderer.material;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
_materialStack.Insert(1, (component, instanced));
|
|
173
|
+
return instanced;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
public void PopMaterial(Component component)
|
|
177
|
+
{
|
|
178
|
+
#if UNITY_EDITOR
|
|
179
|
+
if (!Application.isPlaying)
|
|
180
|
+
{
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
#endif
|
|
184
|
+
|
|
185
|
+
RemoveMaterial(component);
|
|
186
|
+
_spriteRenderer.material = CurrentMaterial;
|
|
187
|
+
Material instanced = _spriteRenderer.material;
|
|
188
|
+
Component currentComponent = _materialStack[^1].component;
|
|
189
|
+
_materialStack[^1] = (currentComponent, instanced);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
public bool TryGetMaterial(Component component, out Material material)
|
|
193
|
+
{
|
|
194
|
+
foreach ((Component component, Material material) entry in _materialStack)
|
|
195
|
+
{
|
|
196
|
+
if (entry.component == component)
|
|
197
|
+
{
|
|
198
|
+
material = entry.material;
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
material = default;
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private void Awake()
|
|
208
|
+
{
|
|
209
|
+
if (_spriteRenderer == null)
|
|
210
|
+
{
|
|
211
|
+
this.AssignSiblingComponents();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
InternalPushColor(this, _spriteRenderer.color);
|
|
215
|
+
foreach ((Component component, Color color) entry in _colorStack)
|
|
216
|
+
{
|
|
217
|
+
_colorStackCache.Add(entry);
|
|
218
|
+
}
|
|
219
|
+
_ = InternalPushMaterial(this, _spriteRenderer.material);
|
|
220
|
+
foreach ((Component component, Material material) entry in _materialStack)
|
|
221
|
+
{
|
|
222
|
+
_materialStackCache.Add(entry);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private void OnEnable()
|
|
227
|
+
{
|
|
228
|
+
// Ignore the OnEnable call from when the object is first initialized
|
|
229
|
+
if (!_enabled)
|
|
230
|
+
{
|
|
231
|
+
_enabled = true;
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
_colorStack.Clear();
|
|
236
|
+
if (0 < _colorStackCache.Count)
|
|
237
|
+
{
|
|
238
|
+
_colorStack.Add(_colorStackCache[0]);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
List<(Component component, Color color)> colorBuffer = Buffers<(
|
|
242
|
+
Component component,
|
|
243
|
+
Color color
|
|
244
|
+
)>.List;
|
|
245
|
+
colorBuffer.Clear();
|
|
246
|
+
foreach ((Component component, Color color) entry in _colorStackCache)
|
|
247
|
+
{
|
|
248
|
+
colorBuffer.Add(entry);
|
|
249
|
+
}
|
|
250
|
+
for (int i = 1; i < colorBuffer.Count; ++i)
|
|
251
|
+
{
|
|
252
|
+
(Component component, Color color) entry = colorBuffer[i];
|
|
253
|
+
PushColor(entry.component, entry.color, force: true);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
_materialStack.Clear();
|
|
257
|
+
if (0 < _materialStackCache.Count)
|
|
258
|
+
{
|
|
259
|
+
_materialStack.Add(_materialStackCache[0]);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
List<(Component component, Material material)> materialBuffer = Buffers<(
|
|
263
|
+
Component component,
|
|
264
|
+
Material material
|
|
265
|
+
)>.List;
|
|
266
|
+
materialBuffer.Clear();
|
|
267
|
+
foreach ((Component component, Material material) entry in _materialStackCache)
|
|
268
|
+
{
|
|
269
|
+
materialBuffer.Add(entry);
|
|
270
|
+
}
|
|
271
|
+
for (int i = 1; i < materialBuffer.Count; ++i)
|
|
272
|
+
{
|
|
273
|
+
(Component component, Material material) entry = materialBuffer[i];
|
|
274
|
+
PushMaterial(entry.component, entry.material, force: true);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private void OnDisable()
|
|
279
|
+
{
|
|
280
|
+
List<(Component component, Color color)> colorBuffer = Buffers<(
|
|
281
|
+
Component component,
|
|
282
|
+
Color color
|
|
283
|
+
)>.List;
|
|
284
|
+
colorBuffer.Clear();
|
|
285
|
+
foreach ((Component component, Color color) entry in _colorStack)
|
|
286
|
+
{
|
|
287
|
+
colorBuffer.Add(entry);
|
|
288
|
+
}
|
|
289
|
+
for (int i = colorBuffer.Count - 1; 1 <= i; --i)
|
|
290
|
+
{
|
|
291
|
+
PopColor(colorBuffer[i].component);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
_colorStackCache.Clear();
|
|
295
|
+
foreach ((Component component, Color color) entry in colorBuffer)
|
|
296
|
+
{
|
|
297
|
+
_colorStackCache.Add(entry);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
List<(Component component, Material material)> materialBuffer = Buffers<(
|
|
301
|
+
Component component,
|
|
302
|
+
Material material
|
|
303
|
+
)>.List;
|
|
304
|
+
materialBuffer.Clear();
|
|
305
|
+
foreach ((Component component, Material material) entry in _materialStack)
|
|
306
|
+
{
|
|
307
|
+
materialBuffer.Add(entry);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
for (int i = materialBuffer.Count - 1; 1 <= i; --i)
|
|
311
|
+
{
|
|
312
|
+
PopMaterial(materialBuffer[i].component);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
_materialStackCache.Clear();
|
|
316
|
+
foreach ((Component component, Material material) entry in materialBuffer)
|
|
317
|
+
{
|
|
318
|
+
_materialStackCache.Add(entry);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private void RemoveColor(Component component)
|
|
323
|
+
{
|
|
324
|
+
if (component == this)
|
|
325
|
+
{
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
for (int i = _colorStack.Count - 1; 0 <= i; --i)
|
|
330
|
+
{
|
|
331
|
+
(Component component, Color color) stackEntry = _colorStack[i];
|
|
332
|
+
if (stackEntry.component == component || stackEntry.component == null)
|
|
333
|
+
{
|
|
334
|
+
_colorStack.RemoveAt(i);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
for (int i = _colorStackCache.Count - 1; 0 <= i; --i)
|
|
339
|
+
{
|
|
340
|
+
(Component component, Color color) stackEntry = _colorStackCache[i];
|
|
341
|
+
if (stackEntry.component == component || stackEntry.component == null)
|
|
342
|
+
{
|
|
343
|
+
_colorStackCache.RemoveAt(i);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
private void RemoveMaterial(Component component)
|
|
349
|
+
{
|
|
350
|
+
if (component == this)
|
|
351
|
+
{
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
for (int i = _materialStack.Count - 1; 0 <= i; --i)
|
|
356
|
+
{
|
|
357
|
+
(Component component, Material material) stackEntry = _materialStack[i];
|
|
358
|
+
if (stackEntry.component == component || stackEntry.component == null)
|
|
359
|
+
{
|
|
360
|
+
_materialStack.RemoveAt(i);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
for (int i = _materialStackCache.Count - 1; 0 <= i; --i)
|
|
365
|
+
{
|
|
366
|
+
(Component component, Material material) stackEntry = _materialStackCache[i];
|
|
367
|
+
if (stackEntry.component == component || stackEntry.component == null)
|
|
368
|
+
{
|
|
369
|
+
_materialStackCache.RemoveAt(i);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|