using UnityEngine;
namespace Vanguard.Battle
{
///
/// Длительности боевых анимаций и блокировки ввода. Ассет лежит в
/// Resources/AnimationConfig; если его нет, используются значения по умолчанию.
///
[CreateAssetMenu(menuName = "Vanguard/Animation Config", fileName = "AnimationConfig")]
public sealed class AnimationConfig : ScriptableObject
{
[Header("Карты")]
public float cardMoveSpeed = 14f;
public float cardRotateSpeed = 12f;
public float cardMoveDuration = 0.45f;
public float cardFlipDuration = 0.3f;
public float callMoveDuration = 0.55f;
public float retireDuration = 0.8f;
[Header("Бой")]
public float attackDeclare = 1.2f;
public float guard = 1.9f;
public float driveCheck = 1.5f;
public float trigger = 1.4f;
public float battleResolved = 1.3f;
public float damage = 1.6f;
public float heal = 1.4f;
public float intercept = 1.9f;
public float perfectGuard = 2.0f;
[Header("Ввод")]
public float inputLockTail = 0.15f;
[Header("Стрелка атаки")]
public float arrowShowDuration = 0.25f;
public float arrowHideDuration = 0.2f;
private static AnimationConfig _default;
public static AnimationConfig Default
{
get
{
if (_default == null)
{
_default = CreateInstance();
_default.name = "AnimationConfig (runtime)";
_default.hideFlags = HideFlags.DontSave;
}
return _default;
}
}
public static AnimationConfig LoadOrDefault()
{
var loaded = Resources.Load("AnimationConfig");
return loaded != null ? loaded : Default;
}
private void OnValidate()
{
cardMoveSpeed = Mathf.Max(1f, cardMoveSpeed);
cardRotateSpeed = Mathf.Max(1f, cardRotateSpeed);
cardMoveDuration = Mathf.Max(0.05f, cardMoveDuration);
cardFlipDuration = Mathf.Max(0.05f, cardFlipDuration);
callMoveDuration = Mathf.Max(0.05f, callMoveDuration);
retireDuration = Mathf.Max(0.05f, retireDuration);
attackDeclare = Mathf.Max(0.05f, attackDeclare);
guard = Mathf.Max(0.05f, guard);
driveCheck = Mathf.Max(0.05f, driveCheck);
trigger = Mathf.Max(0.05f, trigger);
battleResolved = Mathf.Max(0.05f, battleResolved);
damage = Mathf.Max(0.05f, damage);
heal = Mathf.Max(0.05f, heal);
intercept = Mathf.Max(0.05f, intercept);
perfectGuard = Mathf.Max(0.05f, perfectGuard);
inputLockTail = Mathf.Max(0f, inputLockTail);
arrowShowDuration = Mathf.Max(0.05f, arrowShowDuration);
arrowHideDuration = Mathf.Max(0.05f, arrowHideDuration);
}
}
}