lcy
2025-11-06 09bc892c7283df8757a07b646d5af21ddaa263d1
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -1,53 +1,95 @@
using UnityEngine;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
public class DeathRecordAction : RecordAction
{
    protected List<HB422_tagMCTurnFightObjDead> deadPackList = new List<HB422_tagMCTurnFightObjDead>();
   public DeathRecordAction(BattleField _battleField, BattleObject _battleObj)
      : base(RecordActionType.Death, _battleField, _battleObj)
   {
      isFinish = false;
      isRunOnce = false;
   }
   public override bool IsFinished()
   {
      return isFinish;
   }
    public DeathRecordAction(BattleField _battleField, List<HB422_tagMCTurnFightObjDead> _deadPackList)
        : base(RecordActionType.Death, _battleField, null)
    {
        deadPackList = _deadPackList;
    }
    public override void Run()
    {
        if (isRunOnce)
        if (isFinish)
        {
           return;
            return;
        }
        base.Run();
        isRunOnce = true;
        battleObject.OnDeath(OnDeathAnimationEnd);
        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;
        }
    }
    private void OnDeathAnimationEnd()
    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)
        {
            var dropItemPack = PackManager.Instance.GetSinglePack(PackType.DropItem);
            if (dropItemPack != null)
            {
                var items = dropItemPack.GetAllItems();
                foreach (ItemModel item in items.Values)
                {
                    //    掉落物品
                    battleField.OnObjDropItem(battleObject.teamHero.positionNum, item);
                    battleField.OnObjDropExp(battleObject);
                }
            }
            deadObj.PerformDrop();
        }
        // 掉落物品 增加经验
       isFinish = true;
    }
}