diff --git a/Scripts/Editor/NodeEditorGUILayout.cs b/Scripts/Editor/NodeEditorGUILayout.cs index 1751d78..82f5fe2 100644 --- a/Scripts/Editor/NodeEditorGUILayout.cs +++ b/Scripts/Editor/NodeEditorGUILayout.cs @@ -1,5 +1,6 @@ using System; using System.Reflection; +using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -136,5 +137,29 @@ namespace XNodeEditor { GUI.DrawTexture(rect, NodeEditorResources.dot); GUI.color = col; } + + /// Make a popup with all variable ids. + public static string VariablePopup(XNode.NodeGraph graph, string variableId, params GUILayoutOption[] options) + { + if (graph == null) return variableId; + + List variablesStrings = new List(); + + foreach (var item in graph.variables) + variablesStrings.Add(item.id); + + int originalIdx = variablesStrings.IndexOf(variableId); + int newIdx = EditorGUILayout.Popup(originalIdx, variablesStrings.ToArray(), options); + + if (originalIdx == -1 && newIdx == -1) + { + EditorGUILayout.HelpBox("Looks like the variable that used to be here, doesn't exist anymore. \n id:" + variableId, MessageType.Error); + return variableId; + } + + if (newIdx >= variablesStrings.Count) + return variableId; + return variablesStrings[newIdx]; + } } } \ No newline at end of file diff --git a/Scripts/Editor/NodeGraphInspector.cs b/Scripts/Editor/NodeGraphInspector.cs index 025d79b..32a5b24 100644 --- a/Scripts/Editor/NodeGraphInspector.cs +++ b/Scripts/Editor/NodeGraphInspector.cs @@ -13,13 +13,22 @@ namespace XNodeEditor [CustomEditor(typeof(XNode.NodeGraph), true)] public class NodeGraphInspector : Editor { - SerializedProperty nodesProp; SerializedProperty variablesProp; + List _knownTypes = new List(); void OnEnable() { - nodesProp = serializedObject.FindProperty("nodes"); variablesProp = serializedObject.FindProperty("variables"); + NodeGraph graph = target as NodeGraph; + + foreach (var node in graph.nodes) + { + foreach (var port in node.Ports) + { + if (!_knownTypes.Contains(port.ValueType)) + _knownTypes.Add(port.ValueType); + } + } } public override void OnInspectorGUI() @@ -74,20 +83,12 @@ namespace XNodeEditor additionalTypes.Add(typeof(string).AssemblyQualifiedName); additionalTypes.Add(typeof(Vector3).AssemblyQualifiedName); - /* - Assembly asm = typeof(Vector3).Assembly; - foreach (var colorPair in NodeEditorPreferences.typeColors) + foreach (var type in _knownTypes) { - var type = asm.GetType(colorPair.Key, false); - Debug.Log(colorPair.Key + " " + type); - - if (type == null) - continue; if (additionalTypes.Contains(type.AssemblyQualifiedName)) continue; - additionalTypes.Add(colorPair.Key); + additionalTypes.Add(type.AssemblyQualifiedName); } - */ foreach (var addType in additionalTypes) {