using UnityEngine; using System.Collections.Generic; using Cysharp.Threading.Tasks; // 如果这个Action卡住了 大概率是因为 动作被其他动作中断了 导致没有回调 public class DeathRecordAction : RecordAction { protected List deadPackList = new List(); public DeathRecordAction(BattleField _battleField, List _deadPackList) : base(RecordActionType.Death, _battleField, null) { deadPackList = _deadPackList; } public override void Run() { if (isFinish) { return; } base.Run(); if (!isRunOnce) { isRunOnce = true; bool isLastOne = false; int index = 0; int total = deadPackList.Count; bool canFind = true; foreach (var deadPack in deadPackList) { BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID); if (null != deadObj) { if (deadObj.IsDead()) { index++; continue; } PerformDrop(deadObj); // Debug.LogError("start death : " + deadObj.ObjID); deadObj.OnDeath(() => { // Debug.LogError("death callback : " + deadObj.ObjID); index++; isLastOne = index >= total; if (isLastOne) { // UniTaskExtension.DelayTime((GameObject)null, 0.3f / battleField.speedRatio, () => // { isFinish = true; // }); } }); } else { canFind = false; } } if (!canFind) { isFinish = true; } } } public override void ForceFinish() { isFinish = true; // 直接结束 foreach (var deadPack in deadPackList) { BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID); if (null != deadObj) { PerformDrop(deadObj); } } base.ForceFinish(); } private void PerformDrop(BattleObject deadObj) { // 只有主线掉落物品 if (battleField.MapID == 1 || battleField.MapID == 2) { deadObj.PerformDrop(); } } }