using UnityEngine;

namespace NBF
{
    public abstract class FishingLineNodeMotionFeature : FishingLineNodeFeature
    {
        [Header("Motion Control")] [SerializeField]
        private int priorityOffset;

        /// <summary>
        /// 当前运动控制组件的优先级。
        /// 值越大，越容易取得节点运动控制权。
        /// 最终优先级 = 默认优先级 + 调整值。
        /// </summary>
        public int Priority => DefaultPriority + priorityOffset;

        /// <summary>
        /// 当前运动控制组件的默认优先级。
        /// 子类可通过重写该值，决定自己相对默认物理的抢占能力。
        /// </summary>
        protected virtual int DefaultPriority => 0;

        /// <summary>
        /// 当前帧该运动控制组件是否希望接管节点运动。
        /// </summary>
        public abstract bool CanControl();

        /// <summary>
        /// 当前运动控制组件开始接管节点时的回调。
        /// </summary>
        public virtual void OnMotionActivated()
        {
        }

        /// <summary>
        /// 当前运动控制组件失去节点控制权时的回调。
        /// </summary>
        public virtual void OnMotionDeactivated()
        {
        }

        /// <summary>
        /// 当前运动控制组件正在接管节点时，每个 FixedUpdate 执行的逻辑。
        /// </summary>
        public abstract void TickMotion(float deltaTime);
    }
}