Esempio n. 1
0
        void DrawParamsWindow()
        {
            float w = 350;
            float h = 130 + Mathf.Max(serializedObject.FindProperty("frames").GetArrayElementAtIndex(frameToEdit)
                                      .FindPropertyRelative("paramList._params").arraySize - 1, 0)
                      * ParamPropertyDrawer.GetPropertyHeight();
            float x          = position.width - 24 - w;
            float y          = position.height - 24 - h;
            bool  wideMode   = EditorGUIUtility.wideMode;
            float labelWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 100f;
            EditorGUIUtility.wideMode   = true;
            GUILayout.BeginArea(new Rect(x, y, w, h), "Clingy Sprite Params", new GUIStyle("window"));
            EditorGUILayout.PropertyField(serializedObject.FindProperty("previewSprite"));
            EditorGUILayout.Space();
            paramsRL.DoLayoutList();
            GUILayout.EndArea();
            EditorGUIUtility.labelWidth = labelWidth;
            EditorGUIUtility.wideMode   = wideMode;
        }
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            ParamSelectorAttribute attr = (ParamSelectorAttribute)attribute;
            Rect initialRect            = position;

            if (attr.providers == null || attr.providers.Length == 0)
            {
                attr.GetProvidersFromStrategy(GetStrategy(property));
            }
            else if (!attr.hasLabels)
            {
                attr.BuildLabels(GetStrategy(property));
            }

            EditorGUI.BeginProperty(position, label, property);
            EditorGUI.BeginDisabledGroup(attr.providers.Length == 0);

            position = EditorGUI.PrefixLabel(position, label);
            float width = position.width / 2 - 2;
            Rect  rect  = new Rect(position.x, position.y, width, EditorGUIUtility.singleLineHeight);

            int indentLevel = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 0;

            ParamRelativityType relativityType
                = (ParamRelativityType)property.FindPropertyRelative("relativityType").enumValueIndex;
            ParamNormalRelativity relativeTo
                = (ParamNormalRelativity)property.FindPropertyRelative("relativeTo").enumValueIndex;

            // draw the provider picker
            SerializedProperty prop = property.FindPropertyRelative("provider");

            DrawProviderPicker(rect, prop, attr);

            // draw the name prop
            rect.x += width + 4;
            prop    = property.FindPropertyRelative("defaultParam.name");
            EditorGUI.BeginChangeCheck();
            string newName = EditorGUI.DelayedTextField(rect, prop.stringValue);

            if (EditorGUI.EndChangeCheck())
            {
                prop.stringValue = newName;
            }

            EditorGUI.indentLevel = indentLevel + 1;
            float lineHeight = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
            float yOff       = lineHeight;

            // relativity
            if (relativityType != ParamRelativityType.None)
            {
                rect        = initialRect;
                rect.height = EditorGUIUtility.singleLineHeight;
                rect.y     += yOff;
                DrawRelativityProps(rect, property, attr);
                yOff += lineHeight;
            }

            // position options
            bool showPositionOptions = property.FindPropertyRelative("showPositionOptions").boolValue;

            if (showPositionOptions && relativityType == ParamRelativityType.Normal &&
                relativeTo != ParamNormalRelativity.World)
            {
                rect        = initialRect;
                rect.height = EditorGUIUtility.singleLineHeight;
                rect.y     += yOff;
                EditorGUI.PropertyField(rect, property.FindPropertyRelative("useTransform"));
                rect.y += lineHeight;
                EditorGUI.PropertyField(rect, property.FindPropertyRelative("useSpriteFlip"));
                yOff += lineHeight * 2;
            }

            // default value
            rect        = initialRect;
            rect.y     += yOff;
            rect.height = EditorGUIUtility.singleLineHeight;
            rect        = EditorGUI.PrefixLabel(rect, new GUIContent("Default"));
            ParamPropertyDrawer.DrawValueProp(rect, property.FindPropertyRelative("defaultParam"), "");

            EditorGUI.indentLevel = indentLevel;
            EditorGUI.EndDisabledGroup();
            EditorGUI.EndProperty();
        }