diff --git a/Assets/Fungus/EditorResources/Textures/connection_point.png b/Assets/Fungus/EditorResources/Textures/connection_point.png new file mode 100644 index 00000000..5a6719e7 Binary files /dev/null and b/Assets/Fungus/EditorResources/Textures/connection_point.png differ 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/Resources/GLLineDraw.mat b/Assets/Fungus/Resources/GLLineDraw.mat deleted file mode 100644 index d6af24a8..00000000 --- a/Assets/Fungus/Resources/GLLineDraw.mat +++ /dev/null @@ -1,138 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: GLLineDraw - m_Shader: {fileID: 4800000, guid: ef64b0d30343049d4a634192975fab73, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailNormalMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _ParallaxMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _OcclusionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _EmissionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailMask - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailAlbedoMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _MetallicGlossMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _SrcBlend - second: 1 - data: - first: - name: _DstBlend - second: 0 - data: - first: - name: _Cutoff - second: .5 - data: - first: - name: _Parallax - second: .0199999996 - data: - first: - name: _ZWrite - second: 1 - data: - first: - name: _Glossiness - second: .5 - data: - first: - name: _BumpScale - second: 1 - data: - first: - name: _OcclusionStrength - second: 1 - data: - first: - name: _DetailNormalMapScale - second: 1 - data: - first: - name: _UVSec - second: 0 - data: - first: - name: _Mode - second: 0 - data: - first: - name: _Metallic - second: 0 - m_Colors: - data: - first: - name: _EmissionColor - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Fungus/Resources/GLLineDraw.mat.meta b/Assets/Fungus/Resources/GLLineDraw.mat.meta deleted file mode 100644 index 9d6a27d2..00000000 --- a/Assets/Fungus/Resources/GLLineDraw.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4209d966cfca44792ad45389a996015e -timeCreated: 1434115586 -licenseType: Free -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Fungus/Resources/GLLineDraw.shader b/Assets/Fungus/Resources/GLLineDraw.shader deleted file mode 100644 index 761be92f..00000000 --- a/Assets/Fungus/Resources/GLLineDraw.shader +++ /dev/null @@ -1,11 +0,0 @@ -Shader "Lines/Colored Blended" { - SubShader { - Pass { - Blend SrcAlpha OneMinusSrcAlpha - ZWrite Off Cull Off Fog { Mode Off } - BindChannels { - Bind "vertex", vertex Bind "color", color - } - } - } -} diff --git a/Assets/Fungus/Resources/GLLineDraw.shader.meta b/Assets/Fungus/Resources/GLLineDraw.shader.meta deleted file mode 100644 index e94f8e19..00000000 --- a/Assets/Fungus/Resources/GLLineDraw.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ef64b0d30343049d4a634192975fab73 -timeCreated: 1434114816 -licenseType: Free -ShaderImporter: - defaultTextures: [] - 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 mouseDownSelectionState = new List(); + 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/FungusEditorResources.cs b/Assets/Fungus/Scripts/Editor/FungusEditorResources.cs index ca9c2c21..411fab08 100644 --- a/Assets/Fungus/Scripts/Editor/FungusEditorResources.cs +++ b/Assets/Fungus/Scripts/Editor/FungusEditorResources.cs @@ -35,6 +35,7 @@ namespace Fungus.EditorUtils } } + // Handle reimporting all assets internal class EditorResourcesPostProcessor : AssetPostprocessor { private static void OnPostprocessAllAssets(string[] importedAssets, string[] _, string[] __, string[] ___) @@ -206,7 +207,7 @@ namespace Fungus.EditorUtils } } - instance.updateOnReloadScripts = false; + serializedObject.FindProperty("updateOnReloadScripts").boolValue = false; // The ApplyModifiedPropertiesWithoutUndo() function wasn't documented until Unity 5.2 #if UNITY_5_0 || UNITY_5_1 diff --git a/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs b/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs index 27b06e77..7ea1ea0c 100644 --- a/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs +++ b/Assets/Fungus/Scripts/Editor/FungusEditorResourcesGenerated.cs @@ -16,6 +16,7 @@ namespace Fungus.EditorUtils [SerializeField] private EditorTexture choice_node_off; [SerializeField] private EditorTexture choice_node_on; [SerializeField] private EditorTexture command_background; + [SerializeField] private EditorTexture connection_point; [SerializeField] private EditorTexture event_node_off; [SerializeField] private EditorTexture event_node_on; [SerializeField] private EditorTexture play_big; @@ -32,6 +33,7 @@ namespace Fungus.EditorUtils public static Texture2D ChoiceNodeOff { get { return Instance.choice_node_off.Texture2D; } } public static Texture2D ChoiceNodeOn { get { return Instance.choice_node_on.Texture2D; } } public static Texture2D CommandBackground { get { return Instance.command_background.Texture2D; } } + public static Texture2D ConnectionPoint { get { return Instance.connection_point.Texture2D; } } public static Texture2D EventNodeOff { get { return Instance.event_node_off.Texture2D; } } public static Texture2D EventNodeOn { get { return Instance.event_node_on.Texture2D; } } public static Texture2D PlayBig { get { return Instance.play_big.Texture2D; } } 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 -{ - /// - /// 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" - /// - 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: