@@ -10,11 +10,12 @@ namespace TNRD
1010 [ CustomPropertyDrawer ( typeof ( SerializableInterface < > ) , true ) ]
1111 internal sealed class SerializableInterfacePropertyDrawer : PropertyDrawer
1212 {
13+ private readonly RawReferenceDrawer rawReferenceDrawer = new RawReferenceDrawer ( ) ;
14+ private readonly UnityReferenceDrawer unityReferenceDrawer = new UnityReferenceDrawer ( ) ;
15+
1316 private SerializedProperty serializedProperty ;
1417 private Type genericType ;
1518
16- private IReferenceDrawer activeDrawer ;
17-
1819 /// <inheritdoc />
1920 public override bool CanCacheInspectorGUI ( SerializedProperty property ) => false ;
2021
@@ -23,7 +24,6 @@ private void Initialize(SerializedProperty property)
2324 if ( serializedProperty == property )
2425 return ;
2526
26- activeDrawer = null ;
2727 serializedProperty = property ;
2828 genericType = GetGenericArgument ( ) ;
2929 Assert . IsNotNull ( genericType , "Unable to find generic argument, are you doing some shady inheritance?" ) ;
@@ -33,16 +33,14 @@ private void Initialize(SerializedProperty property)
3333 public override float GetPropertyHeight ( SerializedProperty property , GUIContent label )
3434 {
3535 Initialize ( property ) ;
36- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
37- return activeDrawer . GetHeight ( ) ;
36+ return GetReferenceDrawer ( property , label ) . GetHeight ( ) ;
3837 }
3938
4039 /// <inheritdoc />
4140 public override void OnGUI ( Rect position , SerializedProperty property , GUIContent label )
4241 {
4342 Initialize ( property ) ;
44- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
45- activeDrawer . OnGUI ( position ) ;
43+ GetReferenceDrawer ( property , label ) . OnGUI ( position ) ;
4644 }
4745
4846 private Type GetGenericArgument ( )
@@ -81,25 +79,19 @@ private Type GetGenericArgument()
8179 return null ;
8280 }
8381
84- private IReferenceDrawer GetReferenceDrawer (
85- IReferenceDrawer original ,
86- SerializedProperty property ,
87- GUIContent label
88- )
82+ private IReferenceDrawer GetReferenceDrawer ( SerializedProperty property , GUIContent label )
8983 {
9084 SerializedProperty modeProperty = serializedProperty . FindPropertyRelative ( "mode" ) ;
9185 ReferenceMode referenceMode = ( ReferenceMode ) modeProperty . enumValueIndex ;
9286
9387 switch ( referenceMode )
9488 {
9589 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 ;
9992 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 ;
10395 default :
10496 throw new ArgumentOutOfRangeException ( ) ;
10597 }
0 commit comments