mirror of
https://github.com/Siccity/xNode.git
synced 2025-12-20 17:26:02 +08:00
NodeEditorBase derive from Editor
This gives us lifetime stuff like OnEnable, OnDisable, Reset etc in custom editors
This commit is contained in:
parent
9e7e7c4c9b
commit
5436b74313
@ -10,13 +10,13 @@ namespace XNodeEditor.Internal {
|
||||
/// <typeparam name="T">Editor Type. Should be the type of the deriving script itself (eg. NodeEditor) </typeparam>
|
||||
/// <typeparam name="A">Attribute Type. The attribute used to connect with the runtime type (eg. CustomNodeEditorAttribute) </typeparam>
|
||||
/// <typeparam name="K">Runtime Type. The ScriptableObject this can be an editor for (eg. Node) </typeparam>
|
||||
public abstract class NodeEditorBase<T, A, K> where A : Attribute, NodeEditorBase<T, A, K>.INodeEditorAttrib where T : NodeEditorBase<T, A, K> where K : ScriptableObject {
|
||||
public abstract class NodeEditorBase<T, A, K> : Editor where A : Attribute, NodeEditorBase<T, A, K>.INodeEditorAttrib where T : NodeEditorBase<T, A, K> where K : ScriptableObject {
|
||||
/// <summary> Custom editors defined with [CustomNodeEditor] </summary>
|
||||
private static Dictionary<Type, Type> editorTypes;
|
||||
private static Dictionary<K, T> editors = new Dictionary<K, T>();
|
||||
public NodeEditorWindow window;
|
||||
public K target;
|
||||
public SerializedObject serializedObject;
|
||||
public new K target { get { return _target == base.target ? _target : _target = (K) base.target; } set { base.target = value; } }
|
||||
private K _target;
|
||||
|
||||
public static T GetEditor(K target, NodeEditorWindow window) {
|
||||
if (target == null) return null;
|
||||
@ -24,16 +24,12 @@ namespace XNodeEditor.Internal {
|
||||
if (!editors.TryGetValue(target, out editor)) {
|
||||
Type type = target.GetType();
|
||||
Type editorType = GetEditorType(type);
|
||||
editor = Activator.CreateInstance(editorType) as T;
|
||||
editor.target = target;
|
||||
editor.serializedObject = new SerializedObject(target);
|
||||
editor = (T) Editor.CreateEditor(target, editorType);
|
||||
editor.window = window;
|
||||
editor.OnCreate();
|
||||
editors.Add(target, editor);
|
||||
}
|
||||
if (editor.target == null) editor.target = target;
|
||||
if (editor.target == null) editor.Initialize(new UnityEngine.Object[] { target });
|
||||
if (editor.window != window) editor.window = window;
|
||||
if (editor.serializedObject == null) editor.serializedObject = new SerializedObject(target);
|
||||
return editor;
|
||||
}
|
||||
|
||||
@ -60,9 +56,6 @@ namespace XNodeEditor.Internal {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary> Called on creation, after references have been set </summary>
|
||||
public virtual void OnCreate() { }
|
||||
|
||||
public interface INodeEditorAttrib {
|
||||
Type GetInspectedType();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user