From 09bc892c7283df8757a07b646d5af21ddaa263d1 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 06 十一月 2025 18:22:34 +0800
Subject: [PATCH] 164 天子的考验-客户端
---
Main/System/Battle/RecordPlayer/RecordPlayer.cs | 149 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 143 insertions(+), 6 deletions(-)
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index c5c9309..1281256 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -7,22 +7,39 @@
protected BattleField battleField;
private Queue<RecordAction> recordActionQueue = new Queue<RecordAction>();
-
protected RecordAction currentRecordAction;
+
+ protected List<RecordAction> immediatelyActionList = new List<RecordAction>();
+
+ private bool isWaitingNextAction = false;
+ private float waitTimer = 0f;
+ private const float waitInterval = 0.2f;
+
+ private float speedRatio = 1.5f;
+
+ private bool isForceFinish = false;
public void Init(BattleField _battleField)
{
+ Release();
battleField = _battleField;
}
public bool IsPlaying()
{
- return currentRecordAction != null || recordActionQueue.Count > 0;
+ bool isPlaying = currentRecordAction != null || recordActionQueue.Count > 0 || immediatelyActionList.Count > 0;
+ //BattleDebug.LogError("IsPlaying " + isPlaying + " currentRecordAction " + (currentRecordAction != null) + " recordActionQueue.Count " + recordActionQueue.Count + " immediatelyActionList.Count " + immediatelyActionList.Count);
+ return isPlaying;
}
public void PlayRecord(RecordAction recordAction)
{
- Debug.LogError("Enqueue record action " + recordAction.GetType());
+ BattleDebug.LogError("Enqueue record action " + recordAction.GetType());
+ if (isForceFinish)
+ {
+ recordAction.ForceFinish();
+ return;
+ }
recordActionQueue.Enqueue(recordAction);
}
@@ -34,8 +51,88 @@
}
}
+ public void InsertRecord(RecordAction recordAction)
+ {
+ if (isForceFinish)
+ {
+ recordAction.ForceFinish();
+ return;
+ }
+
+ BattleDebug.LogError("Insert record action " + recordAction.GetType());
+ if (currentRecordAction != null)
+ {
+ Queue<RecordAction> tempQueue = new Queue<RecordAction>();
+ tempQueue.Enqueue(recordAction);
+ while (recordActionQueue.Count > 0)
+ {
+ tempQueue.Enqueue(recordActionQueue.Dequeue());
+ }
+ recordActionQueue = tempQueue;
+ }
+ else
+ {
+ recordActionQueue.Enqueue(recordAction);
+ }
+ }
+
+ public void ImmediatelyPlay(RecordAction recordAction)
+ {
+ if (isForceFinish)
+ {
+ recordAction.ForceFinish();
+ return;
+ }
+ immediatelyActionList.Add(recordAction);
+ }
+
+ protected void ImmediatelyPlayRun()
+ {
+ if (immediatelyActionList.Count > 0)
+ {
+ List<int> removeIndexList = new List<int>();
+
+ for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
+ {
+ var action = immediatelyActionList[i];
+ if (!action.IsFinished())
+ {
+ action.Run();
+ continue;
+ }
+
+ removeIndexList.Add(i);
+ }
+
+ for (int i = removeIndexList.Count - 1; i >= 0; i--)
+ {
+ int index = removeIndexList[i];
+ if (index < 0 || index >= immediatelyActionList.Count)
+ continue;
+ immediatelyActionList.RemoveAt(index);
+ }
+ }
+ }
+
public virtual void Run()
{
+ ImmediatelyPlayRun();
+
+ // 绛夊緟涓嬩竴涓猘ction
+ if (isWaitingNextAction)
+ {
+ waitTimer += Time.deltaTime * speedRatio;
+ if (waitTimer >= waitInterval)
+ {
+ isWaitingNextAction = false;
+ waitTimer = 0f;
+ }
+ else
+ {
+ return;
+ }
+ }
+
if (currentRecordAction == null)
{
if (recordActionQueue.Count <= 0)
@@ -52,7 +149,13 @@
if (currentRecordAction != null && currentRecordAction.IsFinished())
{
+ var guid = currentRecordAction.GetBattleFieldGuid();
+ BattleDebug.LogError("record action " + currentRecordAction.GetType() + " play finished");
currentRecordAction = null;
+ isWaitingNextAction = true;
+ waitTimer = 0f;
+ EventBroadcast.Instance.Broadcast<string>(EventName.RECORDPLAYER_END, guid);
+ return;
}
if (currentRecordAction == null)
@@ -60,7 +163,7 @@
if (recordActionQueue.Count > 0)
{
currentRecordAction = recordActionQueue.Dequeue();
- Debug.LogError("play record action " + currentRecordAction.GetType());
+ BattleDebug.LogError("play record action " + currentRecordAction.GetType());
}
}
}
@@ -76,15 +179,49 @@
}
+
public void HaveRest()
{
- currentRecordAction = null;
- recordActionQueue.Clear();
+ ForceFinish();
+ }
+
+ public void ForceFinish()
+ {
+ isForceFinish = true;
+ for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
+ {
+ var action = immediatelyActionList[i];
+ action.ForceFinish();
+ immediatelyActionList.Remove(action);
+ }
+
+ while (currentRecordAction != null)
+ {
+ var temp = currentRecordAction;
+ currentRecordAction = null;
+ temp.ForceFinish();
+ }
+
+ while (recordActionQueue.Count > 0)
+ {
+ recordActionQueue.Dequeue().ForceFinish();
+ }
}
public void Release()
{
+ if (null != currentRecordAction)
+ {
+ currentRecordAction.ForceFinish();
+ }
currentRecordAction = null;
recordActionQueue.Clear();
+ immediatelyActionList.Clear();
+ isForceFinish = false;
+ }
+
+ public void SetSpeedRatio(float ratio)
+ {
+ speedRatio = ratio;
}
}
\ No newline at end of file
--
Gitblit v1.8.0