using UnityEngine;

namespace UNSLOW.EffectPractice.FirstTerm.DamageNumbers
{
    [System.Serializable]
    public class UIAnimationSettings
    {
        [Tooltip("アニメーションの再生時間（秒） この時間内で各カーブを 0 から 1 の範囲で評価します")]
        [SerializeField] private float lifeTime = 1f;

        [Tooltip("再生時間の終端に到達したら、アニメーションを最初から繰り返します")]
        [SerializeField] private bool loop;

        [Tooltip("座標の X/Y に同じカーブを使います 有効時は Position X Curve が Y にも使われます")]
        [SerializeField] private bool useSharedPositionCurve;

        [Tooltip("開始時の anchoredPosition に加算する X 座標オフセットです 再生時間を 0 から 1 に正規化して評価します")]
        [SerializeField] private AnimationCurve positionXCurve = AnimationCurve.Linear(0f, 0f, 1f, 0f);

        [Tooltip("開始時の anchoredPosition に加算する Y 座標オフセットです 座標カーブ共有が有効な場合は無視されます")]
        [SerializeField] private AnimationCurve positionYCurve = AnimationCurve.Linear(0f, 0f, 1f, 0f);

        [Tooltip("スケールの X/Y に同じカーブを使います 有効時は Scale X Curve が Y にも使われます")]
        [SerializeField] private bool useSharedScaleCurve = true;

        [Tooltip("開始時スケールに掛ける X スケール倍率です 再生時間を 0 から 1 に正規化して評価します")]
        [SerializeField] private AnimationCurve scaleXCurve = AnimationCurve.Linear(0f, 1f, 1f, 1f);

        [Tooltip("開始時スケールに掛ける Y スケール倍率です スケールカーブ共有が有効な場合は無視されます")]
        [SerializeField] private AnimationCurve scaleYCurve = AnimationCurve.Linear(0f, 1f, 1f, 1f);

        [Tooltip("開始時の CanvasGroup alpha に掛ける透明度倍率です 再生時間を 0 から 1 に正規化して評価します")]
        [SerializeField] private AnimationCurve alphaCurve = AnimationCurve.Linear(0f, 1f, 1f, 1f);

        public float LifeTime => Mathf.Max(0f, lifeTime);
        public bool Loop => loop;
        public bool UseSharedPositionCurve => useSharedPositionCurve;
        public AnimationCurve PositionXCurve => positionXCurve;
        public AnimationCurve PositionYCurve => positionYCurve;
        public bool UseSharedScaleCurve => useSharedScaleCurve;
        public AnimationCurve ScaleXCurve => scaleXCurve;
        public AnimationCurve ScaleYCurve => scaleYCurve;
        public AnimationCurve AlphaCurve => alphaCurve;
    }
}
