From 07d0122b7263799fdc41bb540194d91974e6ec26 Mon Sep 17 00:00:00 2001
From: Zach Vinless <zachvinless@gmail.com>
Date: Fri, 11 Nov 2016 22:54:25 -0800
Subject: [PATCH] Updated curves, connection points, and grid background

-Replaced GLDraw calls with Handles calls for connection curves
-Replaced GUI.Label calls with GUI.DrawTexture calls for connection
points
-Replaced GUI.DrawTexture with native graph background draw call
-Removed GLDraw.cs
---
 .../Textures/connection_point.png             | Bin 0 -> 982 bytes
 .../Textures/connection_point.png.meta        |  59 ++++
 .../Fungus/Scripts/Editor/FlowchartWindow.cs  | 105 +++++--
 .../Editor/FungusEditorResourcesGenerated.cs  |   2 +
 Assets/Fungus/Scripts/Editor/GLDraw.cs        | 292 ------------------
 Assets/Fungus/Scripts/Editor/GLDraw.cs.meta   |   8 -
 6 files changed, 132 insertions(+), 334 deletions(-)
 create mode 100644 Assets/Fungus/EditorResources/Textures/connection_point.png
 create mode 100644 Assets/Fungus/EditorResources/Textures/connection_point.png.meta
 delete mode 100644 Assets/Fungus/Scripts/Editor/GLDraw.cs
 delete mode 100644 Assets/Fungus/Scripts/Editor/GLDraw.cs.meta

