diff --git a/Scripts/Editor/NodeEditorAction.cs b/Scripts/Editor/NodeEditorAction.cs index 914dd08..62ef90c 100644 --- a/Scripts/Editor/NodeEditorAction.cs +++ b/Scripts/Editor/NodeEditorAction.cs @@ -473,8 +473,8 @@ namespace XNodeEditor { Color col = NodeEditorPreferences.GetTypeColor(draggedOutput.ValueType); col.a = draggedOutputTarget != null ? 1.0f : 0.6f; - Gradient g = new Gradient(); - g.SetKeys(new GradientColorKey[] { new GradientColorKey(col, 0f) }, new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f) }); + Gradient gradient = new Gradient(); + gradient.SetKeys(new GradientColorKey[] { new GradientColorKey(col, 0f) }, new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f) }); Rect fromRect; if (!_portConnectionPoints.TryGetValue(draggedOutput, out fromRect)) return; @@ -486,7 +486,7 @@ namespace XNodeEditor { if (draggedOutputTarget != null) gridPoints.Add(portConnectionPoints[draggedOutputTarget].center); else gridPoints.Add(WindowToGridPosition(Event.current.mousePosition)); - DrawNoodle(g, gridPoints, true); + DrawNoodle(gradient, gridPoints, false); Color bgcol = Color.black; Color frcol = col; diff --git a/Scripts/Editor/NodeEditorGUI.cs b/Scripts/Editor/NodeEditorGUI.cs index bf94ea0..c793959 100644 --- a/Scripts/Editor/NodeEditorGUI.cs +++ b/Scripts/Editor/NodeEditorGUI.cs @@ -117,22 +117,22 @@ namespace XNodeEditor { } /// Draw a bezier from output to input in grid coordinates - public void DrawNoodle(Gradient grad, List gridPoints, bool disableHover = false) { + public void DrawNoodle(Gradient gradient, List gridPoints, bool enableHoveringHighlight = true) { Vector2[] windowPoints = gridPoints.Select(x => GridToWindowPosition(x)).ToArray(); - Handles.color = grad.Evaluate(0f); + Handles.color = gradient.Evaluate(0f); int length = gridPoints.Count; switch (NodeEditorPreferences.GetSettings().noodleType) { case NodeEditorPreferences.NoodleType.Curve: Vector2 outputTangent = Vector2.right; for (int i = 0; i < length - 1; i++) { Vector2 inputTangent = Vector2.left; - // Cached most variables that repeat themselves here to avoid so many indexer calls :p - Vector2 point_a = windowPoints[i]; - Vector2 point_b = windowPoints[i + 1]; - float dist_ab = Vector2.Distance(point_a, point_b); + // Cached most variables that repeat themselves here to avoid so many indexer calls :p + Vector2 point_a = windowPoints[i]; + Vector2 point_b = windowPoints[i + 1]; + float dist_ab = Vector2.Distance(point_a, point_b); if (i == 0) outputTangent = Vector2.right * dist_ab * 0.01f * zoom; if (i < length - 2) { - Vector2 point_c = windowPoints[i + 2]; + Vector2 point_c = windowPoints[i + 2]; Vector2 ab = (point_b - point_a).normalized; Vector2 cb = (point_b - point_c).normalized; Vector2 ac = (point_c - point_a).normalized; @@ -147,50 +147,50 @@ namespace XNodeEditor { inputTangent = Vector2.left * dist_ab * 0.01f * zoom; } - // Calculates the tangents for the bezier's curves. - Vector2 tangent_a = point_a + outputTangent * 50 / zoom; - Vector2 tangent_b = point_b + inputTangent * 50 / zoom; - // Hover effect. - int bezier_width = 4; - int division = Mathf.RoundToInt(.1f * dist_ab) + 3; - Vector3[] points = Handles.MakeBezierPoints(point_a, point_b, tangent_a, tangent_b, division); - if (!disableHover) { - for (int j = 0; j < points.Length; j++) { - Vector3 current = points[j]; - bool next_has_mouse = false; - if (j + 1 < points.Length) { - Vector3 next = points[j + 1]; - next_has_mouse = ContainsMouse(current, next); - } - if (next_has_mouse) { - bezier_width += 2; - break; - } - } - } - // Coloring and bezier drawing. - for (int j = 0; j < points.Length - 1; j++) { - Handles.color = grad.Evaluate((j + 1f) / (points.Length)); - Handles.DrawAAPolyLine(bezier_width / zoom, points[j], points[j + 1]); - } + // Calculates the tangents for the bezier's curves. + Vector2 tangent_a = point_a + outputTangent * 50 / zoom; + Vector2 tangent_b = point_b + inputTangent * 50 / zoom; + // Hover effect. + int bezier_width = 4; + int division = Mathf.RoundToInt(.1f * dist_ab) + 3; + Vector3[] points = Handles.MakeBezierPoints(point_a, point_b, tangent_a, tangent_b, division); + if (enableHoveringHighlight) { + for (int j = 0; j < points.Length; j++) { + Vector3 current = points[j]; + bool next_has_mouse = false; + if (j + 1 < points.Length) { + Vector3 next = points[j + 1]; + next_has_mouse = ContainsMouse(current, next); + } + if (next_has_mouse) { + bezier_width += 2; + break; + } + } + } + // Coloring and bezier drawing. + for (int j = 0; j < points.Length - 1; j++) { + Handles.color = gradient.Evaluate((j + 1f) / (points.Length)); + Handles.DrawAAPolyLine(bezier_width / zoom, points[j], points[j + 1]); + } outputTangent = -inputTangent; } break; case NodeEditorPreferences.NoodleType.Line: for (int i = 0; i < length - 1; i++) { - Vector2 point_a = windowPoints[i]; - Vector2 point_b = windowPoints[i + 1]; - // Hover effect. - int line_width = 5; - if (!disableHover && LineContainsMouse(point_a, point_b)) line_width += 2; - // Draws the line with the coloring. - Vector2 prev_point = point_a; - for (float j = 0; j < 1; j += 10f / Vector2.Distance(point_a, point_b)) { - Vector2 lerp = Vector2.Lerp(point_a, point_b, j); - Handles.color = grad.Evaluate(j); - Handles.DrawAAPolyLine(line_width / zoom, prev_point, lerp); - prev_point = lerp; - } + Vector2 point_a = windowPoints[i]; + Vector2 point_b = windowPoints[i + 1]; + // Hover effect. + int line_width = 5; + if (enableHoveringHighlight && LineContainsMouse(point_a, point_b)) line_width += 2; + // Draws the line with the coloring. + Vector2 prev_point = point_a; + for (float j = 0; j < 1; j += 10f / Vector2.Distance(point_a, point_b)) { + Vector2 lerp = Vector2.Lerp(point_a, point_b, j); + Handles.color = gradient.Evaluate(j); + Handles.DrawAAPolyLine(line_width / zoom, prev_point, lerp); + prev_point = lerp; + } } break; case NodeEditorPreferences.NoodleType.Angled: @@ -202,11 +202,11 @@ namespace XNodeEditor { Vector2 end_1 = windowPoints[i + 1]; start_1.x = midpoint; end_1.x = midpoint; - Handles.color = grad.Evaluate(0f); + Handles.color = gradient.Evaluate(0f); Handles.DrawAAPolyLine(5, windowPoints[i], start_1); - Handles.color = grad.Evaluate(0.5f); + Handles.color = gradient.Evaluate(0.5f); Handles.DrawAAPolyLine(5, start_1, end_1); - Handles.color = grad.Evaluate(1f); + Handles.color = gradient.Evaluate(1f); Handles.DrawAAPolyLine(5, end_1, windowPoints[i + 1]); } else { float midpoint = (windowPoints[i].y + windowPoints[i + 1].y) * 0.5f; @@ -218,15 +218,15 @@ namespace XNodeEditor { Vector2 end_2 = end_1; start_2.y = midpoint; end_2.y = midpoint; - Handles.color = grad.Evaluate(0f); + Handles.color = gradient.Evaluate(0f); Handles.DrawAAPolyLine(5, windowPoints[i], start_1); - Handles.color = grad.Evaluate(0.25f); + Handles.color = gradient.Evaluate(0.25f); Handles.DrawAAPolyLine(5, start_1, start_2); - Handles.color = grad.Evaluate(0.5f); + Handles.color = gradient.Evaluate(0.5f); Handles.DrawAAPolyLine(5, start_2, end_2); - Handles.color = grad.Evaluate(0.75f); + Handles.color = gradient.Evaluate(0.75f); Handles.DrawAAPolyLine(5, end_2, end_1); - Handles.color = grad.Evaluate(1f); + Handles.color = gradient.Evaluate(1f); Handles.DrawAAPolyLine(5, end_1, windowPoints[i + 1]); } } @@ -234,33 +234,33 @@ namespace XNodeEditor { } } - /// - /// Verifies if the cursor is anywhere between the given coordinates. - /// - /// - /// - bool ContainsMouse(Vector2 point_a, Vector2 point_b) { - Vector2 min = new Vector2(point_a.x < point_b.x ? point_a.x : point_b.x, point_a.y < point_b.y ? point_a.y : point_b.y); - Vector2 max = new Vector2(point_a.x > point_b.x ? point_a.x : point_b.x, point_a.y > point_b.y ? point_a.y : point_b.y); - bool equals_x = lastMousePosition.x >= min.x && lastMousePosition.x <= max.x; - bool equals_y = lastMousePosition.y >= min.y && lastMousePosition.y <= max.y; - return equals_x && equals_y; - } + /// + /// Verifies if the cursor is anywhere between the given coordinates. + /// + /// + /// + bool ContainsMouse(Vector2 point_a, Vector2 point_b) { + Vector2 min = new Vector2(point_a.x < point_b.x ? point_a.x : point_b.x, point_a.y < point_b.y ? point_a.y : point_b.y); + Vector2 max = new Vector2(point_a.x > point_b.x ? point_a.x : point_b.x, point_a.y > point_b.y ? point_a.y : point_b.y); + bool equals_x = lastMousePosition.x >= min.x && lastMousePosition.x <= max.x; + bool equals_y = lastMousePosition.y >= min.y && lastMousePosition.y <= max.y; + return equals_x && equals_y; + } - /// - /// Splits a line in various points and verifies if any of those points contain the mouse position. - /// - /// - /// - bool LineContainsMouse(Vector2 point_a, Vector2 point_b) { - Vector2 prev_point = point_a; - for (float j = 0; j < 1; j += 10f / Vector2.Distance(point_a, point_b)) { - Vector2 lerp = Vector2.Lerp(point_a, point_b, j); - if (ContainsMouse(prev_point, lerp)) return true; - prev_point = lerp; - } - return false; - } + /// + /// Splits a line in various points and verifies if any of those points contain the mouse position. + /// + /// + /// + bool LineContainsMouse(Vector2 point_a, Vector2 point_b) { + Vector2 prev_point = point_a; + for (float j = 0; j < 1; j += 10f / Vector2.Distance(point_a, point_b)) { + Vector2 lerp = Vector2.Lerp(point_a, point_b, j); + if (ContainsMouse(prev_point, lerp)) return true; + prev_point = lerp; + } + return false; + } /// Draws all connections public void DrawConnections() { @@ -282,8 +282,8 @@ namespace XNodeEditor { Color portColor = graphEditor.GetPortColor(output); for (int k = 0; k < output.ConnectionCount; k++) { XNode.NodePort input = output.GetConnection(k); - - Gradient noodleGradient = graphEditor.GetNoodleGradient(output, input); + + Gradient noodleGradient = graphEditor.GetNoodleGradient(output, input); // Error handling if (input == null) continue; //If a script has been updated and the port doesn't exist, it is removed and null is returned. If this happens, return. diff --git a/Scripts/Editor/NodeGraphEditor.cs b/Scripts/Editor/NodeGraphEditor.cs index 30beb46..d85df32 100644 --- a/Scripts/Editor/NodeGraphEditor.cs +++ b/Scripts/Editor/NodeGraphEditor.cs @@ -65,19 +65,19 @@ namespace XNodeEditor { /// Returned color is used to color noodles public virtual Gradient GetNoodleGradient(XNode.NodePort output, XNode.NodePort input) { - Color a = GetTypeColor(output.ValueType); - Color b = GetTypeColor(input.ValueType); - if (window.hoveredPort == output || window.hoveredPort == input) { - a = Color.Lerp(a, Color.white, 0.8f); - b = Color.Lerp(b, Color.white, 0.8f); - } - Gradient grad = new Gradient(); - grad.SetKeys( - new GradientColorKey[] { new GradientColorKey(a, 0f), new GradientColorKey(b, 1f) }, - new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) } - ); - return grad; - } + Color a = GetTypeColor(output.ValueType); + Color b = GetTypeColor(input.ValueType); + if (window.hoveredPort == output || window.hoveredPort == input) { + a = Color.Lerp(a, Color.white, 0.8f); + b = Color.Lerp(b, Color.white, 0.8f); + } + Gradient grad = new Gradient(); + grad.SetKeys( + new GradientColorKey[] { new GradientColorKey(a, 0f), new GradientColorKey(b, 1f) }, + new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) } + ); + return grad; + } /// Returned color is used to color ports public virtual Color GetPortColor(XNode.NodePort port) {