diff --git a/Scripts/Editor/NodeEditor.cs b/Scripts/Editor/NodeEditor.cs index fd5c977..31ade8f 100644 --- a/Scripts/Editor/NodeEditor.cs +++ b/Scripts/Editor/NodeEditor.cs @@ -19,8 +19,8 @@ public class NodeEditor { } protected void DrawDefaultHeaderGUI() { - - GUILayout.Label(target.name, NodeEditorResources.styles.headerStyle, GUILayout.Height(30)); + GUI.color = Color.white; + GUILayout.Label(target.name, NodeEditorResources.styles.nodeHeader, GUILayout.Height(30)); } /// Draws standard editors for all fields marked with or @@ -63,14 +63,14 @@ public class NodeEditor { /// Draw node port GUI using automatic layouting. Returns port handle position. protected Vector2 DrawNodePortGUI(NodePort port) { - GUIStyle style = port.direction == NodePort.IO.Input ? NodeEditorResources.styles.inputStyle : NodeEditorResources.styles.outputStyle; + GUIStyle style = port.direction == NodePort.IO.Input ? NodeEditorResources.styles.inputPort : NodeEditorResources.styles.outputPort; Rect rect = GUILayoutUtility.GetRect(new GUIContent(port.name.PrettifyCamelCase()), style); return DrawNodePortGUI(rect, port); } /// Draw node port GUI in rect. Returns port handle position. protected Vector2 DrawNodePortGUI(Rect rect, NodePort port) { - GUIStyle style = port.direction == NodePort.IO.Input ? NodeEditorResources.styles.inputStyle : NodeEditorResources.styles.outputStyle; + GUIStyle style = port.direction == NodePort.IO.Input ? NodeEditorResources.styles.inputPort : NodeEditorResources.styles.outputPort; GUI.Label(rect, new GUIContent(port.name.PrettifyCamelCase()), style); Vector2 handlePoint = rect.center; @@ -79,6 +79,14 @@ public class NodeEditor { case NodePort.IO.Input: handlePoint.x = rect.xMin; break; case NodePort.IO.Output: handlePoint.x = rect.xMax; break; } + + Color col = GUI.color; + Rect handleRect = new Rect(handlePoint.x-8,handlePoint.y-8,16,16); + GUI.color = new Color(0.29f, 0.31f, 0.32f); + GUI.DrawTexture(handleRect, NodeEditorResources.dotOuter); + GUI.color = NodeEditorUtilities.GetTypeColor(port.type); + GUI.DrawTexture(handleRect, NodeEditorResources.dot); + GUI.color = col; return handlePoint; } @@ -106,7 +114,11 @@ public class NodeEditor { fieldValue = EditorGUILayout.Toggle(fieldPrettyName, (bool)fieldValue); } else if (fieldType.IsEnum) { - fieldValue = EditorGUILayout.EnumPopup(fieldPrettyName, (Enum)fieldValue); + Rect rect = EditorGUILayout.GetControlRect(); + rect.width *= 0.5f; + EditorGUI.LabelField(rect, fieldPrettyName); + rect.x += rect.width; + fieldValue = EditorGUI.EnumPopup(rect, (Enum)fieldValue); } else if (fieldType == typeof(string)) { diff --git a/Scripts/Editor/NodeEditorGUI.cs b/Scripts/Editor/NodeEditorGUI.cs index 441c7ce..9b473ba 100644 --- a/Scripts/Editor/NodeEditorGUI.cs +++ b/Scripts/Editor/NodeEditorGUI.cs @@ -12,10 +12,9 @@ public partial class NodeEditorWindow { Controls(); DrawGrid(position, zoom, panOffset); - DrawNodes(); DrawConnections(); DrawDraggedConnection(); - DrawPortHandles(); + DrawNodes(); DrawToolbar(); GUI.matrix = m; @@ -115,7 +114,7 @@ public partial class NodeEditorWindow { Color prevCol = GUI.color; Color edgeCol = new Color(0.1f, 0.1f, 0.1f, col.a); Handles.DrawBezier(startPoint, endPoint, startTangent, endTangent, edgeCol, null, 4); - Handles.DrawBezier(startPoint, endPoint, startTangent, endTangent, col, null, 2); + Handles.DrawBezier(startPoint, endPoint, startTangent, endTangent, col, null, 4); GUI.color = prevCol; } @@ -137,20 +136,6 @@ public partial class NodeEditorWindow { } } - /// Draws the draggable circle handles on the ports - public void DrawPortHandles() { - Color col = GUI.color; - foreach(var kvp in portConnectionPoints) { - Rect rect = GridToWindowRect(kvp.Value); - GUI.color = new Color(0.29f, 0.31f, 0.32f); - GUI.DrawTexture(rect, NodeEditorResources.dotOuter); - GUI.color = NodeEditorUtilities.GetTypeColor(kvp.Key.type); - GUI.DrawTexture(rect, NodeEditorResources.dot); - - } - GUI.color = col; - } - private void DrawNodes() { Event e = Event.current; if (e.type == EventType.Repaint) portConnectionPoints.Clear(); @@ -172,11 +157,12 @@ public partial class NodeEditorWindow { //Get node position Vector2 nodePos = GridToWindowPositionNoClipped(node.rect.position); - GUIStyle style = (node == selectedNode) ? (GUIStyle)"flow node 0 on" : (GUIStyle)"flow node 0"; - style = new GUIStyle(style); - style.padding.top = 0; + //GUIStyle style = (node == selectedNode) ? (GUIStyle)"flow node 0 on" : (GUIStyle)"flow node 0"; + GUILayout.BeginArea(new Rect(nodePos,new Vector2(nodeEditor.GetWidth(), 4000))); - GUILayout.BeginVertical(style); + + GUIStyle style = NodeEditorResources.styles.nodeBody; + GUILayout.BeginVertical(new GUIStyle(style)); //Draw node contents Dictionary portHandlePoints; diff --git a/Scripts/Editor/NodeEditorResources.cs b/Scripts/Editor/NodeEditorResources.cs index 14055d0..efc5e95 100644 --- a/Scripts/Editor/NodeEditorResources.cs +++ b/Scripts/Editor/NodeEditorResources.cs @@ -3,42 +3,52 @@ using UnityEditor; using System; public static class NodeEditorResources { - + //Unec textures public static Texture2D gridTexture { get { return _gridTexture != null ? _gridTexture : _gridTexture = GenerateGridTexture(); } } private static Texture2D _gridTexture; public static Texture2D crossTexture { get { return _crossTexture != null ? _crossTexture : _crossTexture = GenerateCrossTexture(); } } private static Texture2D _crossTexture; - public static Texture2D dot { get { return _dot != null ? _dot : _dot = Resources.Load("dot"); } } + public static Texture2D dot { get { return _dot != null ? _dot : _dot = Resources.Load("unec_dot"); } } private static Texture2D _dot; - public static Texture2D dotOuter { get { return _dotOuter != null ? _dotOuter : _dotOuter = Resources.Load("dot_outer"); } } + public static Texture2D dotOuter { get { return _dotOuter != null ? _dotOuter : _dotOuter = Resources.Load("unec_dot_outer"); } } private static Texture2D _dotOuter; + public static Texture2D nodeBody { get { return _nodeBody != null ? _nodeBody : _nodeBody = Resources.Load("unec_node"); } } + private static Texture2D _nodeBody; + //Grid colors private static Color backgroundColor = new Color(0.18f, 0.18f, 0.18f); private static Color veinColor = new Color(0.25f, 0.25f, 0.25f); private static Color arteryColor = new Color(0.34f, 0.34f, 0.34f); private static Color crossColor = new Color(0.45f, 0.45f, 0.45f); + //Unec styles public static Styles styles { get { return _styles != null ? _styles : _styles = new Styles(); } } public static Styles _styles = null; public class Styles { - public GUIStyle inputStyle, outputStyle, headerStyle; + public GUIStyle inputPort, outputPort, nodeHeader, nodeBody; public Styles() { GUIStyle baseStyle = new GUIStyle("Label"); baseStyle.fixedHeight = 18; - inputStyle = new GUIStyle(baseStyle); - inputStyle.alignment = TextAnchor.UpperLeft; - inputStyle.padding.left = 10; + inputPort = new GUIStyle(baseStyle); + inputPort.alignment = TextAnchor.UpperLeft; + inputPort.padding.left = 10; - outputStyle = new GUIStyle(baseStyle); - outputStyle.alignment = TextAnchor.UpperRight; - outputStyle.padding.right = 10; + outputPort = new GUIStyle(baseStyle); + outputPort.alignment = TextAnchor.UpperRight; + outputPort.padding.right = 10; - headerStyle = new GUIStyle(); - headerStyle.alignment = TextAnchor.MiddleCenter; - headerStyle.fontStyle = FontStyle.Bold; + nodeHeader = new GUIStyle(); + nodeHeader.alignment = TextAnchor.MiddleCenter; + nodeHeader.fontStyle = FontStyle.Bold; + nodeHeader.normal.textColor = Color.white; + + nodeBody = new GUIStyle(); + nodeBody.normal.background = NodeEditorResources.nodeBody; + nodeBody.border = new RectOffset(32, 32, 32, 32); + nodeBody.padding = new RectOffset(10, 10, 2, 2); } } diff --git a/Scripts/Editor/Resources/dot.png b/Scripts/Editor/Resources/unec_dot.png similarity index 100% rename from Scripts/Editor/Resources/dot.png rename to Scripts/Editor/Resources/unec_dot.png diff --git a/Scripts/Editor/Resources/dot.png.meta b/Scripts/Editor/Resources/unec_dot.png.meta similarity index 100% rename from Scripts/Editor/Resources/dot.png.meta rename to Scripts/Editor/Resources/unec_dot.png.meta diff --git a/Scripts/Editor/Resources/dot_outer.png b/Scripts/Editor/Resources/unec_dot_outer.png similarity index 100% rename from Scripts/Editor/Resources/dot_outer.png rename to Scripts/Editor/Resources/unec_dot_outer.png diff --git a/Scripts/Editor/Resources/dot_outer.png.meta b/Scripts/Editor/Resources/unec_dot_outer.png.meta similarity index 100% rename from Scripts/Editor/Resources/dot_outer.png.meta rename to Scripts/Editor/Resources/unec_dot_outer.png.meta diff --git a/Scripts/Editor/Resources/unec_node.psd b/Scripts/Editor/Resources/unec_node.psd new file mode 100644 index 0000000..e830e32 Binary files /dev/null and b/Scripts/Editor/Resources/unec_node.psd differ diff --git a/Scripts/Editor/Resources/unec_node.psd.meta b/Scripts/Editor/Resources/unec_node.psd.meta new file mode 100644 index 0000000..ddc85db --- /dev/null +++ b/Scripts/Editor/Resources/unec_node.psd.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 526e7d4dc27d75e41b5d751e4d390d8b +timeCreated: 1506975350 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + 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 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: