yyl
2026-03-26 1ab047b5fdd933c38ba0519ec2e83a44512ea8d7
Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -4,6 +4,17 @@
public class RecordPlayer
{
    //  初始化之前允许的record action类型
    private readonly static List<Type> allowedActionTypes = new List<Type>()
    {
        typeof(BattleStartAction),
        typeof(PreloadResAction),
    };
    private List<RecordAction> tempPreinitRecordActionList = new List<RecordAction>();
    protected BattleField battleField;
    private Queue<RecordAction> recordActionQueue = new Queue<RecordAction>();
@@ -48,6 +59,7 @@
    public void PlayRecord(RecordAction recordAction)
    {
        if (recordAction == null) return;
        if (!CheckRecordType(recordAction)) return;
        recordAction.actionOwner = this;
        // Debug.LogError("Enqueue record action " + recordAction.GetType() + " to queue");
        if (isForceFinish || stepForcefinish)
@@ -62,6 +74,7 @@
    public void PlayRecord(RecordAction recordAction, RecordAction waitingAnimeAction)
    {
        if (recordAction == null) return;
        if (!CheckRecordType(recordAction)) return;
        recordAction.actionOwner = this;
        // Debug.LogError("Enqueue record action " + recordAction.GetType() + " to queue");
        if (isForceFinish || stepForcefinish)
@@ -85,6 +98,7 @@
    public void InsertRecord(RecordAction recordAction, int position = 0)
    {
        if (recordAction == null) return;
        if (!CheckRecordType(recordAction)) return;
        recordAction.actionOwner = this;
        if (isForceFinish || stepForcefinish)
        {
@@ -270,8 +284,45 @@
        }
    }
    private bool CheckRecordType(RecordAction recordAction)
    {
        if (battleField.IsInit)
        {
            return true;
        }
        else
        {
            if (!allowedActionTypes.Contains(recordAction.GetType()))
            {
                tempPreinitRecordActionList.Add(recordAction);
                return false;
            }
            else
            {
                return true;
            }
        }
    }
    public virtual void Run()
    {
        if (battleField != null)
        {
            if (!battleField.IsInit)
            {
                return;
            }
            if (tempPreinitRecordActionList.Count > 0)
            {
                foreach (var action in tempPreinitRecordActionList)
                {
                    PlayRecord(action);
                }
                tempPreinitRecordActionList.Clear();
            }
        }
        ImmediatelyPlayRun();
        // 等待下一个action