コード例 #1
0
        // 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);
        }
コード例 #2
0
        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();
        }