From f117a66e56b184cbac53b279a7cfca8b7e9409be Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 11 十二月 2025 10:25:51 +0800
Subject: [PATCH] 125 战斗 复活相关前端表现

---
 Main/System/Battle/BattleField/BattleField.cs   |    5 ++
 Main/System/Battle/BattleObject/BattleObject.cs |    4 +
 Main/System/Battle/Motion/MotionBase.cs         |   60 +++++++++++++++++++++++++++--
 3 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 88a7499..e69f6da 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -476,6 +476,11 @@
         }
     }
 
+    public virtual void OnObjReborn(uint objId)
+    {
+        processingDeathObjIds.Remove(objId);
+    }
+
     public virtual void Destroy()
     {
         ForceFinish();
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 56f9c61..0c0377d 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -465,11 +465,13 @@
     public void OnReborn(HB427_tagSCUseSkill.tagSCUseSkillHurt vNetData)
     {
         // 澶勭悊澶嶆椿閫昏緫
+        battleField.OnObjReborn((uint)ObjID);
+
         teamHero.curHp = GeneralDefine.GetFactValue(vNetData.CurHP, vNetData.CurHPEx);
         // Debug.LogError("OnReborn " + teamHero.curHp);
         teamHero.isDead = false;
         heroGo.SetActive(true);
-        motionBase.ResetToIdleAnimation();
+        motionBase.ResetForReborn();
     }
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 46a2b4e..dca0851 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -540,6 +540,7 @@
         resumeTime = Time.time;
     }
 
+    // 鍘熸湁鐨� HaveRest 淇濇寔涓嶅彉锛岀敤浜庝竴鑸殑閲嶇疆
     public void HaveRest()
     {
         animState?.ClearTracks();
@@ -564,6 +565,60 @@
         PlayAnimation(MotionName.idle, true);
     }
 
+    // 鏂板锛氫笓闂ㄧ敤浜庡娲荤殑瀹屾暣閲嶇疆鏂规硶
+    public void ResetForReborn()
+    {
+        // 1. 娓呯悊鎵�鏈夊姩鐢昏建閬擄紙鍖呮嫭姝讳骸鍔ㄧ敾鐨勮建閬�9锛�
+        animState?.ClearTracks();
+
+        // 2. 娓呯悊鎵�鏈夊洖璋冨拰鍔ㄤ綔闃熷垪
+        trackEntryCallbacks.Clear();
+        runningActions.Clear();
+        activeSkillTracks.Clear();
+        
+        // 3. 閲嶇疆瀛愭妧鑳借建閬撴睜
+        if (availableSubTracks == null)
+            availableSubTracks = new Queue<int>();
+        else
+            availableSubTracks.Clear();
+            
+        subSkillTrackMap.Clear();
+        for (int i = 1; i <= 8; i++)
+            availableSubTracks.Enqueue(i);
+
+        // 4. 娓呯┖杞ㄩ亾寮曠敤
+        currentTrack = null;
+        
+        // 5. 閲嶇疆鎵�鏈夌姸鎬佹爣蹇�
+        playingSkillAnim = false;
+        isUnderControl = false;
+        
+        // 6. 閲嶇疆鏃堕棿鐩稿叧瀛楁锛堝叧閿紒锛�
+        pauseTime = 0f;
+        resumeTime = 0f;
+        pausedAccumulated = 0f;
+        pauseStart = 0f;
+        
+        // 7. 閲嶇疆鏃堕棿缂╂斁涓烘甯搁�熷害
+        MotionTimeScale = 1f;
+        if (skeletonAnim != null)
+            skeletonAnim.timeScale = MotionTimeScale;
+        
+        // 8. 娓呯悊娈嬪奖鏁堟灉
+        if (illusionShadow != null)
+            illusionShadow.Show(false);
+        
+        // 9. 閲嶇疆楠ㄩ鍒板垵濮嬪Э鎬侊紙鍏抽敭锛侀槻姝㈡浜″Э鎬佹畫鐣欙級
+        if (skeleton != null)
+        {
+            skeleton.SetToSetupPose();
+            // skeleton.UpdateWorldTransform();
+        }
+        
+        // 10. 鎾斁寰呮満鍔ㄧ敾
+        PlayAnimation(MotionName.idle, true);
+    }
+
     public void SetSpeedRatio(float ratio)
     {
         MotionTimeScale = ratio;
@@ -579,9 +634,4 @@
         }
     }
 
-    internal void ResetToIdleAnimation()
-    {
-        // 娓呯┖涔嬪墠鐨勭姸鎬�
-        HaveRest();
-    }
 }
\ No newline at end of file

--
Gitblit v1.8.0