// Call this from Editor's OnInspectorGUI
public void OnInspectorGUI()
{
m_ScratchComponentList.Clear();
int numNullComponents = GetComponent(m_Stage, m_ScratchComponentList);
// Have the edited components changed?
int numComponents = m_ScratchComponentList.Count;
bool dirty = numComponents != m_EditedComponents.Count;
for (int i = 0; !dirty && i < numComponents; ++i)
{
dirty = m_ScratchComponentList[i] != m_EditedComponents[i];
}
if (dirty)
{
if (m_ComponentEditor != null)
{
ActiveEditorRegistry.SetActiveEditor(m_ComponentEditor, false);
m_ComponentEditor.ResetTarget();
UnityEngine.Object.DestroyImmediate(m_ComponentEditor);
}
m_ComponentEditor = null;
m_ComponentEditorOnSceneGUI = null;
m_EditedComponents.Clear();
m_EditedComponents.AddRange(m_ScratchComponentList);
m_IsMixedType = false;
for (int i = 1; !m_IsMixedType && i < numComponents; ++i)
{
m_IsMixedType = m_EditedComponents[i].GetType() != m_EditedComponents[i - 1].GetType();
}
}
if (numNullComponents > 0 && numComponents > 0)
{
m_IsMixedType = true;
}
if (numComponents > 0 && m_ComponentEditor == null && !m_IsMixedType)
{
UnityEditor.Editor.CreateCachedEditor(m_EditedComponents.ToArray(), null, ref m_ComponentEditor);
if (m_ComponentEditor != null)
{
m_ComponentEditorOnSceneGUI = m_ComponentEditor.GetType().GetMethod("OnSceneGUI",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
}
}
m_StageSelection = GetPopupIndexForComponent(numComponents == 0 ? null : m_EditedComponents[0]);
m_StageError = false;
for (int i = 0; !m_StageError && i < numComponents; ++i)
{
m_StageError = !m_EditedComponents[i].IsValid;
}
DrawComponentInspector();
}