From 69783a7bc64858681fffe600d6570b7b723032f2 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 22 四月 2026 19:09:44 +0800
Subject: [PATCH] 632 游戏启动记录

---
 Main/System/Battle/RecordPlayer/RecordAction.cs |  233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 226 insertions(+), 7 deletions(-)

diff --git a/Main/System/Battle/RecordPlayer/RecordAction.cs b/Main/System/Battle/RecordPlayer/RecordAction.cs
index a7e4cfd..85a0a2c 100644
--- a/Main/System/Battle/RecordPlayer/RecordAction.cs
+++ b/Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -1,31 +1,250 @@
 
 using System.Collections.Generic;
 using System;
-
+using UnityEngine;
 
 public class RecordAction
 {
+
+    public int actionID;
+
+    public ulong tracePackUID = 0;
+
+    private static int autoincreser = 0;
     protected BattleField battleField;
 
+    //  鏈Action鐨勪富瑙�
     protected BattleObject battleObject;
 
-	public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj)
-	{
-		actionType = _actionType;
+    protected bool isFinish = false;
+
+    protected bool isRunOnce = false;
+
+#if UNITY_EDITOR
+    //  鏄惁宸叉墦鍗伴娆¤繍琛屾棩蹇楋紙浠呯敤浜庤皟璇曪級
+    private bool hasLoggedFirstRun = true;
+#endif
+
+    public RecordAction waitingAnimeAction = null;
+
+
+    //  ===== 鐖跺瓙鍏崇郴鍜岀瓑寰呮満鍒� =====
+    //  鐖禦ecordAction寮曠敤锛堝鏋滄槸閫氳繃鍏朵粬RecordAction鍐呴儴瑙﹀彂鐨勶級
+    public RecordAction parentAction;
+    
+    //  瀛怰ecordAction鍒楄〃锛堟RecordAction鍐呴儴瑙﹀彂鐨勫叾浠朢ecordAction锛�
+    protected List<RecordAction> childActionList = new List<RecordAction>();
+    
+    //  鏄惁鏄疻aitingPlay妯″紡锛堥渶瑕佺瓑寰呯埗鑺傜偣鍔ㄤ綔瀹屾垚锛�
+    public bool isWaitingPlay = false;
+    
+    //  鑷韩鍔ㄤ綔鏄惁瀹屾垚锛堜笉鍖呮嫭瀛愯妭鐐圭殑瀹屾垚鐘舵�侊級
+    protected bool isActionCompleted = false;
+
+    //  ===== 鍐呴儴RecordPlayer鏈哄埗 =====
+    //  鍐呴儴RecordPlayer锛氱敤浜庢挱鏀剧敱姝ecordAction鍐呴儴浜х敓鐨凴ecordAction
+    //  褰揜ecordAction鍐呴儴浜х敓鏂扮殑RecordAction鏃讹紙濡侾ackageRegedit.Distribute瑙﹀彂鐨勶級锛�
+    //  杩欎簺RecordAction搴旇鐢卞綋鍓峈ecordAction鐨刬nnerRecordPlayer绠$悊锛岃�屼笉鏄疊attleField鐨勪富RecordPlayer
+    //  杩欐牱鍙互淇濊瘉锛�
+    //  1. 鍐呴儴浜х敓鐨凴ecordAction鐢熷懡鍛ㄦ湡涓庣埗RecordAction缁戝畾
+    //  2. ForceFinish鏃跺彲浠ヤ竴骞跺鐞嗗唴閮ㄧ殑RecordAction
+    //  3. 涓嶄細骞叉壈BattleField涓籖ecordPlayer鐨勬挱鏀鹃槦鍒�
+    protected RecordPlayer innerRecordPlayer;
+
+    public RecordPlayer actionOwner { get; set; }
+
+    public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj)
+    {
+        actionID = autoincreser++;
+        actionType = _actionType;
         battleField = _battleField;
         battleObject = _battleObj;
-	}
+
+        //  鍒濆鍖栧唴閮≧ecordPlayer
+        //  姣忎釜RecordAction閮芥湁鑷繁鐨凴ecordPlayer鏉ョ鐞嗗唴閮ㄤ骇鐢熺殑RecordAction
+        if (_battleField != null)
+        {
+            innerRecordPlayer = new RecordPlayer();
+            innerRecordPlayer.Init(_battleField);
+        }
+    }
+
+    public virtual void AfterAddToQueue()
+    {
+
+    }
+
+    public virtual void Played()
+    {
+
+    }
 
     public RecordActionType actionType;
 
