您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
75 行
1.7 KiB
75 行
1.7 KiB
using UnityEngine;
|
|
using UnityEditor;
|
|
using UnityEngine.RMGUI;
|
|
|
|
namespace RMGUI.GraphView
|
|
{
|
|
public abstract class GraphViewEditorWindow : EditorWindow
|
|
{
|
|
public GraphView graphView { get; private set; }
|
|
GraphViewPresenter m_Presenter;
|
|
|
|
// we watch the data source for destruction and re-create it
|
|
IDataWatchHandle handle;
|
|
|
|
void OnEnable()
|
|
{
|
|
m_Presenter = BuildPresenters();
|
|
graphView = BuildView();
|
|
graphView.name = "theView";
|
|
graphView.presenter = m_Presenter;
|
|
graphView.StretchToParentSize();
|
|
graphView.onEnter += OnEnterPanel;
|
|
graphView.onLeave += OnLeavePanel;
|
|
rootVisualContainer.AddChild(graphView);
|
|
}
|
|
|
|
void OnDisable()
|
|
{
|
|
rootVisualContainer.RemoveChild(graphView);
|
|
}
|
|
|
|
// Override these methods to properly support domain reload & enter/exit playmode
|
|
protected abstract GraphView BuildView();
|
|
protected abstract GraphViewPresenter BuildPresenters();
|
|
|
|
void OnEnterPanel()
|
|
{
|
|
if (m_Presenter == null)
|
|
{
|
|
m_Presenter = BuildPresenters();
|
|
graphView.presenter = m_Presenter;
|
|
}
|
|
handle = graphView.panel.dataWatch.AddWatch(graphView, m_Presenter, OnChanged);
|
|
}
|
|
|
|
void OnLeavePanel()
|
|
{
|
|
if (handle != null)
|
|
{
|
|
handle.Dispose();
|
|
handle = null;
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("No active handle to remove");
|
|
}
|
|
}
|
|
|
|
void OnChanged()
|
|
{
|
|
// If data was destroyed, remove the watch and try to re-create it
|
|
if (m_Presenter == null && graphView.panel != null)
|
|
{
|
|
if (handle != null)
|
|
{
|
|
handle.Dispose();
|
|
}
|
|
|
|
m_Presenter = BuildPresenters();
|
|
graphView.presenter = m_Presenter;
|
|
handle = graphView.panel.dataWatch.AddWatch(graphView, m_Presenter, OnChanged);
|
|
}
|
|
}
|
|
}
|
|
}
|