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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/.gitattributes +63 -63
  2. package/.github/workflows/npm-publish.yml +60 -0
  3. package/.github/workflows/unity-package.yml +87 -0
  4. package/Editor/AnimationCopier.cs +158 -158
  5. package/Editor/AnimationCopier.cs.meta +2 -2
  6. package/Editor/AnimationCreator.cs +262 -262
  7. package/Editor/AnimationCreator.cs.meta +11 -11
  8. package/Editor/AnimationEventEditor.cs +887 -887
  9. package/Editor/AnimatorControllerCopier.cs +162 -162
  10. package/Editor/AnimatorControllerCopier.cs.meta +2 -2
  11. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
  12. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  13. package/Editor/CustomEditors.meta +2 -2
  14. package/Editor/EnsureTextureSizeWizard.cs +110 -110
  15. package/Editor/EnsureTextureSizeWizard.cs.meta +2 -2
  16. package/Editor/PrefabCheckWizard.cs +165 -165
  17. package/Editor/PrefabCheckWizard.cs.meta +11 -11
  18. package/Editor/SpriteSettingsApplier.cs +168 -168
  19. package/Editor/SpriteSettingsApplier.cs.meta +2 -2
  20. package/Editor/StringInListeDrawer.cs +56 -56
  21. package/Editor/TextureResizerWizard.cs +181 -181
  22. package/Editor/TextureResizerWizard.cs.meta +2 -2
  23. package/Editor/TextureSettingsApplier.cs +171 -171
  24. package/Editor/TextureSettingsApplier.cs.meta +2 -2
  25. package/Editor/Utils/EditorUtilities.cs +22 -22
  26. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  27. package/Editor/Utils/ReadOnlyPropertyDrawer.cs +26 -26
  28. package/Editor/Utils/ReadOnlyPropertyDrawer.cs.meta +11 -11
  29. package/Editor/Utils.meta +8 -8
  30. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
  31. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  32. package/LICENSE +21 -21
  33. package/LICENSE.md +6 -6
  34. package/LICENSE.meta +7 -7
  35. package/README.md +117 -117
  36. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  37. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
  38. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  39. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  40. package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
  41. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  42. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  43. package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
  44. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  45. package/Runtime/Binaries.meta +8 -8
  46. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
  47. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +189 -189
  48. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  49. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  50. package/Runtime/Core/Attributes/ParentComponent.cs +184 -184
  51. package/Runtime/Core/Attributes/ReadOnlyAttribute.cs +6 -6
  52. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
  53. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +119 -119
  54. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  55. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
  56. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  57. package/Runtime/Core/Attributes.meta +8 -8
  58. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
  59. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
  60. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
  61. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
  62. package/Runtime/Core/DataStructure/Circle.cs +50 -50
  63. package/Runtime/Core/DataStructure/CyclicBuffer.cs +155 -155
  64. package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
  65. package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
  66. package/Runtime/Core/DataStructure/KDTree.cs +290 -290
  67. package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
  68. package/Runtime/Core/DataStructure/QuadTree.cs +279 -279
  69. package/Runtime/Core/DataStructure/RTree.cs +336 -336
  70. package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
  71. package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
  72. package/Runtime/Core/DataStructure/TimedCache.cs +51 -51
  73. package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
  74. package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
  75. package/Runtime/Core/Extension/ColorExtensions.cs +338 -338
  76. package/Runtime/Core/Extension/DictionaryExtensions.cs +251 -251
  77. package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
  78. package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
  79. package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
  80. package/Runtime/Core/Extension/IListExtensions.cs +89 -89
  81. package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
  82. package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
  83. package/Runtime/Core/Extension/StringExtensions.cs +151 -151
  84. package/Runtime/Core/Extension/UnityExtensions.cs +1607 -1607
  85. package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
  86. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  87. package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
  88. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  89. package/Runtime/Core/Helper/Enumerables.cs +17 -17
  90. package/Runtime/Core/Helper/Geometry.cs +43 -43
  91. package/Runtime/Core/Helper/Helpers.cs +722 -722
  92. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  93. package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
  94. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  95. package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
  96. package/Runtime/Core/Helper/Objects.cs +767 -767
  97. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  98. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  99. package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
  100. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  101. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
  102. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  103. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -167
  104. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  105. package/Runtime/Core/Helper/Partials.meta +2 -2
  106. package/Runtime/Core/Helper/ReflectionHelpers.cs +152 -152
  107. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  108. package/Runtime/Core/Helper/SpriteHelpers.cs +86 -86
  109. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  110. package/Runtime/Core/Helper/StringInList.cs +31 -31
  111. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  112. package/Runtime/Core/Helper/WallMath.cs +166 -166
  113. package/Runtime/Core/Math/Line.cs +55 -55
  114. package/Runtime/Core/Math/Parabola.cs +47 -47
  115. package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
  116. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  117. package/Runtime/Core/Math/Range.cs +92 -92
  118. package/Runtime/Core/Math/XXHash.cs +310 -310
  119. package/Runtime/Core/Math/XXHash.cs.meta +11 -11
  120. package/Runtime/Core/Model/Direction.cs +43 -43
  121. package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
  122. package/Runtime/Core/OneOf/None.cs +4 -4
  123. package/Runtime/Core/Random/AbstractRandom.cs +561 -561
  124. package/Runtime/Core/Random/DotNetRandom.cs +52 -52
  125. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  126. package/Runtime/Core/Random/IRandom.cs +160 -160
  127. package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
  128. package/Runtime/Core/Random/PRNG.cs +7 -7
  129. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  130. package/Runtime/Core/Random/PcgRandom.cs +149 -149
  131. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  132. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  133. package/Runtime/Core/Random/RandomState.cs +131 -131
  134. package/Runtime/Core/Random/RandomUtilities.cs +26 -26
  135. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  136. package/Runtime/Core/Random/RomuDuo.cs +116 -116
  137. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  138. package/Runtime/Core/Random/SplitMix64.cs +94 -94
  139. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  140. package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
  141. package/Runtime/Core/Random/SystemRandom.cs +162 -162
  142. package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
  143. package/Runtime/Core/Random/UnityRandom.cs +57 -57
  144. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  145. package/Runtime/Core/Random/WyRandom.cs +121 -121
  146. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  147. package/Runtime/Core/Random/XorShiftRandom.cs +47 -47
  148. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  149. package/Runtime/Core/Random/XorShiroRandom.cs +117 -117
  150. package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
  151. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
  152. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
  153. package/Runtime/Core/Serialization/Serializer.cs +184 -184
  154. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +107 -107
  155. package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
  156. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  157. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
  158. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
  159. package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
  160. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  161. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
  162. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
  163. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  164. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  165. package/Runtime/UI/LayeredImage.cs +364 -364
  166. package/Runtime/UI/LayeredImage.cs.meta +2 -2
  167. package/Runtime/UI.meta +2 -2
  168. package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
  169. package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
  170. package/Runtime/Utils/Buffers.cs +32 -32
  171. package/Runtime/Utils/CenterPointOffset.cs +30 -30
  172. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  173. package/Runtime/Utils/CircleLineRenderer.cs +134 -134
  174. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  175. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  176. package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
  177. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  178. package/Runtime/Utils/Oscillator.cs +27 -27
  179. package/Runtime/Utils/RuntimeSingleton.cs +57 -57
  180. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  181. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  182. package/Runtime/Utils/SpriteRendererMetadata.cs +312 -312
  183. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  184. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  185. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  186. package/Runtime/Utils/TextureScale.cs +179 -179
  187. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  188. package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
  189. package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
  190. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  191. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  192. package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
  193. package/Tests/Runtime/Components/RelationalComponentTester.cs +34 -34
  194. package/Tests/Runtime/Components/RelationalComponentTester.cs.meta +2 -2
  195. package/Tests/Runtime/Components.meta +2 -2
  196. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
  197. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
  198. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
  199. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
  200. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
  201. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
  202. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
  203. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
  204. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
  205. package/Tests/Runtime/DataStructures.meta +8 -8
  206. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
  207. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  208. package/Tests/Runtime/Extensions/IListExtensionTests.cs +76 -76
  209. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
  210. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  211. package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
  212. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  213. package/Tests/Runtime/Extensions.meta +2 -2
  214. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  215. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  216. package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
  217. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  218. package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
  219. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  220. package/Tests/Runtime/Helper.meta +2 -2
  221. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
  222. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
  223. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
  224. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
  225. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +139 -139
  226. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  227. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +37 -37
  228. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  229. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
  230. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
  231. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
  232. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
  233. package/Tests/Runtime/Performance.meta +8 -8
  234. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  235. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  236. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  237. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  238. package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
  239. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  240. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  241. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  242. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  243. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  244. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  245. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  246. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  247. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  248. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  249. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  250. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  251. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  252. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  253. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  254. package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
  255. package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
  256. package/Tests/Runtime/Random.meta +8 -8
  257. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +84 -84
  258. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  259. package/Tests/Runtime/Serialization.meta +2 -2
  260. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
  261. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  262. package/Tests/Runtime/Utils.meta +2 -2
  263. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
  264. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  265. package/Tests/Runtime.meta +8 -8
  266. package/package.json +38 -38
