Пример #1
0
 private void DrawParameters(ConstellationEditorStyles editorStyles)
 {
     GUI.color = Color.white;
     if (NodeData.GetParameters() != null)
     {
         var i = 0;
         foreach (var parameter in NodeData.ParametersData)
         {
             var parameterControleName = NodeData.Guid + "-" + i;
             var isFocusable           = false;
             EditorGUIUtility.labelWidth = 25;
             EditorGUIUtility.fieldWidth = 10;
             var parameterRect     = GetParameterRect(i, editorStyles);
             var nodeAttributeRect = new Rect(NodeData.XPosition + 10, NodeData.YPosition + editorStyles.nodeTitleHeight, NodeData.SizeX - 20, NodeData.SizeY - editorStyles.nodeTitleHeight - 10);
             if (parameter.Value != null)
             {
                 GUI.SetNextControlName(parameterControleName);
                 var currentParameterValue = parameter.Value.GetString();
                 parameter.Value = ParametersStyleFactory.Draw(parameter.Type, parameterRect, nodeAttributeRect, parameter.Value, editorStyles, out isFocusable);
                 if (parameter.Value != null)
                 {
                     if (currentParameterValue != parameter.Value.GetString())
                     {
                         ParameterValueChanged(i);
                     }
                 }
             }
             if (GUI.GetNameOfFocusedControl() == parameterControleName && isFocusable)
             {
                 LastFocusedAttribute = parameterControleName;
             }
             i++;
         }
     }
 }
Пример #2
0
        public Rect GetParameterRect(int attributeID, ConstellationEditorStyles constellationEditorStyles)
        {
            var leftOffset  = constellationEditorStyles.inputSize + constellationEditorStyles.leftAttributeMargin;
            var rightOffset = constellationEditorStyles.rightAttributeMargin + constellationEditorStyles.outputSize + leftOffset;
            var topOffset   = 3;

            return(new Rect(NodeData.XPosition + leftOffset, NodeData.YPosition + ((AtrributeSize.height + constellationEditorStyles.attributeSpacing) * attributeID) + constellationEditorStyles.nodeTitleHeight - topOffset, NodeData.SizeX - rightOffset, AtrributeSize.height));
        }
        public ConstellationEditorStyles GetConstellationEditorConfig()
        {
            if (ConstellationEditorStyles == null)
            {
                ConstellationEditorStyles = (ConstellationEditorStyles)AssetDatabase.LoadAssetAtPath(ConstellationEditor.GetEditorPath() + "ConstellationStyle.Asset", typeof(ConstellationEditorStyles));
            }

            return(ConstellationEditorStyles);
        }
Пример #4
0
 public Color GetConnectionColor(bool _isWarm, string _type, ConstellationEditorStyles styles)
 {
     if (_isWarm)
     {
         return(styles.GetConstellationIOStylesByType(_type).WarmColor);
     }
     else
     {
         return(styles.GetConstellationIOStylesByType(_type).ColdColor);
     }
 }
Пример #5
0
 public Rect InputPosition(InputData _input, ConstellationEditorStyles constellationEditorStyles)
 {
     foreach (NodeData node in constellationScript.GetNodes())
     {
         var i = 0;
         foreach (InputData input in node.GetInputs())
         {
             if (_input.Guid == input.Guid)
             {
                 return(new Rect(node.XPosition,
                                 node.YPosition + constellationEditorStyles.nodeTitleHeight + ((constellationEditorStyles.inputSize + constellationEditorStyles.spacing) * i) + (constellationEditorStyles.inputSize * 0.5f),
                                 0,
                                 0));
             }
             i++;
         }
     }
     return(Rect.zero);
 }
Пример #6
0
 public Rect OutputPosition(OutputData _output, ConstellationEditorStyles constellationEditorStyles)
 {
     foreach (NodeData node in constellationScript.GetNodes())
     {
         var j = 0;
         foreach (OutputData output in node.GetOutputs())
         {
             if (_output.Guid == output.Guid)
             {
                 return(new Rect(node.XPosition + node.SizeX,
                                 node.YPosition + constellationEditorStyles.nodeTitleHeight + ((constellationEditorStyles.outputSize + constellationEditorStyles.spacing) * j) + (constellationEditorStyles.outputSize * 0.5f),
                                 0,
                                 0));
             }
             j++;
         }
     }
     return(Rect.zero);
 }