diff --git a/Assets/Fungus/EditorResources/Textures/connection_point.png b/Assets/Fungus/EditorResources/Textures/connection_point.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a6719e7e1adf90939117b0a0c5403c854f02fcd
GIT binary patch
literal 982
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKV3f`bi71Ki^|4CM&(%vz$xlkv
ztH><?$}=$7*jE%JCTFLXC?ut(XXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdi
zxhgx^GDXSWj?1RP3TQxXYDuC(MQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}6yY17;GAES
zs$i;Ts%M~N$E9FXl#*r@<l+X^4CL7=Wt5Z@Sn2DRmzV368|&p4rRy77T3YHG80i}s
z=>k>g7FXt#Bv$C=6)S^`fSBQuTAW;zSx}OhpQivaGchT@w8U0PNgrg1KGYVVbM@iw
z1#;j%PR#>)vk2%PDX-P9fWg$7>FgX(9OUk#;OXjYW@u?<rfZ~U$iSd6v2@~2Z)Zn=
z_WdedLj5AkHf-=v6cch?+)*}5L5^kOiU(I!&dWIU9k15!h={te%;RBWuVc=dt-}8q
z9R;p<u|#hS*dSPWPR*%lMr7Id+xO3%d3Ua<*m7;^nKs4~DZ0u=qF;2^ulY4=Ugkkx
z>t+)-)8P3t=JN+%w|if>;^#X5r>ow7U%xfyh%c|q*+Y+K<wYF2e5g2j+PaGP8>^Qt
zl0NkOP@S`$#-9~mB3k1`)la_(vD|wsNk!$2=r`4Di?G8{r%rJ2bC;)Is(kz1?v?7=
zk8dtDU0Pb6D3sWxV3#&S<w!?Js?RaOUmO?owO<`!KlQQriAvbyz;x+m-$_e0eCVDv
z{Y~La;YG)nE<Nh(^Y`HWTeCVBIy`N;7MW4A@oj%xhE>yh+uQ%FHoko?v}1|h^`lue
z>o^wYFA`rB_1&<d?BSzTtB(3T+{7@~zv@cIG}Y-P=}L_6(=TjelHL9wZuOP7<?}Bw
z>%4RL!N$k8(EX3?Yx{34>Bh`6=7AC?XMsm#F#`j)FbFd;%$g$s6ujW+;uvDlyY{kS
z-XRBp)`#b#mwvFkwCte(qpGc?i$~C|g4QX_6Pyn)Dm`+(u;i(XN5Dc6xdWRRPV((H
zIh%F=^0_yAe7cXnd?u$a;c`$bD{kt~U6uCP9K!cLbnf0(xWTzGGW6N+#f}~O4fiPI
zY(7#9<cY9P=1Y=zD7xvz&+n%;>u)^l9K^q7bwtLolbM%lCGH$~5U=vJ=}T&<aP!Vz
z-n%v(RXUm{Zp+iP>df_a#d9AnJMK9m{#C%$VBUv^Ro2max@9hSJZ_A5yYX{j+?L0G
Y*p<31`14sCZ-9L4>FVdQ&MBb@0GeZ*{{R30

literal 0
HcmV?d00001

diff --git a/Assets/Fungus/EditorResources/Textures/connection_point.png.meta b/Assets/Fungus/EditorResources/Textures/connection_point.png.meta
new file mode 100644
index 00000000..51982bb8
--- /dev/null
+++ b/Assets/Fungus/EditorResources/Textures/connection_point.png.meta
@@ -0,0 +1,59 @@
+fileFormatVersion: 2
+guid: f08a4c27d7efe4aa6a35348a4e8aec8f
+timeCreated: 1478932274
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs
index c11ac1bd..2ceac788 100644
--- a/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs
+++ b/Assets/Fungus/Scripts/Editor/FlowchartWindow.cs
@@ -34,11 +34,15 @@ namespace Fungus.EditorUtils
         protected int forceRepaintCount;
 
         protected Texture2D addTexture;
+        protected Texture2D connectionPointTexture;
 
         protected Rect selectionBox;
         protected Vector2 startSelectionBoxPosition = -Vector2.one;
         protected List<Block> mouseDownSelectionState = new List<Block>();
 
+        protected Color gridLineColor = Color.black;
+        protected readonly Color connectionColor = new Color(0.65f, 0.65f, 0.65f, 1.0f);
+
         // Context Click occurs on MouseDown which interferes with panning
         // Track right click positions manually to show menus on MouseUp
         protected Vector2 rightClickDown = -Vector2.one;
@@ -66,6 +70,8 @@ namespace Fungus.EditorUtils
             nodeStyle.wordWrap = true;
 
             addTexture = FungusEditorResources.AddSmall;
+            connectionPointTexture = FungusEditorResources.ConnectionPoint;
+            gridLineColor.a = EditorGUIUtility.isProSkin ? 0.5f : 0.25f;
         }
 
         protected virtual void OnInspectorUpdate()
@@ -299,6 +305,13 @@ namespace Fungus.EditorUtils
                 flowchart.ScrollViewRect = newRect;
             }
 
+            // Draw background color / drop shadow
+            if (Event.current.type == EventType.Repaint)
+            {
+                UnityEditor.Graphs.Styles.graphBackground.Draw(
+                    new Rect(0, 17, position.width, position.height - 17), false, false, false, false
+                );            
+            }
             // Calc rect for script view
             Rect scriptViewRect = new Rect(0, 0, this.position.width / flowchart.Zoom, this.position.height / flowchart.Zoom);
 
@@ -320,10 +333,11 @@ namespace Fungus.EditorUtils
 
             EditorZoomArea.Begin(flowchart.Zoom, scriptViewRect);
 
-            DrawGrid(flowchart);
+            if (Event.current.type == EventType.Repaint)
+            {
+                DrawGrid(flowchart);
+            }
             
-            GLDraw.BeginGroup(scriptViewRect);
-
             // The center of the Flowchart depends on the block positions and window dimensions, so we calculate it 
             // here in the FlowchartWindow class and store it on the Flowchart object for use later.
             if (flowchart != null && blocks.Length > 0)
@@ -485,8 +499,6 @@ namespace Fungus.EditorUtils
 
             PanAndZoom(flowchart);
 
-            GLDraw.EndGroup();
-
             EditorZoomArea.End();
             
             // Handle right click up outside of EditorZoomArea to avoid strange offsets
@@ -720,26 +732,14 @@ namespace Fungus.EditorUtils
             float width = this.position.width / flowchart.Zoom;
             float height = this.position.height / flowchart.Zoom;
 
-            // Match background color of scene view
-            if (EditorGUIUtility.isProSkin)
-            {
-                GUI.color = new Color32(71, 71, 71, 255); 
-            }
-            else
-            {
-                GUI.color = new Color32(86, 86, 86, 255); 
-            }
-            GUI.DrawTexture( new Rect(0,0, width, height), EditorGUIUtility.whiteTexture );
-
-            GUI.color = Color.white;
-            Color color = new Color32(96, 96, 96, 255);
+            Handles.color = gridLineColor;
 
             float gridSize = 128f;
             
             float x = flowchart.ScrollPos.x % gridSize;
             while (x < width)
             {
-                GLDraw.DrawLine(new Vector2(x, 0), new Vector2(x, height), color, 1f);
+                Handles.DrawLine(new Vector2(x, 0), new Vector2(x, height));
                 x += gridSize;
             }
             
@@ -748,10 +748,12 @@ namespace Fungus.EditorUtils
             {
                 if (y >= 0)
                 {
-                    GLDraw.DrawLine(new Vector2(0, y), new Vector2(width, y), color, 1f);
+                    Handles.DrawLine(new Vector2(0, y), new Vector2(width, y));
                 }
                 y += gridSize;
             }
+
+            Handles.color = Color.white;
         }
 
         protected virtual void SelectBlock(Flowchart flowchart, Block block)
@@ -990,17 +992,17 @@ namespace Fungus.EditorUtils
         protected virtual void DrawRectConnection(Rect rectA, Rect rectB, bool highlight)
         {
             Vector2[] pointsA = new Vector2[] {
-                new Vector2(rectA.xMin + 5, rectA.center.y),
-                new Vector2(rectA.xMin + rectA.width / 2, rectA.yMin + 2),
-                new Vector2(rectA.xMin + rectA.width / 2, rectA.yMax - 2),
-                new Vector2(rectA.xMax - 5, rectA.center.y) 
+                new Vector2(rectA.xMin, rectA.center.y),
+                new Vector2(rectA.xMin + rectA.width / 2, rectA.yMin),
+                new Vector2(rectA.xMin + rectA.width / 2, rectA.yMax),
+                new Vector2(rectA.xMax, rectA.center.y) 
             };
 
             Vector2[] pointsB = new Vector2[] {
-                new Vector2(rectB.xMin + 5, rectB.center.y),
-                new Vector2(rectB.xMin + rectB.width / 2, rectB.yMin + 2),
-                new Vector2(rectB.xMin + rectB.width / 2, rectB.yMax - 2),
-                new Vector2(rectB.xMax - 5, rectB.center.y)
+                new Vector2(rectB.xMin, rectB.center.y),
+                new Vector2(rectB.xMin + rectB.width / 2, rectB.yMin),
+                new Vector2(rectB.xMin + rectB.width / 2, rectB.yMax),
+                new Vector2(rectB.xMax, rectB.center.y)
             };
 
             Vector2 pointA = Vector2.zero;
@@ -1021,19 +1023,54 @@ namespace Fungus.EditorUtils
                 }
             }
 
-            Color color = Color.grey;
+            Color color = connectionColor;
             if (highlight)
             {
                 color = Color.green;
             }
 
-            GLDraw.DrawConnectingCurve(pointA, pointB, color, 1.025f);
+            Handles.color = color;
+
+            // Place control based on distance between points
+            // Weight the min component more so things don't get overly curvy
+            var diff = pointA - pointB;
+            diff.x = Mathf.Abs(diff.x);
+            diff.y = Mathf.Abs(diff.y);
+            var min = Mathf.Min(diff.x, diff.y);
+            var max = Mathf.Max(diff.x, diff.y);
+            var mod = min * 0.75f + max * 0.25f;
+
+            // Draw bezier curve connecting blocks
+            var directionA = (rectA.center - pointA).normalized;
+            var directionB = (rectB.center - pointB).normalized;
+            var controlA = pointA - directionA * mod * 0.67f;
+            var controlB = pointB - directionB * mod * 0.67f;            
+            Handles.DrawBezier(pointA, pointB, controlA, controlB, color, null, 3f);
+
+            // Draw arrow on curve
+            var point = GetPointOnCurve(pointA, controlA, pointB, controlB, 0.7f);
+            var direction = (GetPointOnCurve(pointA, controlA, pointB, controlB, 0.6f) - point).normalized;
+            var perp = new Vector2(direction.y, -direction.x);
+            Handles.DrawAAConvexPolygon(
+                point, point + direction * 10 + perp * 5, point + direction * 10 - perp * 5
+            );
+
+            var connectionPointA = pointA + directionA * 4f;
+            var connectionRectA = new Rect(connectionPointA.x - 4f, connectionPointA.y - 4f, 8f, 8f);
+            var connectionPointB = pointB + directionB * 4f;
+            var connectionRectB = new Rect(connectionPointB.x - 4f, connectionPointB.y - 4f, 8f, 8f);
 
-            Rect dotARect = new Rect(pointA.x - 5, pointA.y - 5, 10, 10);
-            GUI.Label(dotARect, "", new GUIStyle("U2D.dragDotActive"));
+            GUI.DrawTexture(connectionRectA, connectionPointTexture, ScaleMode.ScaleToFit);
+            GUI.DrawTexture(connectionRectB, connectionPointTexture, ScaleMode.ScaleToFit);
 
-            Rect dotBRect = new Rect(pointB.x - 5, pointB.y - 5, 10, 10);
-            GUI.Label(dotBRect, "", new GUIStyle("U2D.dragDotActive"));
+            Handles.color = Color.white;
+        }
+
+        private static Vector2 GetPointOnCurve(Vector2 s, Vector2 st, Vector2 e, Vector2 et, float t)
+        {
+            float rt = 1 - t;
+            float rtt = rt * t;
+            return rt * rt * rt * s + 3 * rt * rtt * st + 3 * rtt * t * et + t * t * t * e;
         }
 
         public static void DeleteBlocks(object obj)
diff --git a/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs b/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs
index e2eab920..c7ea8069 100644
--- a/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs
+++ b/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs
@@ -17,6 +17,7 @@ namespace Fungus.EditorUtils
             "choice_node_off",
             "choice_node_on",
             "command_background",
+            "connection_point",
             "event_node_off",
             "event_node_on",
             "play_big",
@@ -34,6 +35,7 @@ namespace Fungus.EditorUtils
         public static Texture2D ChoiceNodeOff { get { return GetTexture("choice_node_off"); } }
         public static Texture2D ChoiceNodeOn { get { return GetTexture("choice_node_on"); } }
         public static Texture2D CommandBackground { get { return GetTexture("command_background"); } }
+        public static Texture2D ConnectionPoint { get { return GetTexture("connection_point"); } }
         public static Texture2D EventNodeOff { get { return GetTexture("event_node_off"); } }
         public static Texture2D EventNodeOn { get { return GetTexture("event_node_on"); } }
         public static Texture2D PlayBig { get { return GetTexture("play_big"); } }
diff --git a/Assets/Fungus/Scripts/Editor/GLDraw.cs b/Assets/Fungus/Scripts/Editor/GLDraw.cs
deleted file mode 100644
index 9ef5b222..00000000
--- a/Assets/Fungus/Scripts/Editor/GLDraw.cs
+++ /dev/null
@@ -1,292 +0,0 @@
-// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus).
-// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
-
-using UnityEngine;
-
-namespace Fungus.EditorUtils
-{
-    /// <summary>
-    /// Clipping code: http://forum.unity3d.com/threads/17066-How-to-draw-a-GUI-2D-quot-line-quot?p=230386#post230386
-    /// Thick line drawing code: http://unifycommunity.com/wiki/index.php?title=VectorLine
-    /// Credit: "http://cs-people.bu.edu/jalon/cs480/Oct11Lab/clip.c"
-    /// </summary>
-    public class GLDraw
-    {
-        protected static bool clippingEnabled;
-        protected static Rect clippingBounds;
-        public static Material lineMaterial = null;
-
-        protected static bool clip_test(float p, float q, ref float u1, ref float u2)
-        {
-            float r;
-            bool retval = true;
-
-            if (p < 0.0)
-            {
-                r = q / p;
-                if (r > u2)
-                    retval = false;
-                else if (r > u1)
-                    u1 = r;
-            }
-            else if (p > 0.0)
-            {
-                r = q / p;
-                if (r < u1)
-                    retval = false;
-                else if (r < u2)
-                    u2 = r;
-            }
-            else if (q < 0.0)
-                retval = false;
-
-            return retval;
-        }
-
-        public static bool segment_rect_intersection(Rect bounds, ref Vector2 p1, ref Vector2 p2)
-        {
-            float u1 = 0.0f, u2 = 1.0f, dx = p2.x - p1.x, dy;
-
-            if (clip_test(-dx, p1.x - bounds.xMin, ref u1, ref u2))
-            {
-                if (clip_test(dx, bounds.xMax - p1.x, ref u1, ref u2))
-                {
-                    dy = p2.y - p1.y;
-                    if (clip_test(-dy, p1.y - bounds.yMin, ref u1, ref u2))
-                    {
-                        if (clip_test(dy, bounds.yMax - p1.y, ref u1, ref u2))
-                        {
-                            if (u2 < 1.0)
-                            {
-                                p2.x = p1.x + u2 * dx;
-                                p2.y = p1.y + u2 * dy;
-                            }
-
-                            if (u1 > 0.0)
-                            {
-                                p1.x += u1 * dx;
-                                p1.y += u1 * dy;
-                            }
-                            return true;
-                        }
-                    }
-                }
-            }
-            return false;
-        }
-
-        public static void BeginGroup(Rect position)
-        {
-            clippingEnabled = true;
-            clippingBounds = new Rect(0, 0, position.width, position.height);
-            GUI.BeginGroup(position);
-        }
-        
-        public static void EndGroup()
-        {
-            GUI.EndGroup();
-            clippingBounds = new Rect(0, 0, Screen.width, Screen.height);
-            clippingEnabled = false;
-        }
-
-        public static Vector2 BeginScrollView(Rect position, Vector2 scrollPos, Rect viewRect, Rect clipRect)
-        {
-            clippingEnabled = true;
-            clippingBounds = clipRect;
-            return GUI.BeginScrollView(position, scrollPos, viewRect, GUIStyle.none, GUIStyle.none);
-        }
-        
-        public static void EndScrollView()
-        {
-            GUI.EndScrollView();
-            clippingBounds = new Rect(0, 0, Screen.width, Screen.height);
-            clippingEnabled = false;
-        }
-
-        public static void CreateMaterial()
-        {
-            if (lineMaterial != null)
-                return;
-
-            lineMaterial = Resources.Load("GLLineDraw", typeof(Material)) as Material;
-        }
-
-        public static void DrawLine(Vector2 start, Vector2 end, Color color, float width)
-        {
-            if (Event.current == null)
-                return;
-            if (Event.current.type != EventType.repaint)
-                return;
-
-            if (clippingEnabled)
-                if (!segment_rect_intersection(clippingBounds, ref start, ref end))
-                    return;
-
-            CreateMaterial();
-
-            lineMaterial.SetPass(0);
-
-            Vector3 startPt;
-            Vector3 endPt;
-
-            if (width == 1)
-            {
-                GL.Begin(GL.LINES);
-                GL.Color(color);
-                startPt = new Vector3(start.x, start.y, 0);
-                endPt = new Vector3(end.x, end.y, 0);
-                GL.Vertex(startPt);
-                GL.Vertex(endPt);
-            }
-            else
-            {
-                GL.Begin(GL.QUADS);
-                GL.Color(color);
-                startPt = new Vector3(end.y, start.x, 0);
-                endPt = new Vector3(start.y, end.x, 0);
-                Vector3 perpendicular = (startPt - endPt).normalized * width;
-                Vector3 v1 = new Vector3(start.x, start.y, 0);
-                Vector3 v2 = new Vector3(end.x, end.y, 0);
-                GL.Vertex(v1 - perpendicular);
-                GL.Vertex(v1 + perpendicular);
-                GL.Vertex(v2 + perpendicular);
-                GL.Vertex(v2 - perpendicular);
-            }
-            GL.End();
-        }
-
-        public static void DrawRect(Rect rect, Color color)
-        {
-            if (Event.current == null)
-                return;
-            if (Event.current.type != EventType.repaint)
-                return;
-
-            CreateMaterial();
-            // set the current material
-            lineMaterial.SetPass( 0 );
-            GL.Begin( GL.QUADS );
-            GL.Color( color );
-            GL.Vertex3( rect.xMin, rect.yMin, 0 );
-            GL.Vertex3( rect.xMax, rect.yMin, 0 );
-            GL.Vertex3( rect.xMax, rect.yMax, 0 );
-            GL.Vertex3( rect.xMin, rect.yMax, 0 );
-            GL.End();
-        }
-
-        public static void DrawBox(Rect box, Color color, float width)
-        {
-            Vector2 p1 = new Vector2(box.xMin, box.yMin);
-            Vector2 p2 = new Vector2(box.xMax, box.yMin);
-            Vector2 p3 = new Vector2(box.xMax, box.yMax);
-            Vector2 p4 = new Vector2(box.xMin, box.yMax);
-            DrawLine(p1, p2, color, width);
-            DrawLine(p2, p3, color, width);
-            DrawLine(p3, p4, color, width);
-            DrawLine(p4, p1, color, width);
-        }
-
-        public static void DrawBox(Vector2 topLeftCorner, Vector2 bottomRightCorner, Color color, float width)
-        {
-            Rect box = new Rect(topLeftCorner.x, topLeftCorner.y, bottomRightCorner.x - topLeftCorner.x, bottomRightCorner.y - topLeftCorner.y);
-            DrawBox(box, color, width);
-        }
-
-        public static void DrawRoundedBox(Rect box, float radius, Color color, float width)
-        {
-            Vector2 p1, p2, p3, p4, p5, p6, p7, p8;
-            p1 = new Vector2(box.xMin + radius, box.yMin);
-            p2 = new Vector2(box.xMax - radius, box.yMin);
-            p3 = new Vector2(box.xMax, box.yMin + radius);
-            p4 = new Vector2(box.xMax, box.yMax - radius);
-            p5 = new Vector2(box.xMax - radius, box.yMax);
-            p6 = new Vector2(box.xMin + radius, box.yMax);
-            p7 = new Vector2(box.xMin, box.yMax - radius);
-            p8 = new Vector2(box.xMin, box.yMin + radius);
-
-            DrawLine(p1, p2, color, width);
-            DrawLine(p3, p4, color, width);
-            DrawLine(p5, p6, color, width);
-            DrawLine(p7, p8, color, width);
-
-            Vector2 t1, t2;
-            float halfRadius = radius / 2;
-
-            t1 = new Vector2(p8.x, p8.y + halfRadius);
-            t2 = new Vector2(p1.x - halfRadius, p1.y);
-            DrawBezier(p8, t1, p1, t2, color, width);
-
-            t1 = new Vector2(p2.x + halfRadius, p2.y);
-            t2 = new Vector2(p3.x, p3.y - halfRadius);
-            DrawBezier(p2, t1, p3, t2, color, width);
-
-            t1 = new Vector2(p4.x, p4.y + halfRadius);
-            t2 = new Vector2(p5.x + halfRadius, p5.y);
-            DrawBezier(p4, t1, p5, t2, color, width);
-
-            t1 = new Vector2(p6.x - halfRadius, p6.y);
-            t2 = new Vector2(p7.x, p7.y + halfRadius);
-            DrawBezier(p6, t1, p7, t2, color, width);
-        }
-
-        public static void DrawConnectingCurve(Vector2 start, Vector2 end, Color color, float width)
-        {
-            Vector2 distance = start - end;
-
-            Vector2 tangentA = start;
-            tangentA.x -= distance.x * 0.5f;
-            Vector2 tangentB = end;
-            tangentB.x += distance.x * 0.5f;
-
-            int segments = Mathf.FloorToInt((distance.magnitude / 20) * 3);
-
-            DrawBezier(start, tangentA, end, tangentB, color, width, segments);
-
-            Vector2 pA = CubeBezier(start, tangentA, end, tangentB, 0.6f);
-            Vector2 pB = CubeBezier(start, tangentA, end, tangentB, 0.7f);
-
-            float arrowHeadSize = 5;
-            
-            Vector2 arrowPosA = pB;
-            Vector2 arrowPosB = arrowPosA;
-            Vector2 arrowPosC = arrowPosA;
-            
-            Vector2 dir = (pB - pA).normalized;
-
-            arrowPosB.x += dir.y * arrowHeadSize;
-            arrowPosB.y -= dir.x * arrowHeadSize;
-            arrowPosB -= dir * arrowHeadSize;
-
-            arrowPosC.x -= dir.y * arrowHeadSize;
-            arrowPosC.y += dir.x * arrowHeadSize;
-            arrowPosC -= dir * arrowHeadSize;
-
-            DrawLine(arrowPosA, arrowPosB, color, 1.025f);
-            DrawLine(arrowPosA, arrowPosC, color, 1.025f);
-        }
-
-        public static void DrawBezier(Vector2 start, Vector2 startTangent, Vector2 end, Vector2 endTangent, Color color, float width)
-        {
-            int segments = Mathf.FloorToInt((start - end).magnitude / 20) * 3; // Three segments per distance of 20
-            DrawBezier(start, startTangent, end, endTangent, color, width, segments);
-        }
-
-        public static void DrawBezier(Vector2 start, Vector2 startTangent, Vector2 end, Vector2 endTangent, Color color, float width, int segments)
-        {
-            Vector2 startVector = CubeBezier(start, startTangent, end, endTangent, 0);
-            for (int i = 1; i <= segments; i++)
-            {
-                Vector2 endVector = CubeBezier(start, startTangent, end, endTangent, i / (float)segments);
-                DrawLine(startVector, endVector, color, width);
-                startVector = endVector;
-            }
-        }
-
-        private static Vector2 CubeBezier(Vector2 s, Vector2 st, Vector2 e, Vector2 et, float t)
-        {
-            float rt = 1 - t;
-            float rtt = rt * t;
-            return rt * rt * rt * s + 3 * rt * rtt * st + 3 * rtt * t * et + t * t * t * e;
-        }
-    }
-}
\ No newline at end of file
diff --git a/Assets/Fungus/Scripts/Editor/GLDraw.cs.meta b/Assets/Fungus/Scripts/Editor/GLDraw.cs.meta
deleted file mode 100644
index 6f3fb05c..00000000
--- a/Assets/Fungus/Scripts/Editor/GLDraw.cs.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 5184535fd41514a0ebd42c1d70a53545
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: