Пример #1
0
 private void DrawExpanded(ReflectedProperty property, ResponseCurve curve)
 {
     DrawHeaderBox(property, false, curve);
     property["curve"].Value = EditorGUIX.ResponseCurveField(guiRect.GetFieldRect(7), curve);
     guiRect.GetFieldRect();
     EditorGUIX.DrawProperties(guiRect.GetRect(), property, new[] { "curve" });
 }
Пример #2
0
        public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label)
        {
            GUIRect guiRect = new GUIRect();

            guiRect.SetRect(position);

            EditorGUIX.PropertyField(guiRect.GetFieldRect(), property[NameField]);
            EditorGUIX.PropertyField(guiRect.GetFieldRect(), property[ShipCategoryField]);
        }
        public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label = null)
        {
            guiRect.SetRect(position);
            Initialize(property);

            int index = -1;
            int newIndex;

            if (property.Value != null)
            {
                index = Array.IndexOf(subclasses, property.Type);
            }

            if (index != -1)
            {
                Rect  rect  = guiRect.GetFieldRect();
                float width = EditorGUIUtility.labelWidth;
                Rect  r1    = new Rect(rect)
                {
                    width = width
                };
                Rect r2 = new Rect(rect)
                {
                    x = rect.x + width, width = rect.width - width
                };
                property.IsExpanded = EditorGUI.Foldout(r1, property.IsExpanded, property.Label);
                newIndex            = EditorGUI.Popup(r2, index + 1, subclassNames) - 1;
            }
            else
            {
                newIndex = EditorGUI.Popup(guiRect.GetFieldRect(), property.Label, index + 1, subclassNames) - 1;
            }

            if (index != newIndex)
            {
                property.SetValueAndCopyCompatibleProperties(
                    newIndex == -1 ? null : EditorReflector.MakeInstance(subclasses[newIndex])
                    );
                property.IsExpanded = newIndex != -1;
            }

            if (property.IsExpanded && newIndex != -1)
            {
                EditorGUI.indentLevel += 2;
                EditorGUIX.DrawProperties(guiRect.GetRect(), property);
                EditorGUI.indentLevel -= 2;
            }
        }
Пример #4
0
        public static void TypePopup <T>(GUIRect guiRect, GUIContent label, ReflectedProperty property)
        {
            Rect rect = guiRect.GetFieldRect();

            rect = EditorGUI.PrefixLabel(rect, label);
            TypePopup <T>(rect, property);
        }
Пример #5
0
        public static Type TypePopup <T>(GUIRect guiRect, GUIContent label, Type currentType)
        {
            Rect rect = guiRect.GetFieldRect();

            rect = EditorGUI.PrefixLabel(rect, label);
            return(TypePopup <T>(rect, currentType));
        }
Пример #6
0
        public static bool Foldout(GUIRect rect, ReflectedProperty property, GUIContent content = null)
        {
            bool isExpanded = EditorGUI.Foldout(rect.GetFieldRect(), property.IsExpanded, content ?? property.GUIContent);

            property.IsExpanded = isExpanded;
            return(isExpanded);
        }
Пример #7
0
        public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label)
        {
            position = EditorGUI.IndentedRect(position);
            GUIRect guiRect = new GUIRect(position);

            string goalName = property.Type.Name.Replace("Goal", "");

            goalName = $"[{ObjectNames.NicifyVariableName(goalName)}]";

            GUIContent content = EditorGUIX.TempLabel(goalName);

            Rect rect = guiRect.GetFieldRect();

            rect.width *= 0.25f;
            EditorGUIX.Foldout(rect, property, content);
            rect.x    += rect.width;
            rect.width = rect.width * 3f;

            EditorGUIX.PropertyField(rect, property[NameField], GUIContent.none);

            if (property.IsExpanded)
            {
                EditorGUIX.DrawProperties(guiRect, property, SkipList);
                ReorderableListGUI.ListFieldAbsolute(EditorGUI.IndentedRect(guiRect.GetRect()), adapter);
            }
        }