Пример #7
0
        public void DrawLinks(ConstellationEditorEvents.RequestRepaint requestRepaint, ConstellationEditorEvents.EditorEvents editorEvents, ConstellationEditorStyles styles)
        {
            DrawIncompleteLink(requestRepaint, styles);

            foreach (LinkData link in constellationScript.GetLinks())
            {
                Rect startLink = Rect.zero;
                Rect endLink   = Rect.zero;
                foreach (NodeData node in constellationScript.GetNodes())
                {
                    var i = 0;
                    foreach (InputData input in node.GetInputs())
                    {
                        if (link.Input.Guid == input.Guid)
                        {
                            endLink = InputPosition(input, styles);
                            break;
                        }
                        i++;
                    }

                    var j = 0;
                    foreach (OutputData output in node.GetOutputs())
                    {
                        if (link.Output.Guid == output.Guid)
                        {
                            var width = node.SizeX;
                            startLink = OutputPosition(output, styles);
                            break;
                        }
                        j++;
                    }
                }
                if (startLink == Rect.zero || endLink == Rect.zero)
                {
                    editorEvents(ConstellationEditorEvents.EditorEventType.AddToUndo, "Delete Link");
                    editorEvents(ConstellationEditorEvents.EditorEventType.LinkDeleted, link.GUID);
                    constellationScript.RemoveLink(link);
                }

                DrawNodeCurve(startLink, endLink, GetConnectionColor(link.Input.IsBright, link.Output.Type, styles));

                if (MouseOverCurve(startLink.position, endLink.position))
                {
                    var linkCenter = new Rect((startLink.x + (endLink.x - startLink.x) / 2) - (deleteButtonSize * 0.5f),
                                              (startLink.y + (endLink.y - startLink.y) / 2) - (deleteButtonSize * 0.5f),
                                              deleteButtonSize,
                                              deleteButtonSize);
                    var deleteButtonStyle = styles.GenericDeleteStyle;
                    if (GUI.Button(linkCenter, "", deleteButtonStyle))
                    {
                        dragging = true;
                        if (linkCenter.Contains(Event.current.mousePosition))
                        {
                            editorEvents(ConstellationEditorEvents.EditorEventType.LinkDeleted, link.GUID);
                            constellationScript.RemoveLink(link);
                        }
                    }
                }
            }
            requestRepaint();
        }
Пример #8
0
        private void DrawIncompleteLink(ConstellationEditorEvents.RequestRepaint requestRepaint, ConstellationEditorStyles styles)
        {
            if (selectedInput != null || selectedOutput != null)
            {
                var e = Event.current;
                if (selectedInput != null)
                {
                    DrawNodeCurve(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0), InputPosition(selectedInput, styles));
                    requestRepaint();
                }
                else if (selectedOutput != null)
                {
                    DrawNodeCurve(OutputPosition(selectedOutput, styles), new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0));
                    requestRepaint();
                }

                if (e.button == 1)
                {
                    selectedInput  = null;
                    selectedOutput = null;
                }
            }
        }
