mirror of
https://github.com/Siccity/xNode.git
synced 2025-12-20 01:06:01 +08:00
Added c# script templates
Create > xNode > Node/NodeGraph
This commit is contained in:
parent
b787b57eb3
commit
5ef958f298
@ -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 {
|
||||
/// <summary> A set of editor-only utilities and extensions for UnityNodeEditorBase </summary>
|
||||
public static class NodeEditorUtilities {
|
||||
|
||||
/// <summary>C#'s Script Icon [The one MonoBhevaiour Scripts have].</summary>
|
||||
private static Texture2D scriptIcon = (EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D);
|
||||
|
||||
public static bool GetAttrib<T>(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();
|
||||
}
|
||||
|
||||
/// <summary>Creates a new C# Class.</summary>
|
||||
[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
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>Creates a new C# Class.</summary>
|
||||
[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<DoCreateCodeFile>(),
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Creates Script from Template's path.</summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
10
Scripts/Editor/Resources/ScriptTemplates.meta
Normal file
10
Scripts/Editor/Resources/ScriptTemplates.meta
Normal file
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 86b677955452bb5449f9f4dd47b6ddfe
|
||||
folderAsset: yes
|
||||
timeCreated: 1519049391
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,9 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using XNode;
|
||||
|
||||
[CreateAssetMenu]
|
||||
public class #SCRIPTNAME# : NodeGraph {
|
||||
#NOTRIM#
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8165767f64da7d94e925f61a38da668c
|
||||
timeCreated: 1519049802
|
||||
licenseType: Free
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 85f6f570600a1a44d8e734cb111a8b89
|
||||
timeCreated: 1519049802
|
||||
licenseType: Free
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user