From 3c206b03df9369e6669d5824f9a13d467fceaa25 Mon Sep 17 00:00:00 2001 From: Thor Brigsted Date: Thu, 21 Sep 2017 21:30:12 +0200 Subject: [PATCH] Can now save NodeGraph as asset via NodeGraphAsset --- Examples/NewNodeGraph.asset | Bin 0 -> 5532 bytes Examples/NewNodeGraph.asset.meta | 9 +++++ Scripts/Editor/NodeEditorToolbar.cs | 5 +-- Scripts/Editor/NodeEditorWindow.cs | 55 ++++++++++++++++++++++------ Scripts/NodeGraph.cs | 2 +- Scripts/NodeGraphAsset.cs | 13 +++++++ Scripts/NodeGraphAsset.cs.meta | 12 ++++++ 7 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 Examples/NewNodeGraph.asset create mode 100644 Examples/NewNodeGraph.asset.meta create mode 100644 Scripts/NodeGraphAsset.cs create mode 100644 Scripts/NodeGraphAsset.cs.meta diff --git a/Examples/NewNodeGraph.asset b/Examples/NewNodeGraph.asset new file mode 100644 index 0000000000000000000000000000000000000000..62d3ed1080711e2ddbe61dec206acc7a2f8a076b GIT binary patch literal 5532 zcmeHLOKcNI7@mz=prz&2raXcK?5Rk>T5r1S zM&{CFGPO;`6nENQQBU{3$ zJOut3+8$Jm_pnFc_zGjPPsQ*wcn)B^C7NsTeAmO845MY!Ez) z5fAw|uI4)9`6PzNc|L992KxnZ7QjRCZ6yv6wRAWOoc2X~ZpB}L-=~q^&w*1hph!Ia zZ3@$P-0$`_Zm=`(dj~wEKPA>^DtjXXJ*g6ooHJvL@RZ{3!y1Zb7vZX=*d^F5pwjq@ zHm>;xBK|K4Z#F5;4*p)k#|ZD_r+i|m!sGnA+qmZc8e@uc4_cVN#lIKudhzcgT-DC_ z`yzaDQU*s)mR;!wCzmA`q3erdtXe$fdOSCQ&ZHwN=oA-1UnnLl99#Vjzq;I_lZB$4 zF!p%m_x6}=S^Z&V_w3~OkF{4%Dogi%rBj=fM1e$sM1e$sM1e$sM1e$sM1e$sM1lW_ z0`$(ILT&4_%PTdWH%Ig4c|5FW zMc(Ysn>9alC7xcGfnCT0*YVtIygb7LdXcFGwz6DC|A?I(NLyI8q6S0XsKJt3mK6ZD zWvOw6yYm$ZAdC41tX)y7%MidUd=!OK)qxyWyhSdYs~#_7S_X9v^J3WzcqxjCyp?<* zG?1H6G=)Zg2h;cmFcsjyugi5KoZ?~K!%iru?qO!u3o}waH-Wv8LCp`O8d!}&gZzem zmCra{o%EoMR*{-0PgcY1e=Bw4PRQRgb%Q!rI&s!J5|n2oZ4ac$M(D|NoypRs;G}5T~0p`s!-1Gc{bzG){qlcBR zlJ8*#$00xiX|ZM=J$+rSwtJ51Wo=v}%d&@tEjydFMko)CaI2UEL$@nhEuN?ci*%Ui zqII*BuDXLdfW_7cRDro-+Vj5^IXXD>Ju`GW3n+{dfP2udi0+!TltRp z(!iU(D8u+`DBw9U=L%QSake$)hd7gOfK$G7=sR*TD07m2khEOnB`qa=(T0>?qS3u; My4Pr!g$84<0af8bbN~PV literal 0 HcmV?d00001 diff --git a/Examples/NewNodeGraph.asset.meta b/Examples/NewNodeGraph.asset.meta new file mode 100644 index 0000000..fc8326b --- /dev/null +++ b/Examples/NewNodeGraph.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1452552e49747df45b25f74d307c25b6 +timeCreated: 1506021986 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Editor/NodeEditorToolbar.cs b/Scripts/Editor/NodeEditorToolbar.cs index c1ae734..c540bf0 100644 --- a/Scripts/Editor/NodeEditorToolbar.cs +++ b/Scripts/Editor/NodeEditorToolbar.cs @@ -32,12 +32,11 @@ public partial class NodeEditorWindow { public void FileContextMenu() { GenericMenu contextMenu = new GenericMenu(); - contextMenu.AddItem(new GUIContent("Create New"), false, null); - contextMenu.AddItem(new GUIContent("Load"), false, Load); + contextMenu.AddItem(new GUIContent("Create New"), false, New); contextMenu.AddSeparator(""); contextMenu.AddItem(new GUIContent("Save"), false, Save); - contextMenu.AddItem(new GUIContent("Save As"), false, null); + contextMenu.AddItem(new GUIContent("Save As"), false, SaveAs); contextMenu.DropDown(new Rect(5f, 17f, 0f, 0f)); } diff --git a/Scripts/Editor/NodeEditorWindow.cs b/Scripts/Editor/NodeEditorWindow.cs index f3fb17a..2423d8d 100644 --- a/Scripts/Editor/NodeEditorWindow.cs +++ b/Scripts/Editor/NodeEditorWindow.cs @@ -2,39 +2,61 @@ using System.Collections.Generic; using UnityEngine; using UnityEditor; -using System.IO; +using System.IO; +using UnityEditor.Callbacks; [InitializeOnLoad] -public partial class NodeEditorWindow : EditorWindow { - - string saved; - +public partial class NodeEditorWindow : EditorWindow { public Dictionary portConnectionPoints { get { return _portConnectionPoints; } } private Dictionary _portConnectionPoints = new Dictionary(); private Dictionary portRects = new Dictionary(); + public NodeGraphAsset graphAsset; public NodeGraph graph { get { return _graph != null ? _graph : _graph = new NodeGraph(); } } - public NodeGraph _graph; + public NodeGraph _graph; public Vector2 panOffset { get { return _panOffset; } set { _panOffset = value; Repaint(); } } - private Vector2 _panOffset; + private Vector2 _panOffset; public float zoom { get { return _zoom; } set { _zoom = Mathf.Clamp(value, 1f, 5f); Repaint(); } } private float _zoom = 1; partial void OnEnable(); [MenuItem("Window/UNEC")] - static void Init() { + static NodeEditorWindow Init() { NodeEditorWindow w = CreateInstance(); w.titleContent = new GUIContent("UNEC"); w.wantsMouseMove = true; w.Show(); + return w; } public void Save() { - saved = graph.Serialize(); + if (graphAsset == null) SaveAs(); + else if (AssetDatabase.Contains(graphAsset)) { + graphAsset.json = graph.Serialize(); + EditorUtility.SetDirty(graphAsset); + AssetDatabase.SaveAssets(); + } + else SaveAs(); } - public void Load() { - _graph = NodeGraph.Deserialize(saved); + public void SaveAs() { + string path = EditorUtility.SaveFilePanelInProject("Save NodeGraph", "NewNodeGraph", "asset", ""); + if (string.IsNullOrEmpty(path)) return; + else { + NodeGraphAsset existingGraphAsset = AssetDatabase.LoadAssetAtPath(path); + if (existingGraphAsset != null) graphAsset = existingGraphAsset; + else { + graphAsset = new NodeGraphAsset(); + AssetDatabase.CreateAsset(graphAsset, path); + } + graphAsset.json = graph.Serialize(); + EditorUtility.SetDirty(graphAsset); + AssetDatabase.SaveAssets(); + } + } + + public void New() { + _graph = new NodeGraph(); } private void DraggableWindow(int windowID) { @@ -60,4 +82,15 @@ public partial class NodeEditorWindow : EditorWindow { selectedNode = node; } + [OnOpenAsset(0)] + public static bool OnOpen(int instanceID, int line) { + NodeGraphAsset nodeGraphAsset = EditorUtility.InstanceIDToObject(instanceID) as NodeGraphAsset; + if (nodeGraphAsset != null) { + NodeEditorWindow w = Init(); + w.graphAsset = nodeGraphAsset; + w._graph = nodeGraphAsset.nodeGraph; + return true; + } + return false; + } } \ No newline at end of file diff --git a/Scripts/NodeGraph.cs b/Scripts/NodeGraph.cs index 073df97..863ad36 100644 --- a/Scripts/NodeGraph.cs +++ b/Scripts/NodeGraph.cs @@ -87,7 +87,7 @@ public class NodeGraph { } private class NodeTyper { - public string nodeType; + public string nodeType = "Node"; } } diff --git a/Scripts/NodeGraphAsset.cs b/Scripts/NodeGraphAsset.cs new file mode 100644 index 0000000..d9b2906 --- /dev/null +++ b/Scripts/NodeGraphAsset.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + +[CreateAssetMenu(fileName = "NewNodeGraph", menuName = "Node Graph")] +public class NodeGraphAsset : ScriptableObject { + public string json { get { return _json; } set { _json = value; _nodeGraph = null; } } + [SerializeField] private string _json; + + public NodeGraph nodeGraph { get { return _nodeGraph != null ? _nodeGraph : _nodeGraph = NodeGraph.Deserialize(json); } } + [NonSerialized] private NodeGraph _nodeGraph = null; +} diff --git a/Scripts/NodeGraphAsset.cs.meta b/Scripts/NodeGraphAsset.cs.meta new file mode 100644 index 0000000..718d0eb --- /dev/null +++ b/Scripts/NodeGraphAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 803fd86571b50524f807cf1e86777b1a +timeCreated: 1506020816 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: