@@ -10,23 +10,20 @@ 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 />
19- public override bool CanCacheInspectorGUI ( SerializedProperty property )
20- {
21- return false ;
22- }
20+ public override bool CanCacheInspectorGUI ( SerializedProperty property ) => false ;
2321
2422 private void Initialize ( SerializedProperty property )
2523 {
2624 if ( serializedProperty == property )
2725 return ;
2826
29- activeDrawer = null ;
3027 serializedProperty = property ;
3128 genericType = GetGenericArgument ( ) ;
3229 Assert . IsNotNull ( genericType , "Unable to find generic argument, are you doing some shady inheritance?" ) ;
@@ -36,16 +33,14 @@ private void Initialize(SerializedProperty property)
3633 public override float GetPropertyHeight ( SerializedProperty property , GUIContent label )
3734 {
3835 Initialize ( property ) ;
39- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
40- return activeDrawer . GetHeight ( ) ;
36+ return GetReferenceDrawer ( property , label ) . GetHeight ( ) ;
4137 }
4238
4339 /// <inheritdoc />
4440 public override void OnGUI ( Rect position , SerializedProperty property , GUIContent label )
4541 {
4642 Initialize ( property ) ;
47- activeDrawer = GetReferenceDrawer ( activeDrawer , property , label ) ;
48- activeDrawer . OnGUI ( position ) ;
43+ GetReferenceDrawer ( property , label ) . OnGUI ( position ) ;
4944 }
5045
5146 private Type GetGenericArgument ( )
@@ -84,25 +79,19 @@ private Type GetGenericArgument()
8479 return null ;
8580 }
8681
87- private IReferenceDrawer GetReferenceDrawer (
88- IReferenceDrawer original ,
89- SerializedProperty property ,
90- GUIContent label
91- )
82+ private IReferenceDrawer GetReferenceDrawer ( SerializedProperty property , GUIContent label )
9283 {
9384 SerializedProperty modeProperty = serializedProperty . FindPropertyRelative ( "mode" ) ;
9485 ReferenceMode referenceMode = ( ReferenceMode ) modeProperty . enumValueIndex ;
9586
9687 switch ( referenceMode )
9788 {
9889 case ReferenceMode . Raw :
99- return original is RawReferenceDrawer
100- ? original
101- : new RawReferenceDrawer ( property , label , genericType , fieldInfo ) ;
90+ rawReferenceDrawer . Initialize ( property , genericType , label , fieldInfo ) ;
91+ return rawReferenceDrawer ;
10292 case ReferenceMode . Unity :
103- return original is UnityReferenceDrawer
104- ? original
105- : new UnityReferenceDrawer ( property , label , genericType ) ;
93+ unityReferenceDrawer . Initialize ( property , genericType , label ) ;
94+ return unityReferenceDrawer ;
10695 default :
10796 throw new ArgumentOutOfRangeException ( ) ;
10897 }
0 commit comments