@@ -10,11 +10,12 @@ namespace TNRD
10
10
[ CustomPropertyDrawer ( typeof ( SerializableInterface < > ) , true ) ]
11
11
internal sealed class SerializableInterfacePropertyDrawer : PropertyDrawer
12
12
{
13
+ private readonly RawReferenceDrawer rawReferenceDrawer = new RawReferenceDrawer ( ) ;
14
+ private readonly UnityReferenceDrawer unityReferenceDrawer = new UnityReferenceDrawer ( ) ;
15
+
13
16
private SerializedProperty serializedProperty ;
14
17
private Type genericType ;
15
18
16
- private IReferenceDrawer activeDrawer ;
17
-
18
19
/// <inheritdoc />
19
20
public override bool CanCacheInspectorGUI ( SerializedProperty property ) => false ;
20
21
@@ -23,7 +24,6 @@ private void Initialize(SerializedProperty property)
23
24
if ( serializedProperty == property )
24
25
return ;
25
26
26
- activeDrawer = null ;
27
27
serializedProperty = property ;
28
28
genericType = GetGenericArgument ( ) ;
29
29
Assert . IsNotNull ( genericType , "Unable to find generic argument, are you doing some shady inheritance?" ) ;
@@ -33,16 +33,14 @@ private void Initialize(SerializedProperty property)
33
33
public override float GetPropertyHeight ( SerializedProperty property , GUIContent label )
34
34
{
35
35
Initialize ( property ) ;
36
- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
37
- return activeDrawer . GetHeight ( ) ;
36
+ return GetReferenceDrawer ( property , label ) . GetHeight ( ) ;
38
37
}
39
38
40
39
/// <inheritdoc />
41
40
public override void OnGUI ( Rect position , SerializedProperty property , GUIContent label )
42
41
{
43
42
Initialize ( property ) ;
44
- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
45
- activeDrawer . OnGUI ( position ) ;
43
+ GetReferenceDrawer ( property , label ) . OnGUI ( position ) ;
46
44
}
47
45
48
46
private Type GetGenericArgument ( )
@@ -81,25 +79,19 @@ private Type GetGenericArgument()
81
79
return null ;
82
80
}
83
81
84
- private IReferenceDrawer GetReferenceDrawer (
85
- IReferenceDrawer original ,
86
- SerializedProperty property ,
87
- GUIContent label
88
- )
82
+ private IReferenceDrawer GetReferenceDrawer ( SerializedProperty property , GUIContent label )
89
83
{
90
84
SerializedProperty modeProperty = serializedProperty . FindPropertyRelative ( "mode" ) ;
91
85
ReferenceMode referenceMode = ( ReferenceMode ) modeProperty . enumValueIndex ;
92
86
93
87
switch ( referenceMode )
94
88
{
95
89
case ReferenceMode . Raw :
96
- return original is RawReferenceDrawer
97
- ? original
98
- : new RawReferenceDrawer ( property , label , genericType , fieldInfo ) ;
90
+ rawReferenceDrawer . Initialize ( property , genericType , label , fieldInfo ) ;
91
+ return rawReferenceDrawer ;
99
92
case ReferenceMode . Unity :
100
- return original is UnityReferenceDrawer
101
- ? original
102
- : new UnityReferenceDrawer ( property , label , genericType ) ;
93
+ unityReferenceDrawer . Initialize ( property , genericType , label ) ;
94
+ return unityReferenceDrawer ;
103
95
default :
104
96
throw new ArgumentOutOfRangeException ( ) ;
105
97
}
0 commit comments