using System;
using System.Collections.Generic;
using UnityEngine;
/// Base class for all node graphs
[Serializable]
public abstract class NodeGraph : ScriptableObject, ISerializationCallbackReceiver {
/// All nodes in the graph.
/// See:
[SerializeField] public List nodes = new List();
public T AddNode() where T : Node {
return AddNode(typeof(T)) as T;
}
public virtual Node AddNode(Type type) {
Node node = ScriptableObject.CreateInstance(type) as Node;
#if UNITY_EDITOR
if (!Application.isPlaying) {
UnityEditor.AssetDatabase.AddObjectToAsset(node, this);
UnityEditor.AssetDatabase.SaveAssets();
}
#endif
nodes.Add(node);
node.graph = this;
return node;
}
/// Safely remove a node and all its connections
///
public void RemoveNode(Node node) {
node.ClearConnections();
#if UNITY_EDITOR
if (!Application.isPlaying) {
DestroyImmediate(node, true);
UnityEditor.AssetDatabase.SaveAssets();
}
#endif
nodes.Remove(node);
}
/// Remove all nodes and connections from the graph
public void Clear() {
nodes.Clear();
}
public void OnBeforeSerialize() { }
public void OnAfterDeserialize() {
/*for (int i = 0; i < nodes.Count; i++) {
nodes[i].graph = this;
}*/
//VerifyConnections();
}
/*/// Checks all connections for invalid references, and removes them.
public void VerifyConnections() {
for (int i = 0; i < nodes.Count; i++) {
nodes[i].VerifyConnections();
}
}*/
}