using System.Collections.Generic; using System; using UnityEngine; public class RecordPlayer { protected BattleField battleField; private Queue recordActionQueue = new Queue(); protected RecordAction currentRecordAction; private bool isWaitingNextAction = false; private float waitTimer = 0f; private const float waitInterval = 0.2f; public void Init(BattleField _battleField) { battleField = _battleField; } public bool IsPlaying() { return currentRecordAction != null || recordActionQueue.Count > 0; } public void PlayRecord(RecordAction recordAction) { BattleDebug.LogError("Enqueue record action " + recordAction.GetType()); recordActionQueue.Enqueue(recordAction); } public void PlayRecord(List recordActions) { for (int i = 0; i < recordActions.Count; i++) { PlayRecord(recordActions[i]); } } public virtual void Run() { // 等待下一个action if (isWaitingNextAction) { waitTimer += Time.deltaTime; if (waitTimer >= waitInterval) { isWaitingNextAction = false; waitTimer = 0f; } else { return; } } if (currentRecordAction == null) { if (recordActionQueue.Count <= 0) { return; } } if (currentRecordAction != null && !currentRecordAction.IsFinished()) { currentRecordAction.Run(); return; } if (currentRecordAction != null && currentRecordAction.IsFinished()) { BattleDebug.LogError("record action " + currentRecordAction.GetType() + " play finished"); currentRecordAction = null; isWaitingNextAction = true; waitTimer = 0f; return; } if (currentRecordAction == null) { if (recordActionQueue.Count > 0) { currentRecordAction = recordActionQueue.Dequeue(); BattleDebug.LogError("play record action " + currentRecordAction.GetType()); } } } // 先预留 感觉用的上 public virtual void ResumeGame() { } public virtual void PauseGame() { } public void HaveRest() { currentRecordAction = null; recordActionQueue.Clear(); } public void Release() { currentRecordAction = null; recordActionQueue.Clear(); } }