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++; } } }
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); }
public Color GetConnectionColor(bool _isWarm, string _type, ConstellationEditorStyles styles) { if (_isWarm) { return(styles.GetConstellationIOStylesByType(_type).WarmColor); } else { return(styles.GetConstellationIOStylesByType(_type).ColdColor); } }
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); }
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); }
private static Ray ElseCharacterFilter(Rect size, Ray Value, ConstellationEditorStyles editorStyles) { EditorGUI.LabelField(new Rect(size.x, size.y - 8, 30, 30), "else", editorStyles.NodeValueParameterLabelStyle); return(Value.Set(Regex.Replace(EditorGUI.TextField(size, " ", Value.GetString(), editorStyles.NodeWordParameterStyle), "[a-zA-Z ]", ""))); }
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(); }
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; } } }
public void UpdateNodeSize(float _x, float _y, ConstellationEditorStyles constellationEditorStyles) { NodeData.SizeX = Math.Max(_x, MinimumNodeWidth()); NodeData.SizeY = Math.Max(_y, MinimumNodeHeight(constellationEditorStyles)); }
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(); }
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.NodeValueParameterStyle)); EditorGUI.LabelField(new Rect(size.x, size.y - 8, 30, 30), "<>", editorStyles.NodeValueParameterLabelStyle); return(valueToReturn); case Parameter.ParameterType.Word: canBeFocused = true; return(Value.Set(EditorGUI.TextField(size, "", Value.GetString(), editorStyles.NodeWordParameterStyle))); 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.NodeReadOnlyParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyXValue: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeXParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyYValue: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeYParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyZValue: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeZParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyValueR: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeRParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyValueG: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeGParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyValueB: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeBParameterStyle); return(Value); case Parameter.ParameterType.ReadOnlyValueA: EditorGUI.LabelField(size, Value.GetString(), editorStyles.NodeAParameterStyle); return(Value); case Parameter.ParameterType.RenameNodeTitle: EditorGUI.LabelField(size, Value.GetString()); return(Value); default: return(Value); } }
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(); } }
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)); }
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; }
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)); }
public Rect GetQuestionRect(ConstellationEditorStyles editorStyles) { return(new Rect(GetPositionX() + (GetSizeX() - editorStyles.nodeDeleteSize - editorStyles.nodeDeleteSize) - editorStyles.nodeButtonsSpacing, GetPositionY() + editorStyles.nodeButtonsTopMargin, editorStyles.nodeDeleteSize, editorStyles.nodeDeleteSize)); }
public Rect GetResizeRect(ConstellationEditorStyles editorStyles) { return(new Rect(GetPositionX() + GetSizeX() - editorStyles.resizeButtonSize, GetPositionY() + GetSizeY() - editorStyles.resizeButtonSize, editorStyles.resizeButtonSize, editorStyles.resizeButtonSize)); }