From 3ce47ce4e7a13212a1efb32d0625222a8b18655d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 23 十月 2025 18:56:44 +0800
Subject: [PATCH] 125 战斗 修复暂停导致的技能时间错误问题 修复因为设置多个 TimeScale导致的速度翻倍问题

---
 Main/Component/UI/Common/SkeletonIllusionShadow.cs |    2 --
 Main/System/Battle/Motion/MotionBase.cs            |   35 ++++++++++++++++++++++++++++-------
 Main/Component/UI/Effect/BattleEffectPlayer.cs     |   11 -----------
 3 files changed, 28 insertions(+), 20 deletions(-)

diff --git a/Main/Component/UI/Common/SkeletonIllusionShadow.cs b/Main/Component/UI/Common/SkeletonIllusionShadow.cs
index eba83e6..29244ac 100644
--- a/Main/Component/UI/Common/SkeletonIllusionShadow.cs
+++ b/Main/Component/UI/Common/SkeletonIllusionShadow.cs
@@ -89,8 +89,6 @@
         playedEntry.TrackTime = trackEntry.TrackTime;
 
         sa.timeScale = 0;
-        sa.AnimationState.TimeScale = 0;
-        playedEntry.TimeScale = 0;
 
         RendererAdjuster parent = skeletonAnimation.GetComponentInParent<RendererAdjuster>();
         objTest.AddMissingComponent<RendererAdjuster>().SetSortingOrder(parent.sortingOrder);
diff --git a/Main/Component/UI/Effect/BattleEffectPlayer.cs b/Main/Component/UI/Effect/BattleEffectPlayer.cs
index 3e3c0d2..8dbbc57 100644
--- a/Main/Component/UI/Effect/BattleEffectPlayer.cs
+++ b/Main/Component/UI/Effect/BattleEffectPlayer.cs
@@ -377,7 +377,6 @@
         spineComp.enabled = true;
 
         spineComp.timeScale = speedRate;
-        spineAnimationState.TimeScale = speedRate;
 
         Spine.Animation animation = spineAnimationState.Data.SkeletonData.Animations.First();
         spineAnimationState.SetAnimation(0, animation, effectConfig.isLoop != 0);
@@ -561,11 +560,6 @@
             spineComp.timeScale = 0f;
         }
 
-        if (spineAnimationState != null)
-        {
-            spineAnimationState.TimeScale = 0f;
-        }
-
         // Animator鍔ㄧ敾
         foreach (var animator in animatorList)
         {
@@ -586,11 +580,6 @@
         if (spineComp != null)
         {
             spineComp.timeScale = speedRate;
-        }
-
-        if (spineAnimationState != null)
-        {
-            spineAnimationState.TimeScale = speedRate;
         }
 
         // Animator鍔ㄧ敾
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index f969f71..bcd142e 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -26,6 +26,10 @@
     private SkeletonIllusionShadow illusionShadow;
     private bool playingSkillAnim = false;
 
+    private float pauseTime = 0f;
+
+    private float resumeTime = 0f;
+
     public virtual void Init(SkeletonAnimation skelAnim)
     {
         skeletonAnim = skelAnim;
@@ -36,7 +40,6 @@
         }
 
         animState = skeletonAnim.AnimationState;
-        animState.TimeScale = MotionTimeScale;
         skeletonAnim.timeScale = MotionTimeScale;
         skeleton = skeletonAnim.Skeleton;
 
@@ -118,6 +121,9 @@
     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;
         int[] activeFrames = skillConfig.ActiveFrames ?? new int[0];
         int frameCount = activeFrames.Length;
@@ -149,9 +155,25 @@
                 return;
             }
 
-            float currentFrame = 0f;
-            if (BattleConst.skillMotionFps > 0)
-                currentFrame = hasAnim ? (skillTrack.TrackTime * skillTrack.TimeScale * BattleConst.skillMotionFps) : ((Time.time - startTime) * MotionTimeScale * BattleConst.skillMotionFps);
+            float trackTime = 0f; //hasAnim ? skillTrack.TrackTime * skillTrack.TimeScale : (Time.time - startTime) * MotionTimeScale;
+
+            if (hasAnim)
+            {
+                trackTime = skillTrack.TrackTime;
+            }
+            else
+            {
+                float adjustedTime = Time.time;
+                if (pauseTime > 0f && resumeTime > pauseTime)
+                {
+                    startTime = startTime + (resumeTime - pauseTime);
+                    pauseTime = 0f;
+                    resumeTime = 0f;
+                }
+                trackTime = (adjustedTime - startTime) * MotionTimeScale;
+            }
+
+            float currentFrame = trackTime * BattleConst.skillMotionFps;
 
             if (hasAnim)
             {
@@ -314,14 +336,14 @@
 
     public virtual void Pause()
     {
-        if (animState != null) animState.TimeScale = 0f;
         if (skeletonAnim != null) skeletonAnim.timeScale = 0f;
+        pauseTime = Time.time;
     }
 
     public virtual void Resume()
     {
-        if (animState != null) animState.TimeScale = MotionTimeScale;
         if (skeletonAnim != null) skeletonAnim.timeScale = MotionTimeScale;
+        resumeTime = Time.time;
     }
 
     public void HaveRest()
@@ -335,7 +357,6 @@
     public void SetSpeedRatio(float ratio)
     {
         MotionTimeScale = ratio;
-        if (animState != null) animState.TimeScale = ratio;
         if (skeletonAnim != null) skeletonAnim.timeScale = ratio;
     }
 

--
Gitblit v1.8.0