Пример #8
0
        public static ResponseCurve ResponseCurveField(Rect position, ResponseCurve curve)
        {
            int controlID = GUIUtility.GetControlID(FocusType.Passive);

            ResponseCurveFieldState state = (ResponseCurveFieldState)GUIUtility.GetStateObject(
                typeof(ResponseCurveFieldState),
                controlID);

            Rect left = new Rect(position);

            left.width *= 0.5f;
            Rect right = new Rect(position);

            right.x     += left.width;
            right.width -= left.width;

            if (Event.current.type == EventType.Repaint)
            {
                curve.DrawGraph(state.texture, right.width, right.height);
            }

            EditorGUI.DrawPreviewTexture(right, state.texture);

            float oldWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 80f;

            s_guiRect.SetRect(left);
            curve.curveType = (ResponseCurveType)EditorGUI.EnumPopup(s_guiRect.GetFieldRect(), "Curve Type", curve.curveType);
            curve.slope     = EditorGUI.FloatField(s_guiRect.GetFieldRect(), "Slope", curve.slope);
            curve.exp       = EditorGUI.FloatField(s_guiRect.GetFieldRect(), "Exp", curve.exp);
            curve.vShift    = EditorGUI.FloatField(s_guiRect.GetFieldRect(), "V Shift", curve.vShift);
            curve.hShift    = EditorGUI.FloatField(s_guiRect.GetFieldRect(), "H Shift", curve.hShift);
            curve.threshold = EditorGUI.FloatField(s_guiRect.GetFieldRect(), "Threshold", curve.threshold);

            Rect lineRect = s_guiRect.GetFieldRect();

            Rect toggleRect = new Rect(lineRect)
            {
                width = EditorGUIUtility.labelWidth + 16f
            };

            Rect selectRect = new Rect(lineRect)
            {
                x     = lineRect.x + toggleRect.width,
                width = lineRect.width - toggleRect.width
            };

            curve.invert = EditorGUI.Toggle(toggleRect, "Invert", curve.invert);

            int idx = EditorGUI.Popup(selectRect, 0, PresetCurveNames);

            curve = ApplyResponseCurvePreset(PresetCurveNames[idx], curve);

            EditorGUIUtility.labelWidth = oldWidth;
            return(curve);
        }
Пример #9
0
        public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label)
        {
            guiRect.SetRect(position);

            float oldLabelWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 100;
            EditorGUIX.PropertyField(guiRect.GetFieldRect(), property[NameField]);
            EditorGUIUtility.labelWidth = oldLabelWidth;

            EditorGUIX.PropertyField(guiRect, property[GoalsField]);
        }
Пример #10
0
        public static void TypePopup <T>(GUIRect guiRect, ReflectedProperty property)
        {
            Type currentType = (Type)property.Value;

            property.Value = TypePopup <T>(guiRect.GetFieldRect(), currentType);
        }
Пример #11
0
 public static Type ConstructableTypePopup <T>(GUIRect guiRect, Type currentType)
 {
     return(ConstructableTypePopup <T>(guiRect.GetFieldRect(), currentType));
 }
Пример #12
0
        public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label = null)
        {
            guiRect.SetRect(position);
            if (style == null)
            {
                style = new GUIStyle(GUI.skin.box);
            }

            if (graphTexture == null)
            {
                graphTexture = new Texture2D(1, 1, TextureFormat.RGBA32, true);
            }

            curve = (ResponseCurve)property.Value ?? new ResponseCurve();

            if (property.IsExpanded)
            {
                EditorGUIX.Foldout(guiRect, property);
            }

            if (!property.IsExpanded)
            {
                DrawGraph(64, 32);
                GUIContent content = EditorGUIX.TempLabel(curve.ShortDisplayString);
                content.image   = graphTexture;
                style.alignment = TextAnchor.MiddleLeft;
                GUI.Box(guiRect.GetFieldRect(2), content, style);
                content.image = null;
                if (Event.current.type == EventType.MouseDown)
                {
                    if (position.Contains(Event.current.mousePosition))
                    {
                        property.IsExpanded = true;
                        Event.current.Use();
                    }
                }
                return;
            }

            GUIRect[] splits = guiRect.SplitHorizontal(0.5f);
            GUIRect   left   = splits[0];
            GUIRect   right  = splits[1];

            DrawGraph(right.GetRect().width, right.GetRect().height);

            GUIContent graphContent = EditorGUIX.TempLabel(string.Empty);

            graphContent.image = graphTexture;
            GUI.Box(right.GetRect(), graphContent, style);
            graphContent.image = null;
            float oldWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 100;

            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("curveType"));
            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("slope"));
            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("exp"));
            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("vShift"));
            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("hShift"));
            EditorGUIX.PropertyField(left.GetFieldRect(), property.FindProperty("threshold"));

            Rect lineRect   = left.GetFieldRect();
            Rect toggleRect = new Rect(lineRect)
            {
                width = EditorGUIUtility.labelWidth + 16f
            };
            Rect selectRect = new Rect(lineRect)
            {
                x     = lineRect.x + toggleRect.width,
                width = lineRect.width - toggleRect.width
            };

            EditorGUIX.PropertyField(toggleRect, property.FindProperty("invert"));

            int idx = EditorGUI.Popup(selectRect, 0, presetCurveNames);

            property.Value = GetPreset(presetCurveNames[idx], curve);

            EditorGUIUtility.labelWidth = oldWidth;
            property.ApplyChanges();
        }