+    //  娣诲姞瀛怰ecordAction
+    public virtual void AddChildAction(RecordAction child)
+    {
+        if (child == null) return;
+        
+        //  闃叉閲嶅娣诲姞
+        if (childActionList.Contains(child)) return;
+        
+        //  闃叉寰幆渚濊禆
+        if (child == this)
+        {
+            BattleDebug.LogError("RecordAction.AddChildAction: 涓嶈兘灏嗚嚜宸辨坊鍔犱负瀛愯妭鐐�");
+            return;
+        }
+        
+        childActionList.Add(child);
+        BattleDebug.LogError($"RecordAction.AddChildAction: {this.GetType().Name} 娣诲姞瀛愯妭鐐� {child.GetType().Name}");
+    }
+
+    //  璁剧疆鐖禦ecordAction
+    public virtual void SetParentAction(RecordAction parent)
+    {
+        parentAction = parent;
+        if (parent != null)
+        {
+            BattleDebug.LogError($"RecordAction.SetParentAction: {this.GetType().Name} 鐨勭埗鑺傜偣璁剧疆涓� {parent.GetType().Name}");
+        }
+    }
+
+    //  璁剧疆WaitingPlay鏍囪
+    public virtual void SetWaitingPlay(bool waiting)
+    {
+        isWaitingPlay = waiting;
+        BattleDebug.LogError($"RecordAction.SetWaitingPlay: {this.GetType().Name} WaitingPlay={waiting}");
+    }
+
+    //  妫�鏌ヨ嚜韬姩浣滄槸鍚﹀畬鎴愶紙涓嶅寘鎷瓙鑺傜偣锛�
+    //  瀛愮被搴旇閲嶅啓姝ゆ柟娉曟潵瀹炵幇鑷繁鐨勫姩浣滃畬鎴愬垽鏂�
+    public virtual bool IsActionCompleted()
+    {
+        return isActionCompleted;
+    }
+
+    //  妫�鏌ユ槸鍚﹀彲浠ュ紑濮嬫墽琛岋紙WaitingPlay鏉′欢妫�鏌ワ級
+    public virtual bool CanStartExecution()
+    {
+        //  濡傛灉涓嶆槸WaitingPlay妯″紡锛岀洿鎺ュ彲浠ユ墽琛�
+        if (!isWaitingPlay)
+        {
+            return true;
+        }
+        
+        //  濡傛灉娌℃湁鐖惰妭鐐癸紝涔熷彲浠ユ墽琛�
+        if (parentAction == null)
+        {
+            return true;
+        }
+        
+        //  WaitingPlay妯″紡涓嬶紝闇�瑕佺瓑寰呯洿鎺ョ埗鑺傜偣鐨勫姩浣滃畬鎴愶紙涓嶇鐖惰妭鐐规槸鍚aitingPlay锛�
+        if (!parentAction.IsActionCompleted())
+        {
+            BattleDebug.LogError($"RecordAction.CanStartExecution: {this.GetType().Name} 绛夊緟鐖惰妭鐐� {parentAction.GetType().Name} 鍔ㄤ綔瀹屾垚");
+            return false;
+        }
+        
+        return true;
+    }
+
+    //  妫�鏌ユ槸鍚﹀畬鍏ㄥ畬鎴愶紙鍖呮嫭鎵�鏈夊瓙鑺傜偣锛�
     public virtual bool IsFinished()
     {
-        return false;
+        //  棣栧厛鑷韩鍔ㄤ綔蹇呴』瀹屾垚
+        if (!isActionCompleted && !isFinish)
+        {
+            return false;
+        }
+        
+        //  妫�鏌ュ唴閮≧ecordPlayer鏄惁杩樺湪鎾斁
+        //  鍘熷洜锛氬唴閮ㄤ骇鐢熺殑RecordAction蹇呴』鍏ㄩ儴鎾斁瀹屾垚鍚庯紝褰撳墠RecordAction鎵嶇畻瀹屾垚
+        if (innerRecordPlayer != null && innerRecordPlayer.IsPlaying())
+        {
+            return false;
+        }
+        
+        //  妫�鏌ユ墍鏈夊瓙鑺傜偣鏄惁瀹屾垚
+        foreach (var child in childActionList)
+        {
+            if (!child.IsFinished())
+            {
+                return false;
+            }
+        }
+        
+        return true;
     }
 
     public virtual void Run()
     {
-        
+#if UNITY_EDITOR
+        // 棣栨杩愯鏃舵墦鍗拌皟璇曚俊鎭�
+        if (!hasLoggedFirstRun)
+        {
+            hasLoggedFirstRun = true;
+            PrintFirstRunLog();
+        }
+#endif
+
+        //  鍏堣繍琛屽唴閮≧ecordPlayer
+        //  鍘熷洜锛氬唴閮ㄤ骇鐢熺殑RecordAction闇�瑕佸厛鎵ц锛岀‘淇濆唴閮ㄩ�昏緫鎸夋纭『搴忔挱鏀�
+        //  渚嬪锛氭妧鑳藉唴閮ㄤ骇鐢熺殑Buff娣诲姞銆佸瓙鎶�鑳界瓑閮界敱innerRecordPlayer绠$悊
+        innerRecordPlayer?.Run();
     }
 
