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 { GameEvent } from "../common/config/GameEvent";
|
||||||
import { SkillTriggerType, HType } from "../common/config/heroSet";
|
import { SkillTriggerType, HType } from "../common/config/heroSet";
|
||||||
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
import { SkillTriggerHelper } from "./SkillTriggerHelper";
|
||||||
|
import { BossPhaseSet } from "../common/config/BossPhaseSet";
|
||||||
|
import { BossPhaseComp } from "./BossPhaseComp";
|
||||||
|
import { mLogger } from "../common/Logger";
|
||||||
/** 怪物实体:负责怪物对象池复用、属性初始化、入场动画与回收 */
|
/** 怪物实体:负责怪物对象池复用、属性初始化、入场动画与回收 */
|
||||||
@ecs.register(`Monster`)
|
@ecs.register(`Monster`)
|
||||||
export class Monster extends ecs.Entity {
|
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 引用滞留
|
// 手动移除组件,避免 ecs 引用滞留
|
||||||
this.remove(HeroViewComp);
|
this.remove(HeroViewComp);
|
||||||
this.remove(HeroAttrsComp);
|
this.remove(HeroAttrsComp);
|
||||||
@@ -134,7 +141,7 @@ export class Monster extends ecs.Entity {
|
|||||||
* 2) 初始化表现、属性、技能与阵营
|
* 2) 初始化表现、属性、技能与阵营
|
||||||
* 3) 播放下落入场并在落地后启用碰撞与移动
|
* 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
|
scale = -1
|
||||||
// 当前怪物尺寸固定,保留变量便于后续扩展
|
// 当前怪物尺寸固定,保留变量便于后续扩展
|
||||||
@@ -264,6 +271,19 @@ export class Monster extends ecs.Entity {
|
|||||||
// 缓存技能射程等派生数据,减少战斗帧内重复计算
|
// 缓存技能射程等派生数据,减少战斗帧内重复计算
|
||||||
model.updateSkillDistanceCache();
|
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);
|
this.add(view);
|
||||||
view.init();
|
view.init();
|
||||||
@@ -356,6 +376,9 @@ export class Monster extends ecs.Entity {
|
|||||||
|
|
||||||
/** 重置入口:复用 destroy 的释放流程 */
|
/** 重置入口:复用 destroy 的释放流程 */
|
||||||
reset() {
|
reset() {
|
||||||
|
if (this.has(BossPhaseComp)) {
|
||||||
|
this.remove(BossPhaseComp);
|
||||||
|
}
|
||||||
super.destroy();
|
super.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user