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