using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace Unity.Cinemachine.Editor
{
///
/// Inspector for the CinemachineVirtualCameraBase class. It will be chosen by default
/// by Unity. You can inherit from it and customize it.
///
[CustomEditor(typeof(CinemachineVirtualCameraBase), true, isFallback = true)]
[CanEditMultipleObjects]
public class CinemachineVirtualCameraBaseEditor : UnityEditor.Editor
{
//protected virtual void OnEnable() => Undo.undoRedoPerformed += ResetTarget;
//protected virtual void OnDisable() => Undo.undoRedoPerformed -= ResetTarget;
///
public override VisualElement CreateInspectorGUI()
{
var vcam = target as CinemachineVirtualCameraBase;
var ux = new VisualElement();
this.AddCameraStatus(ux);
ux.Add(new PropertyField(serializedObject.FindProperty(() => vcam.Priority)));
ux.Add(new PropertyField(serializedObject.FindProperty(() => vcam.OutputChannel)));
ux.Add(new PropertyField(serializedObject.FindProperty(() => vcam.StandbyUpdate)));
AddInspectorProperties(ux);
if (vcam is CinemachineCameraManagerBase manager && targets.Length == 1)
{
ux.AddSpace();
this.AddChildCameras(ux, null);
}
ux.AddSpace();
this.AddExtensionsDropdown(ux);
return ux;
}
///
/// Called by the default implementation of CreateInspectorGUI() to populate the inspector with the items that
/// are not specific to the base class. Default implementation iterates over the serialized properties and
/// adds an item for each.
///
/// The VisualElement container to which to add items
protected virtual void AddInspectorProperties(VisualElement ux)
{
var p = serializedObject.FindProperty(() => (target as CinemachineVirtualCameraBase).StandbyUpdate);
if (p.NextVisible(false))
InspectorUtility.AddRemainingProperties(ux, p);
}
}
}