Пример #9
0
        public static Ray Draw(Parameter.ParameterType type, Rect size, Rect attributeArea, Ray Value, ConstellationEditorStyles editorStyles, out bool canBeFocused)
        {
            canBeFocused = false;
            switch (type)
            {
            case Parameter.ParameterType.Value:
                canBeFocused = true;
                var valueToReturn = Value.Set(EditorGUI.FloatField(size, " ", Value.GetFloat(), editorStyles.NodeValueAttributeStyle));
                EditorGUI.LabelField(new Rect(size.x, size.y - 8, 30, 30), "<>", editorStyles.NodeValueAttributeLabelStyle);
                return(valueToReturn);

            case Parameter.ParameterType.Word:
                canBeFocused = true;
                return(Value.Set(EditorGUI.TextField(size, "", Value.GetString(), editorStyles.NodeWordAttributeStyle)));

            case Parameter.ParameterType.Conditionals:
                canBeFocused = true;
                return(IfCharacterFilter(size, Value, editorStyles));

            case Parameter.ParameterType.Then:
                canBeFocused = true;
                return(ThenCharacterFilter(size, Value, editorStyles));

            case Parameter.ParameterType.Else:
                canBeFocused = true;
                return(ElseCharacterFilter(size, Value, editorStyles));

            case Parameter.ParameterType.NoteField:
                canBeFocused = true;
                GUI.color    = new Color(0.9f, 0.85f, 0.25f);
                var textAreaValue = Value.Set(EditorGUI.TextArea(attributeArea, Value.GetString()));
                GUI.color = Color.white;
                //noteSkin.alignment = TextAnchor.UpperLeft;
                return(textAreaValue);

            case Parameter.ParameterType.ReadOnlyValue:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeReadOnlyAttributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyXValue:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeXAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyYValue:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeYAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyZValue:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeZAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyValueR:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeRAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyValueG:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeGAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyValueB:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeBAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.ReadOnlyValueA:
                EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeAAtrributeStyle);
                return(Value);

            case Parameter.ParameterType.RenameNodeTitle:
                EditorGUI.LabelField(size, Value.GetString());
                return(Value);

            default:
                return(Value);
            }
        }
Пример #10
0
 public Rect GetQuestionRect(ConstellationEditorStyles editorStyles)
 {
     return(new Rect(GetPositionX() + (GetSizeX() - editorStyles.nodeDeleteSize - editorStyles.nodeDeleteSize) - editorStyles.nodeButtonsSpacing, GetPositionY() + editorStyles.nodeButtonsTopMargin, editorStyles.nodeDeleteSize, editorStyles.nodeDeleteSize));
 }
Пример #11
0
 public Rect GetResizeRect(ConstellationEditorStyles editorStyles)
 {
     return(new Rect(GetPositionX() + GetSizeX() - editorStyles.resizeButtonSize, GetPositionY() + GetSizeY() - editorStyles.resizeButtonSize, editorStyles.resizeButtonSize, editorStyles.resizeButtonSize));
 }
Пример #12
0
        public float MinimumNodeHeight(ConstellationEditorStyles constellationEditorStyles)
        {
            var minimumHeight = 30;

            return(Mathf.Max(Math.Max((constellationEditorStyles.inputSize + constellationEditorStyles.spacing) * NodeData.Inputs.Count + constellationEditorStyles.nodeTitleHeight, (constellationEditorStyles.inputSize + constellationEditorStyles.spacing) * NodeData.Outputs.Count + constellationEditorStyles.nodeTitleHeight), minimumHeight));
        }
Пример #13
0
 public void UpdateNodeSize(float _x, float _y, ConstellationEditorStyles constellationEditorStyles)
 {
     NodeData.SizeX = Math.Max(_x, MinimumNodeWidth());
     NodeData.SizeY = Math.Max(_y, MinimumNodeHeight(constellationEditorStyles));
 }
Пример #14
0
 public Rect GetOuptputRect(int InputID, ConstellationEditorStyles constellationEditorStyles)
 {
     return(new Rect(GetPositionX() + GetSizeX() - (constellationEditorStyles.outputSize * 0.75f), GetPositionY() + (InputID * (constellationEditorStyles.outputSize + constellationEditorStyles.spacing)) + constellationEditorStyles.nodeTitleHeight, constellationEditorStyles.outputSize, constellationEditorStyles.outputSize));
 }
