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.
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +60 -0
- package/.github/workflows/unity-package.yml +87 -0
- package/Editor/AnimationCopier.cs +158 -158
- package/Editor/AnimationCopier.cs.meta +2 -2
- package/Editor/AnimationCreator.cs +262 -262
- package/Editor/AnimationCreator.cs.meta +11 -11
- package/Editor/AnimationEventEditor.cs +887 -887
- package/Editor/AnimatorControllerCopier.cs +162 -162
- package/Editor/AnimatorControllerCopier.cs.meta +2 -2
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
- package/Editor/CustomEditors.meta +2 -2
- package/Editor/EnsureTextureSizeWizard.cs +110 -110
- package/Editor/EnsureTextureSizeWizard.cs.meta +2 -2
- package/Editor/PrefabCheckWizard.cs +165 -165
- package/Editor/PrefabCheckWizard.cs.meta +11 -11
- package/Editor/SpriteSettingsApplier.cs +168 -168
- package/Editor/SpriteSettingsApplier.cs.meta +2 -2
- package/Editor/StringInListeDrawer.cs +56 -56
- package/Editor/TextureResizerWizard.cs +181 -181
- package/Editor/TextureResizerWizard.cs.meta +2 -2
- package/Editor/TextureSettingsApplier.cs +171 -171
- package/Editor/TextureSettingsApplier.cs.meta +2 -2
- package/Editor/Utils/EditorUtilities.cs +22 -22
- package/Editor/Utils/EditorUtilities.cs.meta +11 -11
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs +26 -26
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs.meta +11 -11
- package/Editor/Utils.meta +8 -8
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
- package/LICENSE +21 -21
- package/LICENSE.md +6 -6
- package/LICENSE.meta +7 -7
- package/README.md +117 -117
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
- package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
- package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
- package/Runtime/Binaries.meta +8 -8
- package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
- package/Runtime/Core/Attributes/ChildComponentAttribute.cs +189 -189
- package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
- package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
- package/Runtime/Core/Attributes/ParentComponent.cs +184 -184
- package/Runtime/Core/Attributes/ReadOnlyAttribute.cs +6 -6
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +119 -119
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes.meta +8 -8
- package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
- package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
- package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
- package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
- package/Runtime/Core/DataStructure/Circle.cs +50 -50
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +155 -155
- package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
- package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/KDTree.cs +290 -290
- package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/QuadTree.cs +279 -279
- package/Runtime/Core/DataStructure/RTree.cs +336 -336
- package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
- package/Runtime/Core/DataStructure/TimedCache.cs +51 -51
- package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
- package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
- package/Runtime/Core/Extension/ColorExtensions.cs +338 -338
- package/Runtime/Core/Extension/DictionaryExtensions.cs +251 -251
- package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
- package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
- package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
- package/Runtime/Core/Extension/IListExtensions.cs +89 -89
- package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
- package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
- package/Runtime/Core/Extension/StringExtensions.cs +151 -151
- package/Runtime/Core/Extension/UnityExtensions.cs +1607 -1607
- package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
- package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
- package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
- package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
- package/Runtime/Core/Helper/Enumerables.cs +17 -17
- package/Runtime/Core/Helper/Geometry.cs +43 -43
- package/Runtime/Core/Helper/Helpers.cs +722 -722
- package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
- package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
- package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
- package/Runtime/Core/Helper/Objects.cs +767 -767
- package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
- package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
- package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -167
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials.meta +2 -2
- package/Runtime/Core/Helper/ReflectionHelpers.cs +152 -152
- package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/SpriteHelpers.cs +86 -86
- package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/StringInList.cs +31 -31
- package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
- package/Runtime/Core/Helper/WallMath.cs +166 -166
- package/Runtime/Core/Math/Line.cs +55 -55
- package/Runtime/Core/Math/Parabola.cs +47 -47
- package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
- package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
- package/Runtime/Core/Math/Range.cs +92 -92
- package/Runtime/Core/Math/XXHash.cs +310 -310
- package/Runtime/Core/Math/XXHash.cs.meta +11 -11
- package/Runtime/Core/Model/Direction.cs +43 -43
- package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
- package/Runtime/Core/OneOf/None.cs +4 -4
- package/Runtime/Core/Random/AbstractRandom.cs +561 -561
- package/Runtime/Core/Random/DotNetRandom.cs +52 -52
- package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
- package/Runtime/Core/Random/IRandom.cs +160 -160
- package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
- package/Runtime/Core/Random/PRNG.cs +7 -7
- package/Runtime/Core/Random/PRNG.cs.meta +2 -2
- package/Runtime/Core/Random/PcgRandom.cs +149 -149
- package/Runtime/Core/Random/PerlinNoise.cs +369 -369
- package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
- package/Runtime/Core/Random/RandomState.cs +131 -131
- package/Runtime/Core/Random/RandomUtilities.cs +26 -26
- package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
- package/Runtime/Core/Random/RomuDuo.cs +116 -116
- package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
- package/Runtime/Core/Random/SplitMix64.cs +94 -94
- package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
- package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
- package/Runtime/Core/Random/SystemRandom.cs +162 -162
- package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
- package/Runtime/Core/Random/UnityRandom.cs +57 -57
- package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
- package/Runtime/Core/Random/WyRandom.cs +121 -121
- package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
- package/Runtime/Core/Random/XorShiftRandom.cs +47 -47
- package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
- package/Runtime/Core/Random/XorShiroRandom.cs +117 -117
- package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
- package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
- package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
- package/Runtime/Core/Serialization/Serializer.cs +184 -184
- package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +107 -107
- package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
- package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
- package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
- package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
- package/Runtime/UI/LayeredImage.cs +364 -364
- package/Runtime/UI/LayeredImage.cs.meta +2 -2
- package/Runtime/UI.meta +2 -2
- package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
- package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
- package/Runtime/Utils/Buffers.cs +32 -32
- package/Runtime/Utils/CenterPointOffset.cs +30 -30
- package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
- package/Runtime/Utils/CircleLineRenderer.cs +134 -134
- package/Runtime/Utils/CoroutineHandler.cs +4 -4
- package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
- package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
- package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
- package/Runtime/Utils/Oscillator.cs +27 -27
- package/Runtime/Utils/RuntimeSingleton.cs +57 -57
- package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
- package/Runtime/Utils/SetTextureImportData.cs +69 -69
- package/Runtime/Utils/SpriteRendererMetadata.cs +312 -312
- package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
- package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
- package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
- package/Runtime/Utils/TextureScale.cs +179 -179
- package/Runtime/Utils/TextureScale.cs.meta +2 -2
- package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
- package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
- package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
- package/Tests/Runtime/Components/RelationalComponentTester.cs +34 -34
- package/Tests/Runtime/Components/RelationalComponentTester.cs.meta +2 -2
- package/Tests/Runtime/Components.meta +2 -2
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures.meta +8 -8
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/IListExtensionTests.cs +76 -76
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
- package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions.meta +2 -2
- package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
- package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
- package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
- package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
- package/Tests/Runtime/Helper.meta +2 -2
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs +139 -139
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +37 -37
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/Performance.meta +8 -8
- package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
- package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
- package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
- package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
- package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
- package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
- package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
- package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random.meta +8 -8
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs +84 -84
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
- package/Tests/Runtime/Serialization.meta +2 -2
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
- package/Tests/Runtime/Utils.meta +2 -2
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
- package/Tests/Runtime.meta +8 -8
- package/package.json +38 -38
|
@@ -1,184 +1,184 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Attributes
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Collections;
|
|
5
|
-
using System.Collections.Generic;
|
|
6
|
-
using System.Linq;
|
|
7
|
-
using System.Reflection;
|
|
8
|
-
using Extension;
|
|
9
|
-
using Helper;
|
|
10
|
-
using JetBrains.Annotations;
|
|
11
|
-
using UnityEngine;
|
|
12
|
-
|
|
13
|
-
[AttributeUsage(AttributeTargets.Field)]
|
|
14
|
-
[MeansImplicitUse]
|
|
15
|
-
public sealed class ParentComponentAttribute : Attribute
|
|
16
|
-
{
|
|
17
|
-
public bool optional = false;
|
|
18
|
-
public bool onlyAncestors = false;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public static class ParentComponentExtensions
|
|
22
|
-
{
|
|
23
|
-
private static readonly Dictionary<
|
|
24
|
-
Type,
|
|
25
|
-
(FieldInfo field, Action<object, object> setter)[]
|
|
26
|
-
> FieldsByType = new();
|
|
27
|
-
|
|
28
|
-
public static void AssignParentComponents(this Component component)
|
|
29
|
-
{
|
|
30
|
-
Type componentType = component.GetType();
|
|
31
|
-
(FieldInfo field, Action<object, object> setter)[] fields = FieldsByType.GetOrAdd(
|
|
32
|
-
componentType,
|
|
33
|
-
type =>
|
|
34
|
-
{
|
|
35
|
-
FieldInfo[] fields = type.GetFields(
|
|
36
|
-
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
|
|
37
|
-
);
|
|
38
|
-
return fields
|
|
39
|
-
.Where(field =>
|
|
40
|
-
Attribute.IsDefined(field, typeof(ParentComponentAttribute))
|
|
41
|
-
)
|
|
42
|
-
.Select(field => (field, ReflectionHelpers.CreateFieldSetter(type, field)))
|
|
43
|
-
.ToArray();
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
foreach ((FieldInfo field, Action<object, object> setter) in fields)
|
|
48
|
-
{
|
|
49
|
-
Type fieldType = field.FieldType;
|
|
50
|
-
bool isArray = fieldType.IsArray;
|
|
51
|
-
Type parentComponentType = isArray ? fieldType.GetElementType() : fieldType;
|
|
52
|
-
|
|
53
|
-
bool foundParent;
|
|
54
|
-
if (field.GetCustomAttribute<ParentComponentAttribute>().onlyAncestors)
|
|
55
|
-
{
|
|
56
|
-
Transform parent = component.transform.parent;
|
|
57
|
-
if (parent == null)
|
|
58
|
-
{
|
|
59
|
-
foundParent = false;
|
|
60
|
-
}
|
|
61
|
-
else if (isArray)
|
|
62
|
-
{
|
|
63
|
-
Component[] parentComponents = parent.GetComponentsInParent(
|
|
64
|
-
parentComponentType,
|
|
65
|
-
true
|
|
66
|
-
);
|
|
67
|
-
foundParent = 0 < parentComponents.Length;
|
|
68
|
-
|
|
69
|
-
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
70
|
-
parentComponentType,
|
|
71
|
-
parentComponents.Length
|
|
72
|
-
);
|
|
73
|
-
Array.Copy(parentComponents, correctTypedArray, parentComponents.Length);
|
|
74
|
-
setter(component, correctTypedArray);
|
|
75
|
-
}
|
|
76
|
-
else if (
|
|
77
|
-
fieldType.IsGenericType
|
|
78
|
-
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
79
|
-
)
|
|
80
|
-
{
|
|
81
|
-
parentComponentType = fieldType.GenericTypeArguments[0];
|
|
82
|
-
|
|
83
|
-
Component[] parents = parent.GetComponentsInParent(
|
|
84
|
-
parentComponentType,
|
|
85
|
-
true
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
IList instance = ReflectionHelpers.CreateList(
|
|
89
|
-
parentComponentType,
|
|
90
|
-
parents.Length
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
foundParent = false;
|
|
94
|
-
foreach (Component parentComponent in parents)
|
|
95
|
-
{
|
|
96
|
-
instance.Add(parentComponent);
|
|
97
|
-
foundParent = true;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
setter(component, instance);
|
|
101
|
-
}
|
|
102
|
-
else
|
|
103
|
-
{
|
|
104
|
-
Component childComponent = parent.GetComponentInParent(
|
|
105
|
-
parentComponentType,
|
|
106
|
-
true
|
|
107
|
-
);
|
|
108
|
-
foundParent = childComponent != null;
|
|
109
|
-
if (foundParent)
|
|
110
|
-
{
|
|
111
|
-
setter(component, childComponent);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else
|
|
116
|
-
{
|
|
117
|
-
if (isArray)
|
|
118
|
-
{
|
|
119
|
-
Component[] parentComponents = component.GetComponentsInParent(
|
|
120
|
-
parentComponentType,
|
|
121
|
-
true
|
|
122
|
-
);
|
|
123
|
-
foundParent = 0 < parentComponents.Length;
|
|
124
|
-
|
|
125
|
-
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
126
|
-
parentComponentType,
|
|
127
|
-
parentComponents.Length
|
|
128
|
-
);
|
|
129
|
-
Array.Copy(parentComponents, correctTypedArray, parentComponents.Length);
|
|
130
|
-
setter(component, correctTypedArray);
|
|
131
|
-
}
|
|
132
|
-
else if (
|
|
133
|
-
fieldType.IsGenericType
|
|
134
|
-
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
135
|
-
)
|
|
136
|
-
{
|
|
137
|
-
parentComponentType = fieldType.GenericTypeArguments[0];
|
|
138
|
-
|
|
139
|
-
Component[] parents = component.GetComponentsInParent(
|
|
140
|
-
parentComponentType,
|
|
141
|
-
true
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
IList instance = ReflectionHelpers.CreateList(
|
|
145
|
-
parentComponentType,
|
|
146
|
-
parents.Length
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
foundParent = false;
|
|
150
|
-
foreach (Component parentComponent in parents)
|
|
151
|
-
{
|
|
152
|
-
instance.Add(parentComponent);
|
|
153
|
-
foundParent = true;
|
|
154
|
-
}
|
|
155
|
-
setter(component, instance);
|
|
156
|
-
}
|
|
157
|
-
else
|
|
158
|
-
{
|
|
159
|
-
Component childComponent = component.GetComponentInParent(
|
|
160
|
-
parentComponentType,
|
|
161
|
-
true
|
|
162
|
-
);
|
|
163
|
-
foundParent = childComponent != null;
|
|
164
|
-
if (foundParent)
|
|
165
|
-
{
|
|
166
|
-
setter(component, childComponent);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
if (!foundParent)
|
|
172
|
-
{
|
|
173
|
-
if (
|
|
174
|
-
field.GetCustomAttributes(typeof(ParentComponentAttribute), false)[0]
|
|
175
|
-
is ParentComponentAttribute { optional: false } _
|
|
176
|
-
)
|
|
177
|
-
{
|
|
178
|
-
component.LogError($"Unable to find parent component of type {fieldType}");
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Attributes
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
using System.Linq;
|
|
7
|
+
using System.Reflection;
|
|
8
|
+
using Extension;
|
|
9
|
+
using Helper;
|
|
10
|
+
using JetBrains.Annotations;
|
|
11
|
+
using UnityEngine;
|
|
12
|
+
|
|
13
|
+
[AttributeUsage(AttributeTargets.Field)]
|
|
14
|
+
[MeansImplicitUse]
|
|
15
|
+
public sealed class ParentComponentAttribute : Attribute
|
|
16
|
+
{
|
|
17
|
+
public bool optional = false;
|
|
18
|
+
public bool onlyAncestors = false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static class ParentComponentExtensions
|
|
22
|
+
{
|
|
23
|
+
private static readonly Dictionary<
|
|
24
|
+
Type,
|
|
25
|
+
(FieldInfo field, Action<object, object> setter)[]
|
|
26
|
+
> FieldsByType = new();
|
|
27
|
+
|
|
28
|
+
public static void AssignParentComponents(this Component component)
|
|
29
|
+
{
|
|
30
|
+
Type componentType = component.GetType();
|
|
31
|
+
(FieldInfo field, Action<object, object> setter)[] fields = FieldsByType.GetOrAdd(
|
|
32
|
+
componentType,
|
|
33
|
+
type =>
|
|
34
|
+
{
|
|
35
|
+
FieldInfo[] fields = type.GetFields(
|
|
36
|
+
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
|
|
37
|
+
);
|
|
38
|
+
return fields
|
|
39
|
+
.Where(field =>
|
|
40
|
+
Attribute.IsDefined(field, typeof(ParentComponentAttribute))
|
|
41
|
+
)
|
|
42
|
+
.Select(field => (field, ReflectionHelpers.CreateFieldSetter(type, field)))
|
|
43
|
+
.ToArray();
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
foreach ((FieldInfo field, Action<object, object> setter) in fields)
|
|
48
|
+
{
|
|
49
|
+
Type fieldType = field.FieldType;
|
|
50
|
+
bool isArray = fieldType.IsArray;
|
|
51
|
+
Type parentComponentType = isArray ? fieldType.GetElementType() : fieldType;
|
|
52
|
+
|
|
53
|
+
bool foundParent;
|
|
54
|
+
if (field.GetCustomAttribute<ParentComponentAttribute>().onlyAncestors)
|
|
55
|
+
{
|
|
56
|
+
Transform parent = component.transform.parent;
|
|
57
|
+
if (parent == null)
|
|
58
|
+
{
|
|
59
|
+
foundParent = false;
|
|
60
|
+
}
|
|
61
|
+
else if (isArray)
|
|
62
|
+
{
|
|
63
|
+
Component[] parentComponents = parent.GetComponentsInParent(
|
|
64
|
+
parentComponentType,
|
|
65
|
+
true
|
|
66
|
+
);
|
|
67
|
+
foundParent = 0 < parentComponents.Length;
|
|
68
|
+
|
|
69
|
+
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
70
|
+
parentComponentType,
|
|
71
|
+
parentComponents.Length
|
|
72
|
+
);
|
|
73
|
+
Array.Copy(parentComponents, correctTypedArray, parentComponents.Length);
|
|
74
|
+
setter(component, correctTypedArray);
|
|
75
|
+
}
|
|
76
|
+
else if (
|
|
77
|
+
fieldType.IsGenericType
|
|
78
|
+
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
79
|
+
)
|
|
80
|
+
{
|
|
81
|
+
parentComponentType = fieldType.GenericTypeArguments[0];
|
|
82
|
+
|
|
83
|
+
Component[] parents = parent.GetComponentsInParent(
|
|
84
|
+
parentComponentType,
|
|
85
|
+
true
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
IList instance = ReflectionHelpers.CreateList(
|
|
89
|
+
parentComponentType,
|
|
90
|
+
parents.Length
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
foundParent = false;
|
|
94
|
+
foreach (Component parentComponent in parents)
|
|
95
|
+
{
|
|
96
|
+
instance.Add(parentComponent);
|
|
97
|
+
foundParent = true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
setter(component, instance);
|
|
101
|
+
}
|
|
102
|
+
else
|
|
103
|
+
{
|
|
104
|
+
Component childComponent = parent.GetComponentInParent(
|
|
105
|
+
parentComponentType,
|
|
106
|
+
true
|
|
107
|
+
);
|
|
108
|
+
foundParent = childComponent != null;
|
|
109
|
+
if (foundParent)
|
|
110
|
+
{
|
|
111
|
+
setter(component, childComponent);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else
|
|
116
|
+
{
|
|
117
|
+
if (isArray)
|
|
118
|
+
{
|
|
119
|
+
Component[] parentComponents = component.GetComponentsInParent(
|
|
120
|
+
parentComponentType,
|
|
121
|
+
true
|
|
122
|
+
);
|
|
123
|
+
foundParent = 0 < parentComponents.Length;
|
|
124
|
+
|
|
125
|
+
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
126
|
+
parentComponentType,
|
|
127
|
+
parentComponents.Length
|
|
128
|
+
);
|
|
129
|
+
Array.Copy(parentComponents, correctTypedArray, parentComponents.Length);
|
|
130
|
+
setter(component, correctTypedArray);
|
|
131
|
+
}
|
|
132
|
+
else if (
|
|
133
|
+
fieldType.IsGenericType
|
|
134
|
+
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
135
|
+
)
|
|
136
|
+
{
|
|
137
|
+
parentComponentType = fieldType.GenericTypeArguments[0];
|
|
138
|
+
|
|
139
|
+
Component[] parents = component.GetComponentsInParent(
|
|
140
|
+
parentComponentType,
|
|
141
|
+
true
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
IList instance = ReflectionHelpers.CreateList(
|
|
145
|
+
parentComponentType,
|
|
146
|
+
parents.Length
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
foundParent = false;
|
|
150
|
+
foreach (Component parentComponent in parents)
|
|
151
|
+
{
|
|
152
|
+
instance.Add(parentComponent);
|
|
153
|
+
foundParent = true;
|
|
154
|
+
}
|
|
155
|
+
setter(component, instance);
|
|
156
|
+
}
|
|
157
|
+
else
|
|
158
|
+
{
|
|
159
|
+
Component childComponent = component.GetComponentInParent(
|
|
160
|
+
parentComponentType,
|
|
161
|
+
true
|
|
162
|
+
);
|
|
163
|
+
foundParent = childComponent != null;
|
|
164
|
+
if (foundParent)
|
|
165
|
+
{
|
|
166
|
+
setter(component, childComponent);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (!foundParent)
|
|
172
|
+
{
|
|
173
|
+
if (
|
|
174
|
+
field.GetCustomAttributes(typeof(ParentComponentAttribute), false)[0]
|
|
175
|
+
is ParentComponentAttribute { optional: false } _
|
|
176
|
+
)
|
|
177
|
+
{
|
|
178
|
+
component.LogError($"Unable to find parent component of type {fieldType}");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
using PropertyAttribute = UnityEngine.PropertyAttribute;
|
|
2
|
-
|
|
3
|
-
namespace UnityHelpers.Core.Attributes
|
|
4
|
-
{
|
|
5
|
-
public sealed class ReadOnlyAttribute : PropertyAttribute { }
|
|
6
|
-
}
|
|
1
|
+
using PropertyAttribute = UnityEngine.PropertyAttribute;
|
|
2
|
+
|
|
3
|
+
namespace UnityHelpers.Core.Attributes
|
|
4
|
+
{
|
|
5
|
+
public sealed class ReadOnlyAttribute : PropertyAttribute { }
|
|
6
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Attributes
|
|
2
|
-
{
|
|
3
|
-
using UnityEngine;
|
|
4
|
-
|
|
5
|
-
public static class RelationalComponentExtensions
|
|
6
|
-
{
|
|
7
|
-
public static void AssignRelationalComponents(this Component component)
|
|
8
|
-
{
|
|
9
|
-
component.AssignParentComponents();
|
|
10
|
-
component.AssignSiblingComponents();
|
|
11
|
-
component.AssignChildComponents();
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Attributes
|
|
2
|
+
{
|
|
3
|
+
using UnityEngine;
|
|
4
|
+
|
|
5
|
+
public static class RelationalComponentExtensions
|
|
6
|
+
{
|
|
7
|
+
public static void AssignRelationalComponents(this Component component)
|
|
8
|
+
{
|
|
9
|
+
component.AssignParentComponents();
|
|
10
|
+
component.AssignSiblingComponents();
|
|
11
|
+
component.AssignChildComponents();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Attributes
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Collections;
|
|
5
|
-
using System.Collections.Generic;
|
|
6
|
-
using System.Linq;
|
|
7
|
-
using System.Reflection;
|
|
8
|
-
using Extension;
|
|
9
|
-
using Helper;
|
|
10
|
-
using JetBrains.Annotations;
|
|
11
|
-
using UnityEngine;
|
|
12
|
-
|
|
13
|
-
[AttributeUsage(AttributeTargets.Field)]
|
|
14
|
-
[MeansImplicitUse]
|
|
15
|
-
public sealed class SiblingComponentAttribute : Attribute
|
|
16
|
-
{
|
|
17
|
-
public bool optional = false;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
public static class SiblingComponentExtensions
|
|
21
|
-
{
|
|
22
|
-
private static readonly Dictionary<
|
|
23
|
-
Type,
|
|
24
|
-
(FieldInfo field, Action<object, object> setter)[]
|
|
25
|
-
> FieldsByType = new();
|
|
26
|
-
|
|
27
|
-
public static void AssignSiblingComponents(this Component component)
|
|
28
|
-
{
|
|
29
|
-
Type componentType = component.GetType();
|
|
30
|
-
(FieldInfo field, Action<object, object> setter)[] fields = FieldsByType.GetOrAdd(
|
|
31
|
-
componentType,
|
|
32
|
-
type =>
|
|
33
|
-
{
|
|
34
|
-
FieldInfo[] fields = type.GetFields(
|
|
35
|
-
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
|
|
36
|
-
);
|
|
37
|
-
return fields
|
|
38
|
-
.Where(field =>
|
|
39
|
-
Attribute.IsDefined(field, typeof(SiblingComponentAttribute))
|
|
40
|
-
)
|
|
41
|
-
.Select(field => (field, ReflectionHelpers.CreateFieldSetter(type, field)))
|
|
42
|
-
.ToArray();
|
|
43
|
-
}
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
foreach ((FieldInfo field, Action<object, object> setter) in fields)
|
|
47
|
-
{
|
|
48
|
-
Type fieldType = field.FieldType;
|
|
49
|
-
bool isArray = fieldType.IsArray;
|
|
50
|
-
Type siblingComponentType = isArray ? fieldType.GetElementType() : fieldType;
|
|
51
|
-
|
|
52
|
-
bool foundSibling;
|
|
53
|
-
if (isArray)
|
|
54
|
-
{
|
|
55
|
-
Component[] siblingComponents = component.GetComponents(siblingComponentType);
|
|
56
|
-
foundSibling = 0 < siblingComponents.Length;
|
|
57
|
-
|
|
58
|
-
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
59
|
-
siblingComponentType,
|
|
60
|
-
siblingComponents.Length
|
|
61
|
-
);
|
|
62
|
-
Array.Copy(siblingComponents, correctTypedArray, siblingComponents.Length);
|
|
63
|
-
setter(component, correctTypedArray);
|
|
64
|
-
}
|
|
65
|
-
else if (
|
|
66
|
-
fieldType.IsGenericType
|
|
67
|
-
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
68
|
-
)
|
|
69
|
-
{
|
|
70
|
-
siblingComponentType = fieldType.GenericTypeArguments[0];
|
|
71
|
-
|
|
72
|
-
Component[] siblings = component.GetComponents(siblingComponentType);
|
|
73
|
-
|
|
74
|
-
IList instance = ReflectionHelpers.CreateList(
|
|
75
|
-
siblingComponentType,
|
|
76
|
-
siblings.Length
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
foundSibling = false;
|
|
80
|
-
foreach (Component siblingComponent in siblings)
|
|
81
|
-
{
|
|
82
|
-
instance.Add(siblingComponent);
|
|
83
|
-
foundSibling = true;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
setter(component, instance);
|
|
87
|
-
}
|
|
88
|
-
else
|
|
89
|
-
{
|
|
90
|
-
if (
|
|
91
|
-
component.TryGetComponent(
|
|
92
|
-
siblingComponentType,
|
|
93
|
-
out Component siblingComponent
|
|
94
|
-
)
|
|
95
|
-
)
|
|
96
|
-
{
|
|
97
|
-
foundSibling = true;
|
|
98
|
-
setter(component, siblingComponent);
|
|
99
|
-
}
|
|
100
|
-
else
|
|
101
|
-
{
|
|
102
|
-
foundSibling = false;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (!foundSibling)
|
|
107
|
-
{
|
|
108
|
-
if (
|
|
109
|
-
field.GetCustomAttributes(typeof(SiblingComponentAttribute), false)[0]
|
|
110
|
-
is SiblingComponentAttribute { optional: false } _
|
|
111
|
-
)
|
|
112
|
-
{
|
|
113
|
-
component.LogError($"Unable to find sibling component of type {fieldType}");
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Attributes
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
using System.Linq;
|
|
7
|
+
using System.Reflection;
|
|
8
|
+
using Extension;
|
|
9
|
+
using Helper;
|
|
10
|
+
using JetBrains.Annotations;
|
|
11
|
+
using UnityEngine;
|
|
12
|
+
|
|
13
|
+
[AttributeUsage(AttributeTargets.Field)]
|
|
14
|
+
[MeansImplicitUse]
|
|
15
|
+
public sealed class SiblingComponentAttribute : Attribute
|
|
16
|
+
{
|
|
17
|
+
public bool optional = false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public static class SiblingComponentExtensions
|
|
21
|
+
{
|
|
22
|
+
private static readonly Dictionary<
|
|
23
|
+
Type,
|
|
24
|
+
(FieldInfo field, Action<object, object> setter)[]
|
|
25
|
+
> FieldsByType = new();
|
|
26
|
+
|
|
27
|
+
public static void AssignSiblingComponents(this Component component)
|
|
28
|
+
{
|
|
29
|
+
Type componentType = component.GetType();
|
|
30
|
+
(FieldInfo field, Action<object, object> setter)[] fields = FieldsByType.GetOrAdd(
|
|
31
|
+
componentType,
|
|
32
|
+
type =>
|
|
33
|
+
{
|
|
34
|
+
FieldInfo[] fields = type.GetFields(
|
|
35
|
+
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
|
|
36
|
+
);
|
|
37
|
+
return fields
|
|
38
|
+
.Where(field =>
|
|
39
|
+
Attribute.IsDefined(field, typeof(SiblingComponentAttribute))
|
|
40
|
+
)
|
|
41
|
+
.Select(field => (field, ReflectionHelpers.CreateFieldSetter(type, field)))
|
|
42
|
+
.ToArray();
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
foreach ((FieldInfo field, Action<object, object> setter) in fields)
|
|
47
|
+
{
|
|
48
|
+
Type fieldType = field.FieldType;
|
|
49
|
+
bool isArray = fieldType.IsArray;
|
|
50
|
+
Type siblingComponentType = isArray ? fieldType.GetElementType() : fieldType;
|
|
51
|
+
|
|
52
|
+
bool foundSibling;
|
|
53
|
+
if (isArray)
|
|
54
|
+
{
|
|
55
|
+
Component[] siblingComponents = component.GetComponents(siblingComponentType);
|
|
56
|
+
foundSibling = 0 < siblingComponents.Length;
|
|
57
|
+
|
|
58
|
+
Array correctTypedArray = ReflectionHelpers.CreateArray(
|
|
59
|
+
siblingComponentType,
|
|
60
|
+
siblingComponents.Length
|
|
61
|
+
);
|
|
62
|
+
Array.Copy(siblingComponents, correctTypedArray, siblingComponents.Length);
|
|
63
|
+
setter(component, correctTypedArray);
|
|
64
|
+
}
|
|
65
|
+
else if (
|
|
66
|
+
fieldType.IsGenericType
|
|
67
|
+
&& fieldType.GetGenericTypeDefinition() == typeof(List<>)
|
|
68
|
+
)
|
|
69
|
+
{
|
|
70
|
+
siblingComponentType = fieldType.GenericTypeArguments[0];
|
|
71
|
+
|
|
72
|
+
Component[] siblings = component.GetComponents(siblingComponentType);
|
|
73
|
+
|
|
74
|
+
IList instance = ReflectionHelpers.CreateList(
|
|
75
|
+
siblingComponentType,
|
|
76
|
+
siblings.Length
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
foundSibling = false;
|
|
80
|
+
foreach (Component siblingComponent in siblings)
|
|
81
|
+
{
|
|
82
|
+
instance.Add(siblingComponent);
|
|
83
|
+
foundSibling = true;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
setter(component, instance);
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
{
|
|
90
|
+
if (
|
|
91
|
+
component.TryGetComponent(
|
|
92
|
+
siblingComponentType,
|
|
93
|
+
out Component siblingComponent
|
|
94
|
+
)
|
|
95
|
+
)
|
|
96
|
+
{
|
|
97
|
+
foundSibling = true;
|
|
98
|
+
setter(component, siblingComponent);
|
|
99
|
+
}
|
|
100
|
+
else
|
|
101
|
+
{
|
|
102
|
+
foundSibling = false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!foundSibling)
|
|
107
|
+
{
|
|
108
|
+
if (
|
|
109
|
+
field.GetCustomAttributes(typeof(SiblingComponentAttribute), false)[0]
|
|
110
|
+
is SiblingComponentAttribute { optional: false } _
|
|
111
|
+
)
|
|
112
|
+
{
|
|
113
|
+
component.LogError($"Unable to find sibling component of type {fieldType}");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|