feat: wire BossPhaseComp into monster load/destroy
This commit is contained in:
@@ -10,6 +10,9 @@ import { MoveComp } from "./MoveComp";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { SkillTriggerType, HType } from "../common/config/heroSet";
|
||||
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
||||
import { BossPhaseSet } from "../common/config/BossPhaseSet";
|
||||
import { BossPhaseComp } from "./BossPhaseComp";
|
||||
import { mLogger } from "../common/Logger";
|
||||
/** 怪物实体:负责怪物对象池复用、属性初始化、入场动画与回收 */
|
||||
@ecs.register(`Monster`)
|
||||
export class Monster extends ecs.Entity {
|
||||
@@ -122,6 +125,10 @@ export class Monster extends ecs.Entity {
|
||||
}
|
||||
}
|
||||
|
||||
// 阶段组件显式移除:触发 reset 清空状态并回组件池(ECS 组件无自动销毁钩子)
|
||||
if (this.has(BossPhaseComp)) {
|
||||
this.remove(BossPhaseComp);
|
||||
}
|
||||
// 手动移除组件,避免 ecs 引用滞留
|
||||
this.remove(HeroViewComp);
|
||||
this.remove(HeroAttrsComp);
|
||||
@@ -134,7 +141,7 @@ export class Monster extends ecs.Entity {
|
||||
* 2) 初始化表现、属性、技能与阵营
|
||||
* 3) 播放下落入场并在落地后启用碰撞与移动
|
||||
*/
|
||||
load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, is_boss: boolean = false, dropToY: number = pos.y, mon_lv: number = 1, laneIndex: number = 0) {
|
||||
load(pos: Vec3 = Vec3.ZERO, scale: number = 1, uuid: number = 1001, is_boss: boolean = false, dropToY: number = pos.y, mon_lv: number = 1, laneIndex: number = 0, phase_plan_id: number = 0) {
|
||||
// 怪物默认朝左,表现缩放固定为负向
|
||||
scale = -1
|
||||
// 当前怪物尺寸固定,保留变量便于后续扩展
|
||||
@@ -264,6 +271,19 @@ export class Monster extends ecs.Entity {
|
||||
// 缓存技能射程等派生数据,减少战斗帧内重复计算
|
||||
model.updateSkillDistanceCache();
|
||||
|
||||
// Boss 阶段初始化:P1 = 基线技能,仅挂标记组件并记录方案(方案缺失则退化为单阶段 Boss)
|
||||
if (is_boss && phase_plan_id > 0) {
|
||||
const plan = BossPhaseSet[phase_plan_id];
|
||||
if (plan) {
|
||||
const phase = this.add(BossPhaseComp);
|
||||
phase.plan_id = phase_plan_id;
|
||||
phase.index = 0;
|
||||
} else {
|
||||
// 配置兜底:引用了不存在的方案,退化为单阶段并告警(不阻断战斗)
|
||||
mLogger.warn(true, "BossPhase", `阶段方案 ${phase_plan_id} 未在 BossPhaseSet 中定义,Boss 按单阶段战斗`);
|
||||
}
|
||||
}
|
||||
|
||||
// 注册视图组件并重置对象池复用状态
|
||||
this.add(view);
|
||||
view.init();
|
||||
@@ -356,6 +376,9 @@ export class Monster extends ecs.Entity {
|
||||
|
||||
/** 重置入口:复用 destroy 的释放流程 */
|
||||
reset() {
|
||||
if (this.has(BossPhaseComp)) {
|
||||
this.remove(BossPhaseComp);
|
||||
}
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user