From 76cf82509098ed2a2a86baea8337644aabb7d578 Mon Sep 17 00:00:00 2001 From: Simon Rodriguez Date: Mon, 13 Apr 2020 19:35:52 +0200 Subject: [PATCH] Suggestion! A new way of drawing lines very similar to Unitys upcoming Shader Node Editor. --- Scripts/Editor/NodeEditorGUI.cs | 35 +++++++++++++++++++++++++ Scripts/Editor/NodeEditorPreferences.cs | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Scripts/Editor/NodeEditorGUI.cs b/Scripts/Editor/NodeEditorGUI.cs index 358b2e5..236091c 100755 --- a/Scripts/Editor/NodeEditorGUI.cs +++ b/Scripts/Editor/NodeEditorGUI.cs @@ -267,6 +267,41 @@ namespace XNodeEditor { } } break; + case NoodlePath.ShaderLab: + Vector2 start = gridPoints[0]; + Vector2 end = gridPoints[length - 1]; + //Modify first and last point in array so we can loop trough them nicely. + gridPoints[0] = gridPoints[0] + Vector2.right * (20 / zoom); + gridPoints[length - 1] = gridPoints[length - 1] + Vector2.left * (20 / zoom); + //Draw first vertical lines going out from nodes + Handles.color = gradient.Evaluate(0f); + DrawAAPolyLineNonAlloc(thickness, start, gridPoints[0]); + Handles.color = gradient.Evaluate(1f); + DrawAAPolyLineNonAlloc(thickness, end, gridPoints[length - 1]); + for (int i = 0; i < length - 1; i++) { + Vector2 point_a = gridPoints[i]; + Vector2 point_b = gridPoints[i + 1]; + // Draws the line with the coloring. + Vector2 prev_point = point_a; + // Approximately one segment per 5 pixels + int segments = (int) Vector2.Distance(point_a, point_b) / 5; + + int draw = 0; + for (int j = 0; j <= segments; j++) { + draw++; + float t = j / (float) segments; + Vector2 lerp = Vector2.Lerp(point_a, point_b, t); + if (draw > 0) { + if (i == length - 2) Handles.color = gradient.Evaluate(t); + DrawAAPolyLineNonAlloc(thickness, prev_point, lerp); + } + prev_point = lerp; + if (stroke == NoodleStroke.Dashed && draw >= 2) draw = -2; + } + } + gridPoints[0] = start; + gridPoints[length - 1] = end; + break; } } diff --git a/Scripts/Editor/NodeEditorPreferences.cs b/Scripts/Editor/NodeEditorPreferences.cs index 467318a..72eb8aa 100644 --- a/Scripts/Editor/NodeEditorPreferences.cs +++ b/Scripts/Editor/NodeEditorPreferences.cs @@ -5,7 +5,7 @@ using UnityEngine; using UnityEngine.Serialization; namespace XNodeEditor { - public enum NoodlePath { Curvy, Straight, Angled } + public enum NoodlePath { Curvy, Straight, Angled, ShaderLab } public enum NoodleStroke { Full, Dashed } public static class NodeEditorPreferences {