Пример #15
0
        public void Draw(ConstellationEditorEvents.RequestRepaint requestRepaint, ConstellationEditorEvents.EditorEvents callback, ConstellationEditorStyles constellationEditorStyles, out Vector2 windowSize, out Vector2 scrollPosition)
        {
            mouseButtonDown = false;
            //scroll bar
            ScrollPosition = EditorGUILayout.BeginScrollView(ScrollPosition, GUILayout.Width(windowSizeX), GUILayout.Height(windowSizeY));
            GUILayoutOption[] options = { GUILayout.Width(editorScrollSize.x), GUILayout.Height(editorScrollSize.y) };
            editorScrollSize = new Vector2(farNodeX + 400, farNodeY + 400);
            windowSize       = editorScrollSize;
            scrollPosition   = ScrollPosition;
            EditorGUILayout.LabelField("", options);
            var backgroundTint = Color.white;

            if (ConstellationScript.IsInstance && ConstellationScript.IsDifferentThanSource)
            {
                backgroundTint = Color.yellow;
            }
            background.DrawBackgroundGrid(windowSizeX, windowSizeY, ScrollPosition.x, ScrollPosition.y, backgroundTint);
            Event e = Event.current;
            var   mouseJustRelease = false;

            if (e.type == EventType.MouseUp && Event.current.button == 0 && mousePressed == true)
            {
                mouseJustRelease = true;
                mousePressed     = false;
            }
            else if (e.type == EventType.MouseDown && Event.current.button == 0)
            {
                mouseClickStartPosition = e.mousePosition;
                mousePressed            = true;
                mouseButtonDown         = true;
            }

            switch (currentEventScope)
            {
            case EventsScope.Generic:
                UpdateGenericEvents(requestRepaint, callback, e);
                break;

            case EventsScope.Resizing:
                UpdateResizeEvents(requestRepaint, callback, e);
                break;

            case EventsScope.Dragging:
                UpdateDragEvents(requestRepaint, callback, e);
                break;

            case EventsScope.EditingAttributes:
                break;

            case EventsScope.Selecting:
                UpdateSelectEvent(requestRepaint, constellationEditorStyles);
                break;
            }

            //Needs to be called after the event scope otherwise quit button event is overriden by the node drag event
            if (mouseJustRelease)
            {
                currentEventScope = EventsScope.Generic;
                for (var i = 0; i < Nodes.Count; i++)
                {
                    Nodes[i].LockNodeSize();
                    Nodes[i].LockNodePosition();
                }
            }
            DrawNodes(e);
            Links.DrawLinks(requestRepaint,
                            callback,
                            constellationEditorStyles);
            DrawDescriptions(e);
            EditorGUILayout.EndScrollView();
            if (Event.current.button == 2)
            {
                ScrollPosition -= Event.current.delta * 0.5f;
                requestRepaint();
            }
            var script = ConstellationScript.script;

            if (script.Nodes != null)
            {
                script.Nodes = script.Nodes.OrderBy(x => x.YPosition).ToList();
            }
            if (script.Links != null)
            {
                script.Links = script.Links.OrderBy(x => x.outputPositionY).ToList();
            }
        }
