From f236bbc6384c1f4b5a16739e4124ab832090ddc3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 15 十二月 2025 11:21:30 +0800
Subject: [PATCH] 125 战斗 新增死亡触发技能支持
---
Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs | 117 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 81 insertions(+), 36 deletions(-)
diff --git a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
index b98b95a..8095661 100644
--- a/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/DeathRecordAction.cs
@@ -1,14 +1,21 @@
using UnityEngine;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
+using System;
// 濡傛灉杩欎釜Action鍗′綇浜� 澶ф鐜囨槸鍥犱负 鍔ㄤ綔琚叾浠栧姩浣滀腑鏂簡 瀵艰嚧娌℃湁鍥炶皟
public class DeathRecordAction : RecordAction
{
- protected List<HB422_tagMCTurnFightObjDead> deadPackList = new List<HB422_tagMCTurnFightObjDead>();
+ protected List<BattleDeadPack> deadPackList = new List<BattleDeadPack>();
- public DeathRecordAction(BattleField _battleField, List<HB422_tagMCTurnFightObjDead> _deadPackList)
+ protected Dictionary<BattleDeadPack, SkillRecordAction> deathActionDict = new Dictionary<BattleDeadPack, SkillRecordAction>();
+
+ protected Dictionary<BattleDeadPack, Func<bool>> deadActionStatesDict = new Dictionary<BattleDeadPack, Func<bool>>();
+
+ protected Dictionary<int, bool> dropStateDict = new Dictionary<int, bool>();
+
+ public DeathRecordAction(BattleField _battleField, List<BattleDeadPack> _deadPackList)
: base(RecordActionType.Death, _battleField, null)
{
deadPackList = _deadPackList;
@@ -17,61 +24,94 @@
public override void Run()
{
+ // 璇ユ鐨勬甯告
+ // 鏈夋妧鑳界殑鍒欐寜鐓ч『搴忔挱鏀炬浜℃妧鑳� 鍚庡啀姝e父姝�
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)
+ foreach (var battleDeadPack in deadPackList)
{
- BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID);
- if (null != deadObj)
+ if (battleDeadPack.deadTriggerSkill != null)
{
- if (deadObj.IsDead())
+ var skillAction = battleDeadPack.deadTriggerSkill.CreateSkillAction();
+ if (null != skillAction)
{
- index++;
- continue;
+ deathActionDict.Add(battleDeadPack, skillAction);
}
- 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;
+ deadActionStatesDict.Add(battleDeadPack, CreateDeadActionState(battleDeadPack));
+ }
+ }
+ }
+ else
+ {
+ List<BattleDeadPack> finishedKeys = new List<BattleDeadPack>();
+ foreach (var kv in deathActionDict)
+ {
+ if (!kv.Key.isPlaySkill)
+ {
+ // battleField.recordPlayer.ImmediatelyPlay(kv.Value);
+ kv.Key.isPlaySkill = true;
+ }
+
+ if (!kv.Value.IsFinished())
+ {
+ kv.Value.Run();
+ }
+ else
+ {
+ deadActionStatesDict.Add(kv.Key, CreateDeadActionState(kv.Key, true));
+ finishedKeys.Add(kv.Key);
+ }
+ break;
+ }
+
+ foreach (var key in finishedKeys)
+ {
+ deathActionDict.Remove(key);
+ }
+
+ int completeNum = 0;
+
+ foreach (var kv in deadActionStatesDict)
+ {
+ if (kv.Value())
+ {
+ completeNum++;
}
}
- if (!canFind)
+ if (completeNum == deadPackList.Count)
{
isFinish = true;
}
}
+ }
+
+ private Func<bool> CreateDeadActionState(BattleDeadPack deadPack, bool withoutAnime = false)
+ {
+ BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.deadPack.ObjID);
+ if (null == deadObj)
+ {
+ return () => true;
+ }
+
+ PerformDrop(deadObj);
+
+ bool isComplete = false;
+
+ deadObj.OnDeath(() => {
+ isComplete = true;
+ }, withoutAnime);
+
+ return () => isComplete;
}
public override void ForceFinish()
@@ -81,7 +121,7 @@
// 鐩存帴缁撴潫
foreach (var deadPack in deadPackList)
{
- BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.ObjID);
+ BattleObject deadObj = battleField.battleObjMgr.GetBattleObject((int)deadPack.deadPack.ObjID);
if (null != deadObj)
{
PerformDrop(deadObj);
@@ -97,6 +137,11 @@
// 鍙湁涓荤嚎鎺夎惤鐗╁搧
if (battleField.MapID == 1 || battleField.MapID == 2)
{
+ if (dropStateDict.ContainsKey(deadObj.ObjID))
+ {
+ return;
+ }
+ dropStateDict.Add(deadObj.ObjID, true);
deadObj.PerformDrop();
}
}
--
Gitblit v1.8.0