// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
#if UNITY_EDITOR
using System.Collections.Generic;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Animancer.Editor
{
/// [Editor-Only] A custom Inspector for s.
/// https://kybernetik.com.au/animancer/api/Animancer.Editor/HybridAnimancerComponentEditor
///
[CustomEditor(typeof(HybridAnimancerComponent), true), CanEditMultipleObjects]
public class HybridAnimancerComponentEditor : NamedAnimancerComponentEditor
{
/************************************************************************************************************************/
///
protected override bool DoOverridePropertyGUI(string path, SerializedProperty property, GUIContent label)
{
switch (path)
{
case "_Controller":
EditorGUILayout.PropertyField(property, label, true);
property = property.FindPropertyRelative("_Controller");
var hasAnimatorController = property?.objectReferenceValue != null;
var warning = GetAnimatorControllerWarning(hasAnimatorController, out var messageType);
if (warning is not null)
{
EditorGUILayout.HelpBox(warning, messageType);
if (AnimancerGUI.TryUseClickEventInLastRect())
Application.OpenURL(Strings.DocsURLs.AnimatorControllers);
}
return true;
}
return base.DoOverridePropertyGUI(path, property, label);
}
/************************************************************************************************************************/
private string GetAnimatorControllerWarning(bool hasAnimatorController, out MessageType messageType)
{
if (!hasAnimatorController)
{
messageType = MessageType.Warning;
return
$"No Animator Controller is assigned to this component so" +
$" you should likely use a base {nameof(AnimancerComponent)} instead." +
$" Click here for more information.";
}
messageType = MessageType.Info;
if (Targets.Length > 0)
{
var animator = Targets[0].Animator;
if (animator != null && animator.runtimeAnimatorController != null)
{
return
$"A Native Animator Controller is assigned to the Animator component" +
$" and a Hybrid Animator Controller is also assigned to this component." +
$" That's not necessarily a problem, but using both systems at the same time is very unusual." +
$" Click here for more information.";
}
}
return null;
}
/************************************************************************************************************************/
}
}
#endif