@@ -1,312 +1,312 @@
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 readonly List<(Component component, Color color)> _colorStack = new();
15
- private readonly List<(Component component, Material material)> _materialStack = new();
16
-
17
- private readonly List<(Component component, Color color)> _colorStackCache = new();
18
- private readonly List<(Component component, Material material)> _materialStackCache = new();
19
-
20
- public Color OriginalColor => _colorStack[0].color;
21
-
22
- public Color CurrentColor => _colorStack[^1].color;
23
-
24
- public Material OriginalMaterial => _materialStack[0].material;
25
-
26
- public Material CurrentMaterial => _materialStack[^1].material;
27
-
28
- public IEnumerable<Material> Materials => _materialStack.Select(entry => entry.material);
29
-
30
- public IEnumerable<Color> Colors => _colorStack.Select(entry => entry.color);
31
-
32
- [SiblingComponent]
33
- [SerializeField]
34
- private SpriteRenderer _spriteRenderer;
35
-
36
- private bool _enabled;
37
-
38
- public void PushColor(Component component, Color color, bool force = false)
39
- {
40
- if (component == this)
41
- {
42
- return;
43
- }
44
-
45
- if (!force && !enabled)
46
- {
47
- return;
48
- }
49
-
50
- InternalPushColor(component, color);
51
- }
52
-
53
- private void InternalPushColor(Component component, Color color)
54
- {
55
- RemoveColor(component);
56
- _colorStack.Add((component, color));
57
- _spriteRenderer.color = CurrentColor;
58
- }
59
-
60
- public void PushBackColor(Component component, Color color, bool force = false)
61
- {
62
- if (component == this)
63
- {
64
- return;
65
- }
66
-
67
- if (!force && !enabled)
68
- {
69
- return;
70
- }
71
-
72
- RemoveColor(component);
73
- _colorStack.Insert(1, (component, color));
74
- _spriteRenderer.color = CurrentColor;
75
- }
76
-
77
- public void PopColor(Component component)
78
- {
79
- RemoveColor(component);
80
- _spriteRenderer.color = CurrentColor;
81
- }
82
-
83
- public bool TryGetColor(Component component, out Color color)
84
- {
85
- int index = _colorStack.FindIndex(value => value.component == component);
86
- if (index < 0)
87
- {
88
- color = default;
89
- return false;
90
- }
91
-
92
- color = _colorStack[index].color;
93
- return true;
94
- }
95
-
96
- /// <summary>
97
- /// Inserts a material as "first in the queue".
98
- /// </summary>
99
- /// <param name="component">Component that owns the material.</param>
100
- /// <param name="material">Material to use.</param>
101
- /// <param name="force">If true, overrides the enable check.</param>
102
- /// <returns>The instanced material, if possible.</returns>
103
- public Material PushMaterial(Component component, Material material, bool force = false)
104
- {
105
- if (component == this)
106
- {
107
- return null;
108
- }
109
-
110
- if (!force && !enabled)
111
- {
112
- return null;
113
- }
114
-
115
- #if UNITY_EDITOR
116
- if (!Application.isPlaying)
117
- {
118
- return null;
119
- }
120
- #endif
121
- return InternalPushMaterial(component, material);
122
- }
123
-
124
- private Material InternalPushMaterial(Component component, Material material)
125
- {
126
- RemoveMaterial(component);
127
- _spriteRenderer.material = material;
128
- Material instanced = _spriteRenderer.material;
129
- _materialStack.Add((component, instanced));
130
- return instanced;
131
- }
132
-
133
- /// <summary>
134
- /// Inserts a material as "last in the queue".
135
- /// </summary>
136
- /// <param name="component">Component that owns the material.</param>
137
- /// <param name="material">Material to use.</param>
138
- /// <param name="force">If true, overrides the enable check.</param>
139
- /// <returns>The instanced material, if possible.</returns>
140
- public Material PushBackMaterial(Component component, Material material, bool force = false)
141
- {
142
- if (component == this)
143
- {
144
- return null;
145
- }
146
-
147
- if (!force && !enabled)
148
- {
149
- return null;
150
- }
151
-
152
- #if UNITY_EDITOR
153
- if (!Application.isPlaying)
154
- {
155
- return null;
156
- }
157
- #endif
158
-
159
- RemoveMaterial(component);
160
- Material instanced = material;
161
- if (_materialStack.Count <= 1)
162
- {
163
- _spriteRenderer.material = material;
164
- instanced = _spriteRenderer.material;
165
- }
166
-
167
- _materialStack.Insert(1, (component, instanced));
168
- return instanced;
169
- }
170
-
171
- public void PopMaterial(Component component)
172
- {
173
- #if UNITY_EDITOR
174
- if (!Application.isPlaying)
175
- {
176
- return;
177
- }
178
- #endif
179
-
180
- RemoveMaterial(component);
181
- _spriteRenderer.material = CurrentMaterial;
182
- Material instanced = _spriteRenderer.material;
183
- Component currentComponent = _materialStack[^1].component;
184
- _materialStack[^1] = (currentComponent, instanced);
185
- }
186
-
187
- public bool TryGetMaterial(Component component, out Material material)
188
- {
189
- int index = _materialStack.FindIndex(value => value.component == component);
190
- if (index < 0)
191
- {
192
- material = default;
193
- return false;
194
- }
195
- material = _materialStack[index].material;
196
- return true;
197
- }
198
-
199
- private void Awake()
200
- {
201
- if (_spriteRenderer == null)
202
- {
203
- this.AssignSiblingComponents();
204
- }
205
-
206
- InternalPushColor(this, _spriteRenderer.color);
207
- _colorStackCache.AddRange(_colorStack);
208
- _ = InternalPushMaterial(this, _spriteRenderer.material);
209
- _materialStackCache.AddRange(_materialStack);
210
- }
211
-
212
- private void OnEnable()
213
- {
214
- // Ignore the OnEnable call from when the object is first initialized
215
- if (!_enabled)
216
- {
217
- _enabled = true;
218
- return;
219
- }
220
-
221
- _colorStack.Clear();
222
- _colorStack.Add(_colorStackCache[0]);
223
- List<(Component component, Color color)> colorBuffer = Buffers<(
224
- Component component,
225
- Color color
226
- )>.List;
227
- colorBuffer.Clear();
228
- colorBuffer.AddRange(_colorStackCache);
229
- for (int i = 1; i < colorBuffer.Count; ++i)
230
- {
231
- (Component component, Color color) entry = colorBuffer[i];
232
- PushColor(entry.component, entry.color, force: true);
233
- }
234
-
235
- _materialStack.Clear();
236
- _materialStack.Add(_materialStackCache[0]);
237
- List<(Component component, Material material)> materialBuffer = Buffers<(
238
- Component component,
239
- Material material
240
- )>.List;
241
- materialBuffer.Clear();
242
- materialBuffer.AddRange(_materialStackCache);
243
- for (int i = 1; i < materialBuffer.Count; ++i)
244
- {
245
- (Component component, Material material) entry = materialBuffer[i];
246
- PushMaterial(entry.component, entry.material, force: true);
247
- }
248
- }
249
-
250
- private void OnDisable()
251
- {
252
- List<(Component component, Color color)> colorBuffer = Buffers<(
253
- Component component,
254
- Color color
255
- )>.List;
256
- colorBuffer.Clear();
257
- colorBuffer.AddRange(_colorStack);
258
- for (int i = colorBuffer.Count - 1; 1 <= i; --i)
259
- {
260
- PopColor(colorBuffer[i].component);
261
- }
262
-
263
- _colorStackCache.Clear();
264
- _colorStackCache.AddRange(colorBuffer);
265
-
266
- List<(Component component, Material material)> materialBuffer = Buffers<(
267
- Component component,
268
- Material material
269
- )>.List;
270
- materialBuffer.Clear();
271
- materialBuffer.AddRange(_materialStack);
272
-
273
- for (int i = materialBuffer.Count - 1; 1 <= i; --i)
274
- {
275
- PopMaterial(materialBuffer[i].component);
276
- }
277
-
278
- _materialStackCache.Clear();
279
- _materialStackCache.AddRange(materialBuffer);
280
- }
281
-
282
- private void RemoveColor(Component component)
283
- {
284
- if (component == this)
285
- {
286
- return;
287
- }
288
-
289
- _ = _colorStack.RemoveAll(existingComponent =>
290
- existingComponent.component == component || existingComponent.component == null
291
- );
292
- _ = _colorStackCache.RemoveAll(existingComponent =>
293
- existingComponent.component == component || existingComponent.component == null
294
- );
295
- }
296
-
297
- private void RemoveMaterial(Component component)
298
- {
299
- if (component == this)
300
- {
301
- return;
302
- }
303
-
304
- _ = _materialStack.RemoveAll(existingComponent =>
305
- existingComponent.component == component || existingComponent.component == null
306
- );
307
- _ = _materialStackCache.RemoveAll(existingComponent =>
308
- existingComponent.component == component || existingComponent.component == null
309
- );
310
- }
311
- }
312
- }
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 readonly List<(Component component, Color color)> _colorStack = new();
15
+ private readonly List<(Component component, Material material)> _materialStack = new();
16
+
17
+ private readonly List<(Component component, Color color)> _colorStackCache = new();
18
+ private readonly List<(Component component, Material material)> _materialStackCache = new();
19
+
20
+ public Color OriginalColor => _colorStack[0].color;
21
+
22
+ public Color CurrentColor => _colorStack[^1].color;
23
+
24
+ public Material OriginalMaterial => _materialStack[0].material;
25
+
26
+ public Material CurrentMaterial => _materialStack[^1].material;
27
+
28
+ public IEnumerable<Material> Materials => _materialStack.Select(entry => entry.material);
29
+
30
+ public IEnumerable<Color> Colors => _colorStack.Select(entry => entry.color);
31
+
32
+ [SiblingComponent]
33
+ [SerializeField]
34
+ private SpriteRenderer _spriteRenderer;
35
+
36
+ private bool _enabled;
37
+
38
+ public void PushColor(Component component, Color color, bool force = false)
39
+ {
40
+ if (component == this)
41
+ {
42
+ return;
43
+ }
44
+
45
+ if (!force && !enabled)
46
+ {
47
+ return;
48
+ }
49
+
50
+ InternalPushColor(component, color);
51
+ }
52
+
53
+ private void InternalPushColor(Component component, Color color)
54
+ {
55
+ RemoveColor(component);
56
+ _colorStack.Add((component, color));
57
+ _spriteRenderer.color = CurrentColor;
58
+ }
59
+
60
+ public void PushBackColor(Component component, Color color, bool force = false)
61
+ {
62
+ if (component == this)
63
+ {
64
+ return;
65
+ }
66
+
67
+ if (!force && !enabled)
68
+ {
69
+ return;
70
+ }
71
+
72
+ RemoveColor(component);
73
+ _colorStack.Insert(1, (component, color));
74
+ _spriteRenderer.color = CurrentColor;
75
+ }
76
+
77
+ public void PopColor(Component component)
78
+ {
79
+ RemoveColor(component);
80
+ _spriteRenderer.color = CurrentColor;
81
+ }
82
+
83
+ public bool TryGetColor(Component component, out Color color)
84
+ {
85
+ int index = _colorStack.FindIndex(value => value.component == component);
86
+ if (index < 0)
87
+ {
88
+ color = default;
89
+ return false;
90
+ }
91
+
92
+ color = _colorStack[index].color;
93
+ return true;
94
+ }
95
+
96
+ /// <summary>
97
+ /// Inserts a material as "first in the queue".
98
+ /// </summary>
99
+ /// <param name="component">Component that owns the material.</param>
100
+ /// <param name="material">Material to use.</param>
101
+ /// <param name="force">If true, overrides the enable check.</param>
102
+ /// <returns>The instanced material, if possible.</returns>
103
+ public Material PushMaterial(Component component, Material material, bool force = false)
104
+ {
105
+ if (component == this)
106
+ {
107
+ return null;
108
+ }
109
+
110
+ if (!force && !enabled)
111
+ {
112
+ return null;
113
+ }
114
+
115
+ #if UNITY_EDITOR
116
+ if (!Application.isPlaying)
117
+ {
118
+ return null;
119
+ }
120
+ #endif
121
+ return InternalPushMaterial(component, material);
122
+ }
123
+
124
+ private Material InternalPushMaterial(Component component, Material material)
125
+ {
126
+ RemoveMaterial(component);
127
+ _spriteRenderer.material = material;
128
+ Material instanced = _spriteRenderer.material;
129
+ _materialStack.Add((component, instanced));
130
+ return instanced;
131
+ }
132
+
133
+ /// <summary>
134
+ /// Inserts a material as "last in the queue".
135
+ /// </summary>
136
+ /// <param name="component">Component that owns the material.</param>
137
+ /// <param name="material">Material to use.</param>
138
+ /// <param name="force">If true, overrides the enable check.</param>
139
+ /// <returns>The instanced material, if possible.</returns>
140
+ public Material PushBackMaterial(Component component, Material material, bool force = false)
141
+ {
142
+ if (component == this)
143
+ {
144
+ return null;
145
+ }
146
+
147
+ if (!force && !enabled)
148
+ {
149
+ return null;
150
+ }
151
+
152
+ #if UNITY_EDITOR
153
+ if (!Application.isPlaying)
154
+ {
155
+ return null;
156
+ }
157
+ #endif
158
+
159
+ RemoveMaterial(component);
160
+ Material instanced = material;
161
+ if (_materialStack.Count <= 1)
162
+ {
163
+ _spriteRenderer.material = material;
164
+ instanced = _spriteRenderer.material;
165
+ }
166
+
167
+ _materialStack.Insert(1, (component, instanced));
168
+ return instanced;
169
+ }
170
+
171
+ public void PopMaterial(Component component)
172
+ {
173
+ #if UNITY_EDITOR
174
+ if (!Application.isPlaying)
175
+ {
176
+ return;
177
+ }
178
+ #endif
179
+
180
+ RemoveMaterial(component);
181
+ _spriteRenderer.material = CurrentMaterial;
182
+ Material instanced = _spriteRenderer.material;
183
+ Component currentComponent = _materialStack[^1].component;
184
+ _materialStack[^1] = (currentComponent, instanced);
185
+ }
186
+
187
+ public bool TryGetMaterial(Component component, out Material material)
188
+ {
189
+ int index = _materialStack.FindIndex(value => value.component == component);
190
+ if (index < 0)
191
+ {
192
+ material = default;
193
+ return false;
194
+ }
195
+ material = _materialStack[index].material;
196
+ return true;
197
+ }
198
+
199
+ private void Awake()
200
+ {
201
+ if (_spriteRenderer == null)
202
+ {
203
+ this.AssignSiblingComponents();
204
+ }
205
+
206
+ InternalPushColor(this, _spriteRenderer.color);
207
+ _colorStackCache.AddRange(_colorStack);
208
+ _ = InternalPushMaterial(this, _spriteRenderer.material);
209
+ _materialStackCache.AddRange(_materialStack);
210
+ }
211
+
212
+ private void OnEnable()
213
+ {
214
+ // Ignore the OnEnable call from when the object is first initialized
215
+ if (!_enabled)
216
+ {
217
+ _enabled = true;
218
+ return;
219
+ }
220
+
221
+ _colorStack.Clear();
222
+ _colorStack.Add(_colorStackCache[0]);
223
+ List<(Component component, Color color)> colorBuffer = Buffers<(
224
+ Component component,
225
+ Color color
226
+ )>.List;
227
+ colorBuffer.Clear();
228
+ colorBuffer.AddRange(_colorStackCache);
229
+ for (int i = 1; i < colorBuffer.Count; ++i)
230
+ {
231
+ (Component component, Color color) entry = colorBuffer[i];
232
+ PushColor(entry.component, entry.color, force: true);
233
+ }
234
+
235
+ _materialStack.Clear();
236
+ _materialStack.Add(_materialStackCache[0]);
237
+ List<(Component component, Material material)> materialBuffer = Buffers<(
238
+ Component component,
239
+ Material material
240
+ )>.List;
241
+ materialBuffer.Clear();
242
+ materialBuffer.AddRange(_materialStackCache);
243
+ for (int i = 1; i < materialBuffer.Count; ++i)
244
+ {
245
+ (Component component, Material material) entry = materialBuffer[i];
246
+ PushMaterial(entry.component, entry.material, force: true);
247
+ }
248
+ }
249
+
250
+ private void OnDisable()
251
+ {
252
+ List<(Component component, Color color)> colorBuffer = Buffers<(
253
+ Component component,
254
+ Color color
255
+ )>.List;
256
+ colorBuffer.Clear();
257
+ colorBuffer.AddRange(_colorStack);
258
+ for (int i = colorBuffer.Count - 1; 1 <= i; --i)
259
+ {
260
+ PopColor(colorBuffer[i].component);
261
+ }
262
+
263
+ _colorStackCache.Clear();
264
+ _colorStackCache.AddRange(colorBuffer);
265
+
266
+ List<(Component component, Material material)> materialBuffer = Buffers<(
267
+ Component component,
268
+ Material material
269
+ )>.List;
270
+ materialBuffer.Clear();
271
+ materialBuffer.AddRange(_materialStack);
272
+
273
+ for (int i = materialBuffer.Count - 1; 1 <= i; --i)
274
+ {
275
+ PopMaterial(materialBuffer[i].component);
276
+ }
277
+
278
+ _materialStackCache.Clear();
279
+ _materialStackCache.AddRange(materialBuffer);
280
+ }
281
+
282
+ private void RemoveColor(Component component)
283
+ {
284
+ if (component == this)
285
+ {
286
+ return;
287
+ }
288
+
289
+ _ = _colorStack.RemoveAll(existingComponent =>
290
+ existingComponent.component == component || existingComponent.component == null
291
+ );
292
+ _ = _colorStackCache.RemoveAll(existingComponent =>
293
+ existingComponent.component == component || existingComponent.component == null
294
+ );
295
+ }
296
+
297
+ private void RemoveMaterial(Component component)
298
+ {
299
+ if (component == this)
300
+ {
301
+ return;
302
+ }
303
+
304
+ _ = _materialStack.RemoveAll(existingComponent =>
305
+ existingComponent.component == component || existingComponent.component == null
306
+ );
307
+ _ = _materialStackCache.RemoveAll(existingComponent =>
308
+ existingComponent.component == component || existingComponent.component == null
309
+ );
310
+ }
311
+ }
312
+ }
@@ -1,3 +1,3 @@
1
- fileFormatVersion: 2
2
- guid: 7b2d3d00a0e140fea968fea4859c1781
1
+ fileFormatVersion: 2
2
+ guid: 7b2d3d00a0e140fea968fea4859c1781
3
3
  timeCreated: 1720397272