This commit is contained in:
2026-08-09 17:57:46 +08:00
parent 316a83a6ac
commit 983192ba29
323 changed files with 32641 additions and 14505 deletions
@@ -0,0 +1,66 @@
using Assets.MyGame.Scripts.Net.APIResponses.Enum;
using Assets.MyGame.Scripts.Net.WebResponses;
using UnityEngine;
/// <summary>
/// 烈焰风暴 Boss。
/// 死亡流程:正常打死 → 在死亡位置爆炸 → 范围内普通鱼死亡 → 加分滚动。
///
/// ⭐ 特殊:爆奖分两次(爆炸杀鱼 + 爆奖红包各 2 次)。
/// 第一次死亡时【不从鱼列表删除 Boss】,等爆奖流程(LieYanFengBaoEvent)全部结束后,
/// 由 Event 通知 Boss 回收并从字典移除,避免爆奖过程中 Boss 被提前移除导致后续逻辑找不到。
/// </summary>
public class LieYanFengBao_BOSS : MonsterControl_BossBase
{
/// <summary>爆奖事件引用(死亡时赋值,供外部检查爆奖是否结束)</summary>
[System.NonSerialized]
public LieYanFengBaoEvent currEvent;
public override void DieFish(RoomKillNotice obj = null)
{
base.DieFish(obj);
// 标准爆奖事件初始化
action_effect_DieAward = (o) =>
{
// 爆奖预制体已由 CreateFishManager 在 monster.transform.position(死亡位置)创建
Vector3 diePos = transform.position;
Debug.Log($"[LieYanFengBao] action_effect_DieAward: 鱼位置={diePos} 爆奖预制体位置={o.transform.position}");
// ⭐ 不在这里调用 Id_DieFish_NotFX 回收 Boss!
// 烈焰风暴爆奖分两次,爆奖过程中 Boss 必须保留在鱼列表里,
// 否则爆奖协程还在跑时 Boss 被移除会出很多问题(锁定、显示等都找不到)。
// Boss 的回收由 LieYanFengBaoEvent.die() 时回调通知。
if (obj == null) return;
foreach (var item in CreateFishManager.Instance.currGameType.list_Sits)
{
if (item.user == obj.userId)
{
var v = o.GetComponent<BJEventBase>();
// 先设置死亡位置,再 Init(Init 里会用 explosionCenter 恢复位置)
var evt = v as LieYanFengBaoEvent;
if (evt != null)
{
evt.explosionCenter = diePos;
// ⭐ 把 Boss 引用交给 Event,爆奖结束时由 Event 通知 Boss 回收
evt.bossCtrl = this;
currEvent = evt;
Debug.Log($"[LieYanFengBao] 设置爆炸中心(死亡位置)={diePos}");
}
v.Init(
obj.gold, // goldCount
item.posID, // posID(击杀者座位)
obj.skillsGold, // paobei(炮倍)
obj.fishScore, // fishScore(底分)
obj.beishu, // beishu(总倍数)
JiaFen, // action<int>(加分回调)
() => { v.obj = obj.param; } // 把服务端爆奖参数交给事件类
);
}
}
};
}
}