Пример #13
0
 public override void OnGUI(Rect position, ReflectedProperty property, GUIContent label)
 {
     guiRect.SetRect(position);
     EditorGUIX.PropertyField(guiRect.GetFieldRect(), property["name"]);
     EditorGUIX.DrawProperties(guiRect.GetFieldRect(8), property, new [] { "name" });
 }
Пример #14
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            if (graphTexture == null)
            {
                graphTexture = new Texture2D(1, 1, TextureFormat.RGBA32, true);
            }

            curve = SerializedPropertyUtil.GetTargetObjectOfProperty(property) as ResponseCurve ?? new ResponseCurve();
            GUIRect rect = new GUIRect(position);

            isCurveShown = curve.__editorOnlyFoldout__ = EditorGUI.Foldout(rect.GetFieldRect(), curve.__editorOnlyFoldout__, label.text);

            GUIStyle style = new GUIStyle(GUI.skin.box);

            if (!isCurveShown)
            {
                DrawGraph(64, 32);
                GUIContent content = new GUIContent();
                content.text    = curve.DisplayString;
                content.image   = graphTexture;
                style.alignment = TextAnchor.MiddleLeft;
                GUI.Box(rect.GetFieldRect(2), content, style);
                return;
            }

            GUIRect[] splits = rect.SplitHorizontal(0.5f);
            GUIRect   left   = splits[0];
            GUIRect   right  = splits[1];

            DrawGraph(right.GetRect().width, right.GetRect().height);

            GUIContent graphContent = new GUIContent();

            graphContent.image = graphTexture;
            GUI.Box(right.GetRect(), graphContent, style);
            float oldWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 100;

            DrawerUtil.PushIndentLevel(1);
            EditorGUI.BeginChangeCheck();
            {
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("curveType"));
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("slope"));
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("exp"));
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("vShift"));
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("hShift"));
                EditorGUI.PropertyField(left.GetFieldRect(), property.FindPropertyRelative("threshold"));
                GUIRect   lineRect      = new GUIRect(left.GetFieldRect());
                GUIRect[] lineRectParts = lineRect.SplitHorizontal(0.5f);
                EditorGUI.PropertyField(lineRectParts[0].GetRect(), property.FindPropertyRelative("invert"));


                if (GUI.Button(lineRectParts[1].GetRect(), "Reset Curve"))
                {
                    property.FindPropertyRelative("curveType").intValue   = (int)ResponseCurveType.Polynomial;
                    property.FindPropertyRelative("slope").floatValue     = 1f;
                    property.FindPropertyRelative("exp").floatValue       = 1f;
                    property.FindPropertyRelative("vShift").floatValue    = 0f;
                    property.FindPropertyRelative("hShift").floatValue    = 0f;
                    property.FindPropertyRelative("threshold").floatValue = 0f;
                    property.FindPropertyRelative("invert").boolValue     = false;
                }
            }
            DrawerUtil.PopIndentLevel();
            EditorGUIUtility.labelWidth = oldWidth;
            if (EditorGUI.EndChangeCheck())
            {
                property.serializedObject.ApplyModifiedProperties();
            }
        }