Files
pixelheros/assets/script/game/map/EBox.ts
pan 0b579f695c refactor(map): 重构装备卡槽管理与节点挂载逻辑
1.  移除HeroBoxComp中未使用的ebars_node属性
2.  重构EBox.load方法,支持自定义父节点并更新注释
3.  重构MissEquipComp:
    - 移除无用的BoxSet导入和硬编码槽位坐标
    - 使用ebars_node子节点动态生成槽位
    - 修改装备挂载逻辑,将装备挂载到对应ebar子节点而非直接设置位置
    - 更新相关注释与日志提示
4.  调整mission.prefab的UI布局参数与绑定节点
2026-08-06 16:52:32 +08:00

55 lines
1.7 KiB
TypeScript

import { instantiate, Prefab, Vec3, Node } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { smc } from "../common/SingletonModuleComp";
import { EquipBoxComp } from "./EquipBoxComp";
/** EBox 实体:负责技能卡效果节点创建、初始化与销毁流程 */
@ecs.register(`EBox`)
export class EBox extends ecs.Entity {
/** 技能盒子视图和逻辑组件引用 */
SkillBox!: EquipBoxComp;
protected init() {
// 如果有纯逻辑数据组件可以在这里 addComponents
}
/** 销毁实体并释放视图节点,防止残留 */
destroy(): void {
const view = this.get(EquipBoxComp);
if (view && view.node && view.node.isValid) {
view.node.destroy();
}
this.remove(EquipBoxComp);
super.destroy();
}
/**
* 加载并初始化技能盒子
* 1) 创建节点并挂到 parent 下(未传时默认 SKILL 层)
* 2) 初始化表现与属性数据
*/
load(uuid: number, card_lv: number, pos: Vec3, prefab: Prefab, parent?: Node): Node {
let node = instantiate(prefab);
// 默认挂到实体显示层 SKILL 节点下
if (!parent) {
let scene = smc.map.MapView.scene;
parent = scene.entityLayer!.node!.getChildByName("SKILL") ?? undefined;
}
if (parent) {
node.parent = parent;
}
node.setPosition(pos);
// 获取并注册组件
let eboxComp = node.getComponent(EquipBoxComp) || node.addComponent(EquipBoxComp);
this.add(eboxComp);
// 初始化业务逻辑
eboxComp.init(uuid, card_lv);
return node;
}
}