public static void Initialize(string handleName, NodeHandleData data) { NodeHandleEditor window = CreateInstance <NodeHandleEditor>(); window.handleData = data; window.titleContent = new GUIContent("Handle Editor: " + handleName); window.ShowUtility(); }
//The GUI call for this Window void OnGUI() { GUILayout.BeginArea(new Rect(10f, 10f, 200f, position.height - 20f)); nodeName = EditorGUI.TextField(new Rect(0f, 0f, 200f, 20f), nodeName); nodeDescription = EditorGUI.TextArea(new Rect(0f, 30f, 200f, 60f), nodeDescription); EditorGUI.BeginChangeCheck(); nodeSize.x = EditorGUI.DelayedFloatField(new Rect(0f, 100f, 95f, 20f), nodeSize.x); nodeSize.y = EditorGUI.DelayedFloatField(new Rect(105f, 100f, 95f, 20f), nodeSize.y); if (EditorGUI.EndChangeCheck() && viewSize != nodeSize) { nodeSize = Northwind.Essentials.VectorMath.Step(nodeSize, 16f); oldSize = viewSize; timer = blendTime; } fixedSize = EditorGUI.Toggle(new Rect(0f, 120f, 200f, 20f), new GUIContent("Fixed"), fixedSize); nodeColor = EditorGUI.ColorField(new Rect(0f, 150f, 200f, 20f), new GUIContent("Color"), nodeColor); EditorGUI.BeginChangeCheck(); // Inputs and Outputs EditorGUI.LabelField(new Rect(0f, 180f, 100f, 20f), new GUIContent("Inputs"), GUI.skin.GetStyle("LargeButtonLeft")); GUILayout.BeginArea(new Rect(4f, 200f, 96f, 200f), GUI.skin.GetStyle("CN Box")); for (int ih = 0; ih < inputHandles.Count; ih++) { if (GUI.Button(new Rect(4f, 4f + ih * 24f, 88f, 20f), "Input " + ih)) { NodeHandleEditor.Initialize("Input " + ih, inputHandles[ih]); } } GUILayout.EndArea(); if (GUI.Button(new Rect(0f, 400f, 50f, 20f), "+", GUI.skin.GetStyle("LargeButtonLeft"))) { if (inputHandles.Count < 8) { inputHandles.Add(new NodeHandleData()); } } if (GUI.Button(new Rect(50f, 400f, 50f, 20f), "-", GUI.skin.GetStyle("LargeButtonMid"))) { inputHandles.RemoveAt(inputHandles.Count - 1); } EditorGUI.LabelField(new Rect(100f, 180f, 100f, 20f), new GUIContent("Outputs"), GUI.skin.GetStyle("LargeButtonRight")); GUILayout.BeginArea(new Rect(100f, 200f, 96f, 200f), GUI.skin.GetStyle("CN Box")); for (int oh = 0; oh < outputHandles.Count; oh++) { if (GUI.Button(new Rect(4f, 4f + oh * 24f, 88f, 20f), "Output " + oh)) { NodeHandleEditor.Initialize("Output " + oh, outputHandles[oh]); } } GUILayout.EndArea(); if (GUI.Button(new Rect(100f, 400f, 50f, 20f), "+", GUI.skin.GetStyle("LargeButtonMid"))) { if (outputHandles.Count < 8) { outputHandles.Add(new NodeHandleData()); } } if (GUI.Button(new Rect(150f, 400f, 50f, 20f), "-", GUI.skin.GetStyle("LargeButtonRight"))) { outputHandles.RemoveAt(outputHandles.Count - 1); } if (EditorGUI.EndChangeCheck()) { readd = true; } // Creation buttons if (GUI.Button(new Rect(0f, position.height - 40f, 95f, 20f), "Create")) { string template = GetNodeTemplate(); // Node Data template = template.Replace("#NODE_NAME#", nodeName); template = template.Replace("#NODE_DESCRIPTION#", nodeDescription); template = template.Replace("#NODE_WIDTH#", nodeSize.x + "f"); template = template.Replace("#NODE_HEIGHT#", nodeSize.y + "f"); template = template.Replace("#NODE_FIXED#", fixedSize ? "true" : "false"); template = template.Replace("#NODE_COLOR#", nodeColor.r + "f, " + nodeColor.g + "f, " + nodeColor.b + "f"); // Class Data template = template.Replace("#NODE_CLASSNAME#", nodeName.Replace(" ", "")); // Input Handles if (inputHandles.Count <= 0) { template = template.Replace("#NODE_INPUT_HANDLES#", "// No Inputs"); } else { string handles = ""; for (int ih = 0; ih < inputHandles.Count; ih++) { string handleTemplate = (ih > 0 ? "\t\t" : "") + GetHandleTemplate(); handleTemplate = handleTemplate.Replace("#HANDLE_ID#", ih + ""); handleTemplate = handleTemplate.Replace("#HANDLE_CONNECTION#", "ConnectionType.Input"); handleTemplate = handleTemplate.Replace("#HANDLE_Y#", inputHandles[ih].y + "f"); handleTemplate = handleTemplate.Replace("#HANDLE_FIXED#", inputHandles[ih].fixedPosition ? "true" : "false"); handleTemplate = handleTemplate.Replace("#HANDLE_TOOLTIP#", inputHandles[ih].tooltip); handleTemplate = handleTemplate.Replace("#HANDLE_CONNECTION_SMALL#", "input"); handles += handleTemplate + "\n\n"; } template = template.Replace("#NODE_INPUT_HANDLES#", handles); } // Output Handles if (outputHandles.Count <= 0) { template = template.Replace("#NODE_OUTPUT_HANDLES#", "// No Outputs"); } else { string handles = ""; for (int oh = 0; oh < outputHandles.Count; oh++) { string handleTemplate = (oh > 0 ? "\t\t" : "") + GetHandleTemplate(); handleTemplate = handleTemplate.Replace("#HANDLE_ID#", oh + ""); handleTemplate = handleTemplate.Replace("#HANDLE_CONNECTION#", "ConnectionType.Output"); handleTemplate = handleTemplate.Replace("#HANDLE_Y#", outputHandles[oh].y + "f"); handleTemplate = handleTemplate.Replace("#HANDLE_FIXED#", outputHandles[oh].fixedPosition ? "true" : "false"); handleTemplate = handleTemplate.Replace("#HANDLE_TOOLTIP#", outputHandles[oh].tooltip); handleTemplate = handleTemplate.Replace("#HANDLE_CONNECTION_SMALL#", "output"); handles += handleTemplate + "\n\n"; } template = template.Replace("#NODE_OUTPUT_HANDLES#", handles); } FileOperator.SaveToStringFile(template, FileOperator.GetProjectPath() + GetSelectedPathOrFallback() + "/" + nodeName.Replace(" ", "") + "Node.cs"); template = GetEditorTemplate(); template = template.Replace("#NODE_CLASS#", nodeName.Replace(" ", "") + "Node"); FileOperator.SaveToStringFile(template, FileOperator.GetProjectPath() + GetSelectedPathOrFallback() + "/Editor/" + nodeName.Replace(" ", "") + "NodeEditor.cs"); AssetDatabase.Refresh(); Close(); } if (GUI.Button(new Rect(105f, position.height - 40f, 95f, 20f), "Cancel")) { Close(); } GUILayout.EndArea(); //GUILayout.Label(GetSelectedPathOrFallback()); GUILayout.BeginArea(new Rect(220f, 0f, position.width - 220f, position.height), GUI.skin.GetStyle("GroupBox")); NodePreviewer.DrawNodePreview(new Vector2((position.width - 220f) / 2f - (viewSize.x + addedDemoSize.x + 64f) / 2f, position.height / 2f - (viewSize.y + addedDemoSize.y + 32f) / 2f), null, new NodeDataAttribute(nodeName, nodeDescription, viewSize.x + addedDemoSize.x, viewSize.y + addedDemoSize.y, red: nodeColor.r, green: nodeColor.g, blue: nodeColor.b), tempHandles.ToArray()); GUILayout.EndArea(); }