public static void ShowField(BGCurvePointI point, BGCurvePointField field, Action <string, AnimationCurve> animationCurveCallback = null)
        {
            var name = point.Curve.IndexOf(field) + ") " + field.FieldName;

            switch (field.Type)
            {
            case BGCurvePointField.TypeEnum.Bool:
                BGEditorUtility.BoolField(name, point.GetField <bool>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Int:
                BGEditorUtility.IntField(name, point.GetField <int>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Float:
                BGEditorUtility.FloatField(name, point.GetField <float>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Vector3:
                BGEditorUtility.Vector3Field(name, null, point.GetField <Vector3>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Bounds:
                BGEditorUtility.BoundsField(name, point.GetField <Bounds>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Color:
                BGEditorUtility.ColorField(name, point.GetField <Color>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.String:
                BGEditorUtility.TextField(name, point.GetField <string>(field.FieldName), v => point.SetField(field.FieldName, v), false);
                break;

            case BGCurvePointField.TypeEnum.AnimationCurve:
                BGEditorUtility.Horizontal(() =>
                {
                    BGEditorUtility.AnimationCurveField(name, point.GetField <AnimationCurve>(field.FieldName), v => point.SetField(field.FieldName, v));

                    if (animationCurveCallback != null && GUILayout.Button("Set", GUILayout.Width(40)))
                    {
                        animationCurveCallback(field.FieldName, point.GetField <AnimationCurve>(field.FieldName));
                    }
                });

                break;

            case BGCurvePointField.TypeEnum.Quaternion:
                BGEditorUtility.QuaternionField(name, point.GetField <Quaternion>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.GameObject:
                BGEditorUtility.GameObjectField(name, point.GetField <GameObject>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.Component:
                BGEditorUtility.ComponentChoosableField(name, point.GetField <Component>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.BGCurve:
                BGEditorUtility.BGCurveField(name, point.GetField <BGCurve>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;

            case BGCurvePointField.TypeEnum.BGCurvePointComponent:
                BGEditorUtility.Horizontal(() =>
                {
                    BGEditorUtility.BGCurvePointComponentField(name, point.GetField <BGCurvePointComponent>(field.FieldName), v => point.SetField(field.FieldName, v));
                    var currentPoint = point.GetField <BGCurvePointComponent>(field.FieldName);

                    if (currentPoint == null || currentPoint.Curve.PointsCount < 2)
                    {
                        return;
                    }

                    var indexOfField = currentPoint.Curve.IndexOf(currentPoint);

                    if (GUILayout.Button("" + indexOfField, GUILayout.Width(40)))
                    {
                        BGCurveChosePointWindow.Open(indexOfField, currentPoint.Curve, c => point.SetField(field.FieldName, c));
                    }
                });
                break;

            case BGCurvePointField.TypeEnum.BGCurvePointGO:
                BGEditorUtility.BGCurvePointGOField(name, point.GetField <BGCurvePointGO>(field.FieldName), v => point.SetField(field.FieldName, v));
                break;
            }
        }
Beispiel #2
0
        private static void ShowSettings()
        {
            BGEditorUtility.SwapLabelWidth(300, () =>
            {
                BGEditorUtility.Vertical(new GUIStyle("Box")
                {
                    padding = new RectOffset(Padding, Padding, Padding, Padding)
                }, () =>
                {
                    EditorGUILayout.LabelField("BG Curve Editor Settings", new GUIStyle("Box")
                    {
                        fontSize = 22
                    });

                    if (GUILayout.Button(new GUIContent("Reset to defaults", "Reset all editor settings to their defaults.")) &&
                        BGEditorUtility.Confirm("Reset settings", "Reset All Editor settings to defaults? It does not affect curve's settings.", "Reset"))
                    {
                        BGCurveSettingsForEditor.Reset();
                    }

                    //coordinates for points and controls
                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.PopupField(BGCurveSettingsForEditor.InspectorPointCoordinateSpace, "Point Coordinates",
                                                   b => BGCurveSettingsForEditor.InspectorPointCoordinateSpace = (BGCurveSettingsForEditor.CoordinateSpaceEnum)b);
                        EditorGUILayout.HelpBox("Coordinate Space for points (for Inspector's fields inder Points tab.)", MessageType.Info);
                    });

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.PopupField(BGCurveSettingsForEditor.InspectorControlCoordinateSpace, "Point Controls Coordinates",
                                                   b => BGCurveSettingsForEditor.InspectorControlCoordinateSpace = (BGCurveSettingsForEditor.CoordinateSpaceEnum)b);
                        EditorGUILayout.HelpBox("Coordinate Space for points controls (for Inspector's fields inder Points tab.)", MessageType.Info);
                    });


                    // disable fields
                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableSceneViewPointMenu, "Disable SV Point Menu", b => BGCurveSettingsForEditor.DisableSceneViewPointMenu = b);
                        EditorGUILayout.HelpBox("Disable point's menu, which is activated in Scene View by holding Ctrl over a point.", MessageType.Info);
                    });

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableSceneViewSelectionMenu, "Disable SV Selection Menu", b => BGCurveSettingsForEditor.DisableSceneViewSelectionMenu = b);
                        EditorGUILayout.HelpBox("Disable selection's menu, which is activated in Scene View by holding Ctrl over a selection handles.", MessageType.Info);
                    });

/*
 *                                                                              BGEUtil.VerticalBox(() =>
 *                                                                              {
 *                                                                                  BGEUtil.ToggleField(BGCurveEditorSettings.DisableInspectorPointMenu, "Disable Inspector Points Menu", b => BGCurveEditorSettings.DisableInspectorPointMenu = b);
 *                                                                                  EditorGUILayout.HelpBox("Disable points menu, which is located under Points tab in Inspector.", MessageType.Info);
 *                                                                              });
 */

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableRectangularSelection, "Disable Rectangular Selection", b => BGCurveSettingsForEditor.DisableRectangularSelection = b);
                        EditorGUILayout.HelpBox("Disable rectangular selection in Scene View, which is activated by holding shift and mouse dragging.", MessageType.Info);
                    });


                    // colors
                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ColorField("Rectangular Selection Color", BGCurveSettingsForEditor.ColorForRectangularSelection, b => BGCurveSettingsForEditor.ColorForRectangularSelection = b);
                        EditorGUILayout.HelpBox("Color for Rectangular Selection background", MessageType.Info);
                    });

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ColorField("Add and Snap 3D Handles Color", BGCurveSettingsForEditor.HandleColorForAddAndSnap3D, b => BGCurveSettingsForEditor.HandleColorForAddAndSnap3D = b);
                        EditorGUILayout.HelpBox("Color for handles, shown for 3D curve in Scene View when new point is previewed.", MessageType.Info);
                    });

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ColorField("Add and Snap 2D Handles Color", BGCurveSettingsForEditor.HandleColorForAddAndSnap2D, b => BGCurveSettingsForEditor.HandleColorForAddAndSnap2D = b);
                        EditorGUILayout.HelpBox("Color for handles, shown for 2D curve in Scene View when new point is previewed.", MessageType.Info);
                    });

                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ColorField("Points labels back color", BGCurveSettingsForEditor.ColorForLabelBackground, b => BGCurveSettingsForEditor.ColorForLabelBackground = b);
                        EditorGUILayout.HelpBox("Background color for points labels in Scene View.", MessageType.Info);
                    });
                    BGEditorUtility.VerticalBox(() =>
                    {
                        BGEditorUtility.ColorField("New section preview color", BGCurveSettingsForEditor.ColorForNewSectionPreview, b => BGCurveSettingsForEditor.ColorForNewSectionPreview = b);
                        EditorGUILayout.HelpBox("Color for new section preview in Scene View.", MessageType.Info);
                    });
                });
            });
        }
