hch
2025-10-30 dc7922d80c1d133b6261b8af1d521567d2c0a35d
Main/System/Battle/Motion/MotionBase.cs
@@ -5,7 +5,7 @@
public class MotionBase
{
    public static float MotionTimeScale = 1f;
    public float MotionTimeScale = 1f;
    public static List<string> AttackMotionList = new List<string>
    {
        MotionName.attack.ToString().ToLower(),
@@ -25,6 +25,8 @@
    private Spine.TrackEntry currentTrack;
    private SkeletonIllusionShadow illusionShadow;
    private bool playingSkillAnim = false;
    private bool isUnderControl = false;
    private float pauseTime = 0f;
@@ -121,7 +123,6 @@
    private Spine.TrackEntry ExecuteSkillAnim(SkillConfig skillConfig, SkillBase skillBase, Action onComplete,
        Spine.Animation targetAnim, bool hasAnim, bool isSubSkill)
    {
        bool isPangdeSkill = 1003020 == skillConfig.SkillID;
        int loopCount = skillConfig.LoopCount;
@@ -305,7 +306,7 @@
    protected virtual void OnAnimationComplete(Spine.TrackEntry trackEntry)
    {
        if (trackEntry?.Animation?.Name == null) return;
        string animName = trackEntry.Animation.Name.ToLower();
        if (AttackMotionList.Contains(animName))
@@ -318,12 +319,33 @@
            OnHitAnimationComplete?.Invoke();
            PlayAnimation(MotionName.idle, true);
        }
        if (trackEntryCallbacks.TryGetValue(trackEntry, out var callback))
        {
            trackEntryCallbacks.Remove(trackEntry);
            callback?.Invoke();
        }
    }
    public void SetControledAnimation()
    {
        //  受到硬控的时候,保持受击动画的第三帧,直到控制结束 或者最后一击死亡,移除控制效果后,恢复到待机状态或者播放死亡动画
        //  这里是受到硬控时候 需要表现的动画
        var entry = PlayAnimation(MotionName.hit, false);
        float threeFrameTrackTime = 3f / BattleConst.skillMotionFps;
        entry.TrackTime = threeFrameTrackTime;
        entry.TimeScale = 0;
        isUnderControl = true;
    }
    public void CancelControledAnimation()
    {
        //  硬控结束,恢复动画播放
        isUnderControl = false;
        PlayAnimation(MotionName.idle, true);
    }
    public virtual void Run()
@@ -360,12 +382,12 @@
        if (skeletonAnim != null) skeletonAnim.timeScale = ratio;
    }
    public void ShowIllusionShadow(bool isVisible)
    public void ShowIllusionShadow(bool isVisible, Color color = default)
    {
        if (illusionShadow != null)
        {
            illusionShadow.SetSkeletonAnimation(skeletonAnim);
            illusionShadow.Show(isVisible);
            illusionShadow.Show(isVisible, color);
        }
    }
}