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