From 5a2c5e7e96cf0e0001c24a045be22e7f9e8f7628 Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Fri, 24 Jun 2022 15:09:27 +0800 Subject: [PATCH] //Create an menu item for TNode --- .../Attribute/AssetMenuCreateAsGraphEditor.cs | 12 ++++++ .../AssetMenuCreateAsGraphEditor.cs.meta | 3 ++ TNode/BaseModels/{Model.cs => IModel.cs} | 0 .../{Model.cs.meta => IModel.cs.meta} | 0 TNode/Editor/GraphEditor.cs | 13 +++++-- TNode/Editor/Model/NodeEditorData.cs | 4 +- TNode/Editor/Resources/ScriptTemplates.meta | 3 ++ .../Resources/ScriptTemplates/NewGraph.cs.txt | 10 +++++ .../ScriptTemplates/NewGraph.cs.txt.meta | 3 ++ .../ScriptTemplates/NewGraphEditor.cs.txt | 10 +++++ .../NewGraphEditor.cs.txt.meta | 3 ++ TNode/Editor/Tools.meta | 3 ++ TNode/Editor/Tools/GraphEditorCreator.meta | 3 ++ .../SourceGeneratorForGraphEditor.cs | 37 +++++++++++++++++++ .../SourceGeneratorForGraphEditor.cs.meta | 3 ++ Usage/Hello.asset | 23 ------------ Usage/Hello.asset.meta | 8 ---- Usage/TestGraphEditor.cs | 30 --------------- Usage/TestGraphEditor.cs.meta | 11 ------ Usage/TestGraphEditor.uss | 5 --- Usage/TestGraphEditor.uss.meta | 11 ------ Usage/TestGraphEditor.uxml | 12 ------ Usage/TestGraphEditor.uxml.meta | 10 ----- 23 files changed, 102 insertions(+), 115 deletions(-) create mode 100644 TNode/Attribute/AssetMenuCreateAsGraphEditor.cs create mode 100644 TNode/Attribute/AssetMenuCreateAsGraphEditor.cs.meta rename TNode/BaseModels/{Model.cs => IModel.cs} (100%) rename TNode/BaseModels/{Model.cs.meta => IModel.cs.meta} (100%) create mode 100644 TNode/Editor/Resources/ScriptTemplates.meta create mode 100644 TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt create mode 100644 TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt.meta create mode 100644 TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt create mode 100644 TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt.meta create mode 100644 TNode/Editor/Tools.meta create mode 100644 TNode/Editor/Tools/GraphEditorCreator.meta create mode 100644 TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs create mode 100644 TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs.meta delete mode 100644 Usage/Hello.asset delete mode 100644 Usage/Hello.asset.meta delete mode 100644 Usage/TestGraphEditor.cs delete mode 100644 Usage/TestGraphEditor.cs.meta delete mode 100644 Usage/TestGraphEditor.uss delete mode 100644 Usage/TestGraphEditor.uss.meta delete mode 100644 Usage/TestGraphEditor.uxml delete mode 100644 Usage/TestGraphEditor.uxml.meta diff --git a/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs b/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs new file mode 100644 index 0000000..38af2b1 --- /dev/null +++ b/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs @@ -0,0 +1,12 @@ +using System; +using JetBrains.Annotations; +using UnityEngine; + +namespace TNode.Attribute{ + [MeansImplicitUse] + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] + [BaseTypeRequired(typeof(ScriptableObject))] + public class AssetMenuCreateAsGraphEditorAttribute:System.Attribute{ + + } +} \ No newline at end of file diff --git a/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs.meta b/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs.meta new file mode 100644 index 0000000..e908835 --- /dev/null +++ b/TNode/Attribute/AssetMenuCreateAsGraphEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 536eae3bd21b49609d88e3bd24b4d7d0 +timeCreated: 1656038984 \ No newline at end of file diff --git a/TNode/BaseModels/Model.cs b/TNode/BaseModels/IModel.cs similarity index 100% rename from TNode/BaseModels/Model.cs rename to TNode/BaseModels/IModel.cs diff --git a/TNode/BaseModels/Model.cs.meta b/TNode/BaseModels/IModel.cs.meta similarity index 100% rename from TNode/BaseModels/Model.cs.meta rename to TNode/BaseModels/IModel.cs.meta diff --git a/TNode/Editor/GraphEditor.cs b/TNode/Editor/GraphEditor.cs index 31aa286..38fd04c 100644 --- a/TNode/Editor/GraphEditor.cs +++ b/TNode/Editor/GraphEditor.cs @@ -1,6 +1,7 @@ using Codice.CM.Common; using TNode.BaseViews; using TNode.Cache; +using TNode.Editor.Model; using TNode.Models; using UnityEditor; using UnityEngine; @@ -9,16 +10,21 @@ using UnityEngine.UIElements; namespace TNode.Editor{ + public abstract class GraphEditor : EditorWindow where T:GraphData{ protected DataGraphView _graphView; [FormerlySerializedAs("m_VisualTreeAsset")] [SerializeField] + + private VisualTreeAsset mVisualTreeAsset = default; + //Persist editor data ,such as node position,node size ,etc ,in this script object + public NodeEditorData nodeEditorData; - public void CreateGUI() - { + public void CreateGUI(){ + // Each editor window contains a root VisualElement object VisualElement root = rootVisualElement; - + // Instantiate UXML VisualElement labelFromUXML = mVisualTreeAsset.Instantiate(); root.Add(labelFromUXML); @@ -66,5 +72,6 @@ namespace TNode.Editor{ protected virtual void OnCreate(){ } + } } diff --git a/TNode/Editor/Model/NodeEditorData.cs b/TNode/Editor/Model/NodeEditorData.cs index 8eb12bf..2b56e64 100644 --- a/TNode/Editor/Model/NodeEditorData.cs +++ b/TNode/Editor/Model/NodeEditorData.cs @@ -4,8 +4,8 @@ using UnityEngine; namespace TNode.Editor.Model{ [Serializable] - - public class NodeEditorData{ + + public class NodeEditorData:ScriptableObject{ [SerializeReference] public NodeData nodeData; public Rect nodePos; } diff --git a/TNode/Editor/Resources/ScriptTemplates.meta b/TNode/Editor/Resources/ScriptTemplates.meta new file mode 100644 index 0000000..758c8cc --- /dev/null +++ b/TNode/Editor/Resources/ScriptTemplates.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 299cd93109da49408e38effcc26b8287 +timeCreated: 1656052583 \ No newline at end of file diff --git a/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt b/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt new file mode 100644 index 0000000..8d32d0f --- /dev/null +++ b/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt @@ -0,0 +1,10 @@ +using TNode.Editor; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEditor.Experimental.GraphView; +using UnityEngine; +using UnityEngine.UIElements; + +public class $GraphClassName$ : GraphData{ + +} \ No newline at end of file diff --git a/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt.meta b/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt.meta new file mode 100644 index 0000000..c23d1f7 --- /dev/null +++ b/TNode/Editor/Resources/ScriptTemplates/NewGraph.cs.txt.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 31fa431b7bdc4f1db16057eef0975d36 +timeCreated: 1656054430 \ No newline at end of file diff --git a/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt new file mode 100644 index 0000000..6cb9b36 --- /dev/null +++ b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt @@ -0,0 +1,10 @@ +using TNode.Editor; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEditor.Experimental.GraphView; +using UnityEngine; +using UnityEngine.UIElements; + +public class $EditorClassName$ : GraphEditor<$GraphClassName$>{ + +} \ No newline at end of file diff --git a/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt.meta b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt.meta new file mode 100644 index 0000000..f9baf67 --- /dev/null +++ b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 574dbcc7c8844b4fa3ded9d767b648bd +timeCreated: 1656052800 \ No newline at end of file diff --git a/TNode/Editor/Tools.meta b/TNode/Editor/Tools.meta new file mode 100644 index 0000000..2ef7685 --- /dev/null +++ b/TNode/Editor/Tools.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ca83c0440a6942dba843d3912d8a246d +timeCreated: 1656050466 \ No newline at end of file diff --git a/TNode/Editor/Tools/GraphEditorCreator.meta b/TNode/Editor/Tools/GraphEditorCreator.meta new file mode 100644 index 0000000..50bc2ae --- /dev/null +++ b/TNode/Editor/Tools/GraphEditorCreator.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: da92e3f72aeb448d90153ed496afaf1f +timeCreated: 1656050509 \ No newline at end of file diff --git a/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs b/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs new file mode 100644 index 0000000..c8c001a --- /dev/null +++ b/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Microsoft.CodeAnalysis; +using UnityEngine; + +namespace TNode.Editor.Tools.GraphEditorCreator{ + public class SourceGeneratorForGraphEditor{ + private readonly Regex Regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z0-9_]+$"); + public string GenerateGraphEditor(string editorClassName,string graphClassName,string templateName="NewGraphEditor.cs"){ + //Load Text Asset by Name + TextAsset template = Resources.Load("ScriptTemplates/"+templateName); + //Check if the class name is valid + if(!Regex.IsMatch(editorClassName)){ + Debug.LogError("The editor class name is invalid. It must be a valid C# identifier."); + } + //Check if the graph class name is valid + if(!Regex.IsMatch(graphClassName)){ + Debug.LogError("The graph class name is invalid. It must be a valid C# identifier."); + } + var source = template.text.Replace("$EditorClassName$",editorClassName).Replace("$GraphClassName$",graphClassName); + return source; + } + public string GenerateGraph(string graphClassName,string templatePath){ + //Check if graph class name is valid + var regex = new System.Text.RegularExpressions.Regex("^[a-zA-Z0-9_]+$"); + if(!Regex.IsMatch(graphClassName)){ + Debug.LogError("The graph class name is invalid. It must be a valid C# identifier."); + } + var template = File.ReadAllText(templatePath); + var source = template.Replace("$GraphClassName$",graphClassName); + return source; + } + } +} \ No newline at end of file diff --git a/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs.meta b/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs.meta new file mode 100644 index 0000000..63357b2 --- /dev/null +++ b/TNode/Editor/Tools/GraphEditorCreator/SourceGeneratorForGraphEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 00c37e0c9a6445af80e17a617dfd1b04 +timeCreated: 1656052182 \ No newline at end of file diff --git a/Usage/Hello.asset b/Usage/Hello.asset deleted file mode 100644 index 75743ca..0000000 --- a/Usage/Hello.asset +++ /dev/null @@ -1,23 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b991a97e1e8f4ac7bbebd5263dafb1c3, type: 3} - m_Name: Hello - m_EditorClassIdentifier: - nodes: [] - nodeLinks: [] - entryNode: - rid: -2 - references: - version: 2 - RefIds: - - rid: -2 - type: {class: , ns: , asm: } diff --git a/Usage/Hello.asset.meta b/Usage/Hello.asset.meta deleted file mode 100644 index 9b6753e..0000000 --- a/Usage/Hello.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4c206553cd2be4144994dc84eefb649d -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Usage/TestGraphEditor.cs b/Usage/TestGraphEditor.cs deleted file mode 100644 index 96e26e8..0000000 --- a/Usage/TestGraphEditor.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEngine.UIElements; - -public class TestGraphEditor : EditorWindow -{ - [SerializeField] - private VisualTreeAsset m_VisualTreeAsset = default; - - [MenuItem("Window/UI Toolkit/TestGraphEditor")] - public static void ShowExample() - { - TestGraphEditor wnd = GetWindow(); - wnd.titleContent = new GUIContent("TestGraphEditor"); - } - - public void CreateGUI() - { - // Each editor window contains a root VisualElement object - VisualElement root = rootVisualElement; - - // VisualElements objects can contain other VisualElement following a tree hierarchy. - VisualElement label = new Label("Hello World! From C#"); - root.Add(label); - - // Instantiate UXML - VisualElement labelFromUXML = m_VisualTreeAsset.Instantiate(); - root.Add(labelFromUXML); - } -} diff --git a/Usage/TestGraphEditor.cs.meta b/Usage/TestGraphEditor.cs.meta deleted file mode 100644 index 9a63e3f..0000000 --- a/Usage/TestGraphEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7755292ea9ad7684eb1fc2040280fe50 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Usage/TestGraphEditor.uss b/Usage/TestGraphEditor.uss deleted file mode 100644 index 218263a..0000000 --- a/Usage/TestGraphEditor.uss +++ /dev/null @@ -1,5 +0,0 @@ -.custom-label { - font-size: 20px; - -unity-font-style: bold; - color: rgb(68, 138, 255); -} \ No newline at end of file diff --git a/Usage/TestGraphEditor.uss.meta b/Usage/TestGraphEditor.uss.meta deleted file mode 100644 index c6568b0..0000000 --- a/Usage/TestGraphEditor.uss.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 867e511d719e0f14e871be51fb547391 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} - disableValidation: 0 diff --git a/Usage/TestGraphEditor.uxml b/Usage/TestGraphEditor.uxml deleted file mode 100644 index ec0fc86..0000000 --- a/Usage/TestGraphEditor.uxml +++ /dev/null @@ -1,12 +0,0 @@ - - -