Beispiel #3
0
            public void Ui(BGTableView ui)
            {
                var cursor = 0;

                // ==========================   First row
                //number
                ui.NextColumn("" + index, "Field's index", GetWidth(ui, ref cursor));

                //name
                ui.NextColumn(rect =>
                {
                    BGEditorUtility.TextField(rect, field.FieldName, s =>
                    {
                        if (NameHasError(field.Curve, s))
                        {
                            return;
                        }
                        Change(() => field.FieldName = s);
                    }, true);
                }, GetWidth(ui, ref cursor));

                //type
                ui.NextColumn(field.Type.ToString(), "Field's Type", GetWidth(ui, ref cursor));

                //show in Points menu
                ui.NextColumn(rect => BGEditorUtility.BoolField(rect, BGPrivateField.GetShowInPointsMenu(field), b => Change(() => BGPrivateField.SetShowInPointsMenu(field, b))),
                              GetWidth(ui, ref cursor));

                //delete icon
                ui.NextColumn(rect =>
                {
                    if (!GUI.Button(rect, deleteIcon) || !BGEditorUtility.Confirm("Delete", "Are you sure you want to delete '" + field.FieldName + "' field?", "Delete"))
                    {
                        return;
                    }

                    BGPrivateField.Invoke(field.Curve, BGCurve.MethodDeleteField, field, (Action <BGCurvePointField>)Undo.DestroyObjectImmediate);

                    GUIUtility.ExitGUI();
                }, GetWidth(ui, ref cursor));

                //\r\n
                ui.NextRow();

                // ==========================   Second row
                //does not support
                if (!SupportHandles(field.Type))
                {
                    return;
                }

                ui.NextColumn("      Handles", "Field's index", 25);

                //handles type
                ui.NextColumn(
                    rect => BGEditorUtility.PopupField(rect, (HandlesType)BGPrivateField.GetHandlesType(field), Type2Handles[field.Type],
                                                       b => Change(() => BGPrivateField.SetHandlesType(field, (int)((HandlesType)b)))), 30);

                //Handles color
                ui.NextColumn(rect => BGEditorUtility.ColorField(rect, BGPrivateField.GetHandlesColor(field), b => Change(() => BGPrivateField.SetHandlesColor(field, b))), 30);

                //show handles in Scene View
                ui.NextColumn(rect => BGEditorUtility.BoolField(rect, BGPrivateField.GetShowHandles(field), b => Change(() => BGPrivateField.SetShowHandles(field, b))), 5);

                //empty column under delete button
                ui.NextColumn(rect => EditorGUI.LabelField(rect, ""), 10);

                //\r\n
                ui.NextRow();
            }
Beispiel #4
0
 protected void NextColorRow(BGTableView ui, string label, string tooltip, Color color, Action <Color> func)
 {
     ui.NextColumn(label, tooltip);
     ui.NextColumn(rect => BGEditorUtility.ColorField(rect, color, func));
     ui.NextRow();
 }
        private static void ShowSettings()
        {
            BGEditorUtility.SwapLabelWidth(300, () =>
            {
                BGEditorUtility.Vertical(new GUIStyle("Box")
                {
                    padding = new RectOffset(Padding, Padding, Padding, Padding)
                }, () =>
                {
                    EditorGUILayout.LabelField(settings.Name, new GUIStyle("Box")
                    {
                        fontSize = 22
                    });

                    if (GUILayout.Button(new GUIContent("Reset to defaults", "Reset all editor settings to their defaults.")) &&
                        BGEditorUtility.Confirm("Reset settings", "Reset All Editor settings to defaults? It does not affect local settings.", "Reset"))
                    {
                        settings.Reset();
                    }

                    var keys = settings.Keys;
                    foreach (var key in keys)
                    {
                        var descriptor = settings.GetSetting(key);
                        if (descriptor.Name == null)
                        {
                            continue;
                        }

                        Action ui;
                        if (descriptor is BGAbstractSettingsForEditor.SettingEnum)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingEnum)descriptor;
                            ui          = () =>
                            {
                                setting.Value = setting.Ui(setting.Value);
                            };
                        }
                        else if (descriptor is BGAbstractSettingsForEditor.SettingBool)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingBool)descriptor;
                            ui          = () => { BGEditorUtility.ToggleField(setting.Value, descriptor.Name, b => setting.Value = b); };
                        }
                        else if (descriptor is BGAbstractSettingsForEditor.SettingInt)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingInt)descriptor;
                            ui          = () => { BGEditorUtility.IntField(descriptor.Name, setting.Value, b => setting.Value = b); };
                        }
                        else if (descriptor is BGAbstractSettingsForEditor.SettingString)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingString)descriptor;
                            ui          = () => { BGEditorUtility.TextField(descriptor.Name, setting.Value, b => setting.Value = b, false); };
                        }
                        else if (descriptor is BGAbstractSettingsForEditor.SettingFloat)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingFloat)descriptor;
                            ui          = () => { BGEditorUtility.FloatField(descriptor.Name, setting.Value, b => setting.Value = b); };
                        }
                        else if (descriptor is BGAbstractSettingsForEditor.SettingColor)
                        {
                            var setting = (BGAbstractSettingsForEditor.SettingColor)descriptor;
                            ui          = () => { BGEditorUtility.ColorField(descriptor.Name, setting.Value, b => setting.Value = b); };
                        }
                        else
                        {
                            throw new UnityException("Unsupported type");
                        }

                        BGEditorUtility.VerticalBox(() =>
                        {
                            ui();
                            EditorGUILayout.HelpBox(descriptor.Description, MessageType.Info);
                        });
                    }
                });
            });
        }