diff --git a/Scripts/Editor/NodeEditorUtilities.cs b/Scripts/Editor/NodeEditorUtilities.cs
index d0cbc7b..0d98420 100644
--- a/Scripts/Editor/NodeEditorUtilities.cs
+++ b/Scripts/Editor/NodeEditorUtilities.cs
@@ -1,12 +1,20 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Reflection;
+using System.Text;
+using UnityEditor;
+using UnityEngine;
+using Object = UnityEngine.Object;
namespace XNodeEditor {
/// A set of editor-only utilities and extensions for UnityNodeEditorBase
public static class NodeEditorUtilities {
+ /// C#'s Script Icon [The one MonoBhevaiour Scripts have].
+ private static Texture2D scriptIcon = (EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D);
+
public static bool GetAttrib(Type classType, out T attribOut) where T : Attribute {
object[] attribs = classType.GetCustomAttributes(typeof(T), false);
return GetAttrib(attribs, out attribOut);
@@ -85,5 +93,86 @@ namespace XNodeEditor {
}
} else return type.ToString();
}
+
+ /// Creates a new C# Class.
+ [MenuItem("Assets/Create/xNode/Node C# Script", false, 89)]
+ private static void CreateNode() {
+ string[] guids = AssetDatabase.FindAssets("xNode_NodeTemplate.cs");
+ if (guids.Length == 0) {
+ Debug.LogWarning("xNode_NodeTemplate.cs.txt not found in asset database");
+ return;
+ }
+ string path = AssetDatabase.GUIDToAssetPath(guids[0]);
+ CreateFromTemplate(
+ "NewNode.cs",
+ path
+ );
+ }
+
+ /// Creates a new C# Class.
+ [MenuItem("Assets/Create/xNode/NodeGraph C# Script", false, 89)]
+ private static void CreateGraph() {
+ string[] guids = AssetDatabase.FindAssets("xNode_NodeGraphTemplate.cs");
+ if (guids.Length == 0) {
+ Debug.LogWarning("xNode_NodeGraphTemplate.cs.txt not found in asset database");
+ return;
+ }
+ string path = AssetDatabase.GUIDToAssetPath(guids[0]);
+ CreateFromTemplate(
+ "NewNodeGraph.cs",
+ path
+ );
+ }
+
+ public static void CreateFromTemplate(string initialName, string templatePath) {
+ ProjectWindowUtil.StartNameEditingIfProjectWindowExists(
+ 0,
+ ScriptableObject.CreateInstance(),
+ initialName,
+ scriptIcon,
+ templatePath
+ );
+ }
+
+ /// Inherits from EndNameAction, must override EndNameAction.Action
+ public class DoCreateCodeFile : UnityEditor.ProjectWindowCallback.EndNameEditAction {
+ public override void Action(int instanceId, string pathName, string resourceFile) {
+ Object o = CreateScript(pathName, resourceFile);
+ ProjectWindowUtil.ShowCreatedAsset(o);
+ }
+ }
+
+ /// Creates Script from Template's path.
+ internal static UnityEngine.Object CreateScript(string pathName, string templatePath) {
+ string className = Path.GetFileNameWithoutExtension(pathName).Replace(" ", string.Empty);
+ string templateText = string.Empty;
+
+ UTF8Encoding encoding = new UTF8Encoding(true, false);
+
+ if (File.Exists(templatePath)) {
+ /// Read procedures.
+ StreamReader reader = new StreamReader(templatePath);
+ templateText = reader.ReadToEnd();
+ reader.Close();
+
+ templateText = templateText.Replace("#SCRIPTNAME#", className);
+ templateText = templateText.Replace("#NOTRIM#", string.Empty);
+ /// You can replace as many tags you make on your templates, just repeat Replace function
+ /// e.g.:
+ /// templateText = templateText.Replace("#NEWTAG#", "MyText");
+
+ /// Write procedures.
+
+ StreamWriter writer = new StreamWriter(Path.GetFullPath(pathName), false, encoding);
+ writer.Write(templateText);
+ writer.Close();
+
+ AssetDatabase.ImportAsset(pathName);
+ return AssetDatabase.LoadAssetAtPath(pathName, typeof(Object));
+ } else {
+ Debug.LogError(string.Format("The template file was not found: {0}", templatePath));
+ return null;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Scripts/Editor/Resources/ScriptTemplates.meta b/Scripts/Editor/Resources/ScriptTemplates.meta
new file mode 100644
index 0000000..b2435e8
--- /dev/null
+++ b/Scripts/Editor/Resources/ScriptTemplates.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 86b677955452bb5449f9f4dd47b6ddfe
+folderAsset: yes
+timeCreated: 1519049391
+licenseType: Free
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt
new file mode 100644
index 0000000..e3d7c36
--- /dev/null
+++ b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt
@@ -0,0 +1,9 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using XNode;
+
+[CreateAssetMenu]
+public class #SCRIPTNAME# : NodeGraph {
+ #NOTRIM#
+}
\ No newline at end of file
diff --git a/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt.meta b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt.meta
new file mode 100644
index 0000000..b55bd75
--- /dev/null
+++ b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeGraphTemplate.cs.txt.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8165767f64da7d94e925f61a38da668c
+timeCreated: 1519049802
+licenseType: Free
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt
new file mode 100644
index 0000000..de791fc
--- /dev/null
+++ b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using XNode;
+
+public class #SCRIPTNAME# : Node {
+
+ // Use this for initialization
+ protected override void Init() {
+ base.Init();
+ #NOTRIM#
+ }
+
+ // Return the correct value of an output port when requested
+ public override object GetValue(NodePort port) {
+ return null; // Replace this
+ }
+}
\ No newline at end of file
diff --git a/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt.meta b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt.meta
new file mode 100644
index 0000000..455420a
--- /dev/null
+++ b/Scripts/Editor/Resources/ScriptTemplates/xNode_NodeTemplate.cs.txt.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 85f6f570600a1a44d8e734cb111a8b89
+timeCreated: 1519049802
+licenseType: Free
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: