Beispiel #1
0
        public override void OnPostTargetMembersGUI()
        {
            if (IsMultiSelect)
            {
                return;
            }

            InspectorGUI.HandleFrame(TrackWheel.Frame, 1);
        }
Beispiel #2
0
        public void OnInspectorGUI()
        {
            if (Mode == ToolMode.Direction)
            {
                StartFrameNameId = "Frame";
            }

            StartFrameToolEnable = Line.Valid;
            EndFrameToolEnable   = Line.Valid;

            bool toggleCreateEdge    = false;
            bool toggleFlipDirection = false;
            bool toggleRenderAsArrow = false;
            bool showTools           = !EditorApplication.isPlaying;

            if (showTools)
            {
                var toolButtonData = new List <InspectorGUI.ToolButtonData>();
                toolButtonData.Add(InspectorGUI.ToolButtonData.Create(ToolIcon.VisualizeLineDirection,
                                                                      RenderAsArrow,
                                                                      "Visualize line direction.",
                                                                      () => toggleRenderAsArrow = true,
                                                                      Mode != ToolMode.Direction));
                toolButtonData.Add(InspectorGUI.ToolButtonData.Create(ToolIcon.FlipDirection,
                                                                      false,
                                                                      "Flip direction.",
                                                                      () => toggleFlipDirection = true,
                                                                      Line.Valid));
                toolButtonData.Add(InspectorGUI.ToolButtonData.Create(ToolIcon.FindTransformGivenEdge,
                                                                      EdgeDetectionToolEnable,
                                                                      "Find line given edge.",
                                                                      () => toggleCreateEdge = true));
                InspectorGUI.ToolButtons(toolButtonData.ToArray());
            }

            if (toggleCreateEdge)
            {
                EdgeDetectionToolEnable = !EdgeDetectionToolEnable;
            }

            if (toggleFlipDirection && EditorUtility.DisplayDialog("Line direction",
                                                                   "Flip direction of " + Name + "?",
                                                                   "Yes",
                                                                   "No"))
            {
                StartFrameToolEnable = false;

                if (Mode == ToolMode.Direction)
                {
                    Line.End.Position   = Line.End.Position - 2.0f * Line.Length * Line.Direction;
                    Line.Start.Rotation = Quaternion.Euler(-Line.Start.Rotation.eulerAngles);
                    Line.End.Rotation   = Quaternion.Euler(-Line.End.Rotation.eulerAngles);
                }
                else
                {
                    var tmp = Line.Start;
                    Line.Start = Line.End;
                    Line.End   = tmp;
                }
            }
            if (toggleRenderAsArrow)
            {
                RenderAsArrow = !RenderAsArrow;
            }

            if (!Line.Valid)
            {
                InspectorGUI.WarningLabel(Name + " isn't created - use Tools to configure.");
            }

            if (StartFrameToolEnable)
            {
                if (InspectorGUI.Foldout(GetToggleData(StartFrameNameId),
                                         GUI.MakeLabel(StartFrameNameId, true)))
                {
                    StartFrameTool.ForceDisableTransformHandle = EditorApplication.isPlaying;
                    using (new GUI.EnabledBlock(!EditorApplication.isPlaying))
                        InspectorGUI.HandleFrame(StartFrameTool.Frame, 1);
                }
            }
            if (EndFrameToolEnable)
            {
                if (InspectorGUI.Foldout(GetToggleData(EndFrameNameId),
                                         GUI.MakeLabel(EndFrameNameId, true)))
                {
                    EndFrameTool.ForceDisableTransformHandle = EditorApplication.isPlaying;
                    using (new GUI.EnabledBlock(!EditorApplication.isPlaying))
                        InspectorGUI.HandleFrame(EndFrameTool.Frame, 1);
                }
            }

            Synchronize();
        }
Beispiel #3
0
        private void RouteGUI()
        {
            var addNewPressed       = false;
            var insertBeforePressed = false;
            var insertAfterPressed  = false;
            var erasePressed        = false;

            NodeT listOpNode = null;

            Undo.RecordObject(Route, "Route changed");

            if (InspectorGUI.Foldout(EditorData.Instance.GetData(Parent,
                                                                 "Route",
                                                                 entry => { entry.Bool = true; }),
                                     GUI.MakeLabel("Route")))
            {
                var validatedRoute = Route.GetValidated();
                foreach (var validatedNode in validatedRoute)
                {
                    var node = validatedNode.Node;
                    using (InspectorGUI.IndentScope.Single) {
                        var foldoutState = NodeFoldout(validatedNode);
                        if (foldoutState.Foldout)
                        {
                            OnPreFrameGUI(node);

                            InspectorGUI.HandleFrame(node, 1);

                            OnPostFrameGUI(node);
                        }

                        if (listOpNode == null && foldoutState.ButtonPressed)
                        {
                            listOpNode = node;
                        }

                        insertBeforePressed = insertBeforePressed || foldoutState.InsertBefore;
                        insertAfterPressed  = insertAfterPressed || foldoutState.InsertAfter;
                        erasePressed        = erasePressed || foldoutState.Erase;
                    }

                    if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition) &&
                        Event.current.type == EventType.MouseDown &&
                        Event.current.button == 0)
                    {
                        Selected = node;
                    }
                }

                GUILayout.BeginHorizontal();
                {
                    InspectorGUI.Separator(1, EditorGUIUtility.singleLineHeight);

                    addNewPressed = InspectorGUI.Button(MiscIcon.EntryAdd,
                                                        true,
                                                        "Add new node to the route.",
                                                        GUILayout.Width(18));

                    if (listOpNode == null && addNewPressed)
                    {
                        listOpNode = Route.LastOrDefault();
                    }
                }
                GUILayout.EndHorizontal();
            }
            else
            {
                InspectorGUI.Separator(1, 3);
            }

            if (addNewPressed || insertBeforePressed || insertAfterPressed)
            {
                NodeT newRouteNode = null;
                // Clicking "Add" will not copy data from last node.
                newRouteNode = listOpNode != null?
                               addNewPressed?
                               RouteNode.Create <NodeT>(null, listOpNode.Position, listOpNode.Rotation) :
                                   RouteNode.Create <NodeT>(listOpNode.Parent, listOpNode.LocalPosition, listOpNode.LocalRotation) :
                                       RouteNode.Create <NodeT>();

                OnNodeCreate(newRouteNode, listOpNode, addNewPressed);

                if (addNewPressed)
                {
                    Route.Add(newRouteNode);
                }
                if (insertBeforePressed)
                {
                    Route.InsertBefore(newRouteNode, listOpNode);
                }
                if (insertAfterPressed)
                {
                    Route.InsertAfter(newRouteNode, listOpNode);
                }

                if (newRouteNode != null)
                {
                    CreateRouteNodeTool(newRouteNode);
                    Selected = newRouteNode;
                }
            }
            else if (listOpNode != null && erasePressed)
            {
                Selected = null;
                Route.Remove(listOpNode);
            }
        }