From d0679c1f9bd6c7c1dfef3ac4808f5e9e3cfc025a Mon Sep 17 00:00:00 2001 From: Nils Hausfeld Date: Fri, 22 Sep 2023 15:28:46 +0200 Subject: [PATCH] - Made Visject connection bezier curves bend around nodes --- Source/Editor/Surface/Elements/OutputBox.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Source/Editor/Surface/Elements/OutputBox.cs b/Source/Editor/Surface/Elements/OutputBox.cs index 67b6e8409..2a2b87486 100644 --- a/Source/Editor/Surface/Elements/OutputBox.cs +++ b/Source/Editor/Surface/Elements/OutputBox.cs @@ -33,11 +33,20 @@ namespace FlaxEditor.Surface.Elements /// The connection thickness. public static void DrawConnection(ref Float2 start, ref Float2 end, ref Color color, float thickness = 1) { + // Control points parameters + const float minControlLength = 100f; + const float maxControlLength = 150f; + var dst = (end - start).Length; + var yDst = Mathf.Abs(start.Y - end.Y); + // Calculate control points - var dst = (end - start) * new Float2(0.5f, 0.05f); - var control1 = new Float2(start.X + dst.X, start.Y + dst.Y); - var control2 = new Float2(end.X - dst.X, end.Y + dst.Y); - + var minControlDst = dst * 0.5f; + var maxControlDst = Mathf.Max(Mathf.Min(maxControlLength, dst), minControlLength); + var controlDst = Mathf.Lerp(minControlDst, maxControlDst, Mathf.Clamp(yDst / minControlLength, 0f, 1f)); + + var control1 = new Float2(start.X + controlDst, start.Y); + var control2 = new Float2(end.X - controlDst, end.Y); + // Draw line Render2D.DrawBezier(start, control1, control2, end, color, thickness);