hch
12 分钟以前 8a2d52c24c60af2bf6e3968e8dde9ddcb5ccffba
Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -13,7 +13,11 @@
    private bool isWaitingNextAction = false;
    private float waitTimer = 0f;
    private const float waitInterval = 0f;
    private const float waitInterval = 0.2f;
    private float speedRatio = 1.5f;
    private bool isForceFinish = false;
    public void Init(BattleField _battleField)
    {
@@ -23,12 +27,19 @@
    public bool IsPlaying()
    {
        return currentRecordAction != null || recordActionQueue.Count > 0 || immediatelyActionList.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)
    {
        BattleDebug.LogError("Enqueue record action " + recordAction.GetType());
        if (isForceFinish)
        {
            recordAction.ForceFinish();
            return;
        }
        recordActionQueue.Enqueue(recordAction);
    }
@@ -42,6 +53,12 @@
    public void InsertRecord(RecordAction recordAction)
    {
        if (isForceFinish)
        {
            recordAction.ForceFinish();
            return;
        }
        BattleDebug.LogError("Insert record action " + recordAction.GetType());
        if (currentRecordAction != null)
        {
@@ -61,6 +78,11 @@
    public void ImmediatelyPlay(RecordAction recordAction)
    {
        if (isForceFinish)
        {
            recordAction.ForceFinish();
            return;
        }
        immediatelyActionList.Add(recordAction);
    }
@@ -84,7 +106,10 @@
            for (int i = removeIndexList.Count - 1; i >= 0; i--)
            {
                immediatelyActionList.RemoveAt(removeIndexList[i]);
                int index = removeIndexList[i];
                if (index < 0 || index >= immediatelyActionList.Count)
                    continue;
                immediatelyActionList.RemoveAt(index);
            }
        }
    }
@@ -96,7 +121,7 @@
        // 等待下一个action
        if (isWaitingNextAction)
        {
            waitTimer += Time.deltaTime;
            waitTimer += Time.deltaTime * speedRatio;
            if (waitTimer >= waitInterval)
            {
                isWaitingNextAction = false;
@@ -124,10 +149,12 @@
        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;
        }
@@ -152,20 +179,28 @@
    }
    public void HaveRest()
    {
        for (int i = 0; i < immediatelyActionList.Count; i++)
        ForceFinish();
    }
    public void ForceFinish()
    {
        isForceFinish = true;
        for (int i = immediatelyActionList.Count - 1; i >= 0; i--)
        {
            immediatelyActionList[i].ForceFinish();
            var action = immediatelyActionList[i];
            action.ForceFinish();
            immediatelyActionList.Remove(action);
        }
        immediatelyActionList.Clear();
        if (currentRecordAction != null)
        while (currentRecordAction != null)
        {
            currentRecordAction.ForceFinish();
            var temp = currentRecordAction;
            currentRecordAction = null;
            temp.ForceFinish();
        }
        currentRecordAction = null;
        while (recordActionQueue.Count > 0)
        {
@@ -182,5 +217,11 @@
        currentRecordAction = null;
        recordActionQueue.Clear();
        immediatelyActionList.Clear();
        isForceFinish = false;
    }
    public void SetSpeedRatio(float ratio)
    {
        speedRatio = ratio;
    }
}