using UnityEngine; using System.Collections.Generic; using Cysharp.Threading.Tasks; 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) { PerformDrop(deadObj); deadObj.OnDeath(() => { index++; isLastOne = index >= total; if (isLastOne) { // UniTaskExtension.DelayTime((GameObject)null, 0.3f / battleField.speedRatio, () => // { isFinish = true; // }); } }); } else { canFind = false; } } if (!canFind) { isFinish = true; } return; } } 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(); } } }