Пример #16
0
        public void DrawNode(Event e, ConstellationEditorStyles constellationEditorStyle, System.Action <string> lockFocus, System.Action releaseFocus, string focusedNode)
        {
            var   editorConfig    = constellationEditorStyle;
            var   nodeSizeX       = GetSizeX();
            var   nodeSizeY       = GetSizeY();
            var   nodePositionX   = GetPositionX();
            var   nodePositionY   = GetPositionY();
            float positionOffsetX = nodeSizeX * 0.5f;
            float positionOffsetY = nodeSizeY * 0.5f;
            var   nodeRect        = new Rect(nodePositionX, nodePositionY, nodeSizeX, nodeSizeY);
            var   nodeTitleRect   = new Rect(nodePositionX + constellationEditorStyle.titleLeftMargin, nodePositionY, nodeSizeX - constellationEditorStyle.titleLeftMargin - constellationEditorStyle.titleRightMargin, constellationEditorStyle.nodeTitleHeight);
            var   deleteRect      = GetDeleteRect(constellationEditorStyle);
            var   questionRect    = GetQuestionRect(constellationEditorStyle);
            var   resizeRect      = GetResizeRect(constellationEditorStyle);
            var   nodeSkin        = editorConfig.NodeStyle;

            if (isSelected)
            {
                nodeSkin = editorConfig.NodeSelectedStyle;
            }
            var nodeTitleSkin  = editorConfig.NodeTitleStyle;
            var nodeResizeSkin = editorConfig.NodeResizeButtonStyle;

            GUI.Box(nodeRect, "", nodeSkin);
            GUI.Label(nodeTitleRect, GetName(), nodeTitleSkin);

            if (e.type == EventType.Repaint)
            {
                mousePosition = e.mousePosition;
            }

            if (nodeRect.Contains(mousePosition) || (GUI.GetNameOfFocusedControl() == LastFocusedAttribute)) // check if mouse inside node or mouse focus attribute
            {
                if (focusedNode == NodeData.Guid || focusedNode == "")
                {
                    GUI.SetNextControlName(NodeData.Guid + "-" + "Delete rect");
                    GUI.color = new Color(0.75f, 0.75f, 0.75f);
                    GUIStyle DeleteButton = constellationEditorStyle.GenericDeleteStyle;
                    GUI.Button(deleteRect, "", DeleteButton);
                    GUI.SetNextControlName(NodeData.Guid + "-" + "Question rect");
                    GUIStyle QuestionButton = constellationEditorStyle.GenericQuestionStyle;
                    GUI.color = new Color(0.75f, 0.75f, 0.75f);
                    GUI.Button(questionRect, "", QuestionButton);
                    GUI.SetNextControlName(NodeData.Guid + "-" + "Resize rect");
                    GUI.color = Color.white;
                    GUI.Button(resizeRect, "", nodeResizeSkin);
                    lockFocus(NodeData.Guid);
                    wasMouseOverNode = true;
                }
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
                {
                    releaseFocus();
                    GUI.FocusControl(null);
                    wasMouseOverNode = false;
                }
            }
            else if (wasMouseOverNode)
            {
                releaseFocus();
                GUI.FocusControl(null);
                wasMouseOverNode = false;
            }

            GUI.color = Color.white;

            var inputs = NodeData.GetInputs();

            for (var i = 0; i < inputs.Length; i++)
            {
                if (inputs[i].IsBright == true)
                {
                    GUI.color = editorConfig.GetConstellationIOStylesByType(inputs[i].Type).WarmColor;
                }
                else
                {
                    GUI.color = editorConfig.GetConstellationIOStylesByType(inputs[i].Type).ColdColor;
                }

                GUI.Button(GetInputRect(i, constellationEditorStyle), "", editorConfig.GetConstellationIOStylesByType(inputs[i].Type).InputStyle);
            }

            DrawParameters(constellationEditorStyle);
            var outputs = NodeData.GetOutputs();

            for (var i = 0; i < outputs.Length; i++)
            {
                if (outputs[i].IsBright == true)
                {
                    GUI.color = editorConfig.GetConstellationIOStylesByType(outputs[i].Type).WarmColor;
                }
                else
                {
                    GUI.color = editorConfig.GetConstellationIOStylesByType(outputs[i].Type).ColdColor;
                }

                GUI.Button(GetOuptputRect(i, constellationEditorStyle), "", editorConfig.GetConstellationIOStylesByType(outputs[i].Type).InputStyle);
            }
            GUI.color = Color.white;
        }
Пример #17
0
        private void UpdateSelectEvent(ConstellationEditorEvents.RequestRepaint requestRepaint, ConstellationEditorStyles constellationEditorStyles)
        {
            var sizeX         = Event.current.mousePosition.x - mouseClickStartPosition.x;
            var sizeY         = Event.current.mousePosition.y - mouseClickStartPosition.y;
            var SelectionSize = FixNegativeSize(new Rect(mouseClickStartPosition.x, mouseClickStartPosition.y, sizeX, sizeY));

            GUI.Box(SelectionSize, "", constellationEditorStyles.SelectionAreaStyle);
            if (Event.current.type == EventType.MouseUp)
            {
                if (!Event.current.control)
                {
                    ClearSelectedNodes();
                }

                foreach (var node in Nodes)
                {
                    if (SelectionSize.Contains(new Vector2(node.GetPositionX() + (node.GetSizeX() * 0.5f), node.GetPositionY() + (node.GetSizeY() * 0.5f))))
                    {
                        node.SelectedNode();
                        SelectedNodes.Add(node);
                    }
                }
            }
            requestRepaint();
        }
Пример #18
0
 private static Ray ElseCharacterFilter(Rect size, Ray Value, ConstellationEditorStyles editorStyles)
 {
     return(Value.Set(Regex.Replace(EditorGUI.TextField(size, "else", Value.GetString(), editorStyles.NodeWordAttributeStyle), "[a-zA-Z ]", "")));
 }