From 963eb84edb3f6bbbb5430afc8bc1c20be03a421e Mon Sep 17 00:00:00 2001 From: Thor Date: Wed, 11 Oct 2017 08:36:36 +0200 Subject: [PATCH] Possible solution found. NodeGraph now initializes NodeDataCache before creating any nodes. --- Resources/New Node Data Cache.asset | Bin 0 -> 4184 bytes ...et.meta => New Node Data Cache.asset.meta} | 6 ++-- Resources/NodeDataCache.asset | 14 ---------- Scripts/NodeDataCache.cs | 26 +++++++++++------- Scripts/NodeGraph.cs | 4 +-- 5 files changed, 21 insertions(+), 29 deletions(-) create mode 100644 Resources/New Node Data Cache.asset rename Resources/{NodeDataCache.asset.meta => New Node Data Cache.asset.meta} (61%) delete mode 100644 Resources/NodeDataCache.asset diff --git a/Resources/New Node Data Cache.asset b/Resources/New Node Data Cache.asset new file mode 100644 index 0000000000000000000000000000000000000000..98c7f5f59a4d35c557ef7fbc609f1d162e555f8d GIT binary patch literal 4184 zcmeH~PiqrF7{;H;*49>2wQ98pHmA~4AXF=&NYtdX6hge|K_%GLL~5gP@y~59?M=`x zAfAFCR`BEpXg@#?h0=re;Hh{JJa~%nd3HC;sCz|<(mTiR1@cg!xY86 zNdFwysGc$LsCl@>+{bL1pGKi63H7fKvdYeAiZYO@uTYC-L0?Lpng)4rL` zQT+2cQ3UkkE8_D4d#}HwbIh%`C(qx>-gwj5+kH27@0or;7tR6afOEh(;2dxcI0u{q l&H?9ubKrnGp!bnNeeaE=_h7|;nX5FH{G1+Kx%kDUy#I7mhHd}= literal 0 HcmV?d00001 diff --git a/Resources/NodeDataCache.asset.meta b/Resources/New Node Data Cache.asset.meta similarity index 61% rename from Resources/NodeDataCache.asset.meta rename to Resources/New Node Data Cache.asset.meta index cd7469f..830cf51 100644 --- a/Resources/NodeDataCache.asset.meta +++ b/Resources/New Node Data Cache.asset.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: a6799b9b87b05a14f9053390f4500d7b -timeCreated: 1507567505 -licenseType: Free +guid: a05ee176e92214f48a94c321dad1614d +timeCreated: 1507703437 +licenseType: Pro NativeFormatImporter: mainObjectFileID: 11400000 userData: diff --git a/Resources/NodeDataCache.asset b/Resources/NodeDataCache.asset deleted file mode 100644 index dbef4f7..0000000 --- a/Resources/NodeDataCache.asset +++ /dev/null @@ -1,14 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a6399826e2c44b447b32a3ed06646162, type: 3} - m_Name: NodeDataCache - m_EditorClassIdentifier: - nodes: [] diff --git a/Scripts/NodeDataCache.cs b/Scripts/NodeDataCache.cs index 61aa3db..aa02cd1 100644 --- a/Scripts/NodeDataCache.cs +++ b/Scripts/NodeDataCache.cs @@ -14,30 +14,36 @@ public sealed class NodeDataCache : ScriptableObject { } } public static NodeDataCache _instance; + public static bool Initialized { get { return _instance != null; } } [SerializeField] private PortDataCache portDataCache = new PortDataCache(); + /// Return port data from cache public static void GetPorts(Node node, ref List inputs, ref List outputs) { - //if (_instance == null) Resources.FindObjectsOfTypeAll()[0]; + if (!Initialized) Initialize(); System.Type nodeType = node.GetType(); inputs = new List(); outputs = new List(); - if (!instance.portDataCache.ContainsKey(nodeType)) return; - for (int i = 0; i < instance.portDataCache[nodeType].Count; i++) { - if (instance.portDataCache[nodeType][i].direction == NodePort.IO.Input) inputs.Add(new NodePort(instance.portDataCache[nodeType][i], node)); - else outputs.Add(new NodePort(instance.portDataCache[nodeType][i], node)); + if (!_instance.portDataCache.ContainsKey(nodeType)) return; + for (int i = 0; i < _instance.portDataCache[nodeType].Count; i++) { + if (_instance.portDataCache[nodeType][i].direction == NodePort.IO.Input) inputs.Add(new NodePort(_instance.portDataCache[nodeType][i], node)); + else outputs.Add(new NodePort(_instance.portDataCache[nodeType][i], node)); } } - + + public static void Initialize() { + _instance = Resources.LoadAll("").FirstOrDefault(); + } + #if UNITY_EDITOR - [UnityEditor.InitializeOnLoadMethod( )] -#endif - private static void Init() { - Debug.Log("Init"); + [UnityEditor.Callbacks.DidReloadScripts] + private static void Reload() { + Initialize(); instance.BuildCache(); } +#endif private void BuildCache() { System.Type baseType = typeof(Node); diff --git a/Scripts/NodeGraph.cs b/Scripts/NodeGraph.cs index 58baa23..878a6f0 100644 --- a/Scripts/NodeGraph.cs +++ b/Scripts/NodeGraph.cs @@ -1,5 +1,4 @@ -using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; using UnityEngine; using System; @@ -16,6 +15,7 @@ public abstract class NodeGraph : ScriptableObject, ISerializationCallbackReceiv } public virtual Node AddNode(Type type) { + if (!NodeDataCache.Initialized) NodeDataCache.Initialize(); Node node = ScriptableObject.CreateInstance(type) as Node; #if UNITY_EDITOR if (!Application.isPlaying) {