// Return a selector instance for a given type pair. public static PropertySelector GetInstance (SerializedProperty spTarget, SerializedProperty spPropertyType) { var key = spTarget.objectReferenceValue.GetType() + spPropertyType.stringValue; // Try getting from the dictionary. PropertySelector selector; if (_instances.TryGetValue(key, out selector)) { return(selector); } // New instance selector = new PropertySelector(spTarget, spPropertyType); _instances[key] = selector; return(selector); }
void ShowPropertyBinderEditor(int index) { var prop = _binders.GetArrayElementAtIndex(index); var finder = new RelativePropertyFinder(prop); // Header CoreEditorUtils.DrawSplitter(); var toggle = CoreEditorUtils.DrawHeaderToggle (PropertyBinderNameUtil.Shorten(prop), prop, finder["_enabled"], pos => CreateHeaderContextMenu(index) .DropDown(new Rect(pos, Vector2.zero))); if (!toggle) { return; } _binders.serializedObject.Update(); EditorGUILayout.Space(); // Properties var target = finder["_target"]; EditorGUILayout.PropertyField(target); if (ComponentSelector.GetInstance(target).ShowGUI(target) && PropertySelector.GetInstance(target, finder["_propertyType"]) .ShowGUI(finder["_propertyName"])) { EditorGUILayout.PropertyField(finder["_value0"], Styles.Value0); EditorGUILayout.PropertyField(finder["_value1"], Styles.Value1); } _binders.serializedObject.ApplyModifiedProperties(); EditorGUILayout.Space(); }