+#if UNITY_EDITOR
+    /// <summary>
+    /// 棣栨杩愯鏃舵墦鍗版棩蹇楋紙浠呯紪杈戝櫒锛�
+    /// 瀛愮被鍙互閲嶅啓姝ゆ柟娉曡嚜瀹氫箟鎵撳嵃鍐呭
+    /// </summary>
+    protected virtual void PrintFirstRunLog()
+    {
+        Debug.LogError($"[RecordAction棣栨Run] {GetType().Name}");
+    }
+#endif
+
+    public virtual void ForceFinish()
+    {
+        isFinish = true;
+        isActionCompleted = true;
+        
+        //  寮哄埗缁撴潫鍐呴儴RecordPlayer
+        //  鍘熷洜锛歊ecordAction琚獸orceFinish鏃讹紝鍏跺唴閮ㄤ骇鐢熺殑鎵�鏈塕ecordAction涔熷繀椤诲己鍒剁粨鏉�
+        //  杩欐牱鎵嶈兘淇濊瘉鏁翠釜RecordAction鏍戠殑瀹屾暣鎬у拰涓�鑷存��
+        innerRecordPlayer?.ForceFinish();
+        
+        //  寮哄埗缁撴潫鎵�鏈夊瓙鑺傜偣
+        for (int i = childActionList.Count - 1; i >= 0; i--)
+        {
+            var child = childActionList[i];
+            child?.ForceFinish();
+        }
+        
+        //  娓呯悊鐖跺瓙寮曠敤锛岄槻姝㈠唴瀛樻硠婕�
+        childActionList.Clear();
+        parentAction = null;
+    }
+
+    public virtual string GetBattleFieldGuid()
+    {
+        if (battleField == null)
+        {
+            return string.Empty;
+        }
+        return battleField.guid;
+    }
+
+    //  鑾峰彇鍐呴儴RecordPlayer
+    //  鐢ㄤ簬澶栭儴浠g爜闇�瑕佸皢RecordAction娣诲姞鍒版RecordAction鐨勫唴閮ㄦ挱鏀惧櫒鏃朵娇鐢�
+    public virtual RecordPlayer GetInnerRecordPlayer()
+    {
+        return innerRecordPlayer;
+    }
+
+    public virtual bool NeedWaitSibling()
+    {
+        return true;
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0