为游戏地图模块的脚本文件添加全面的注释,说明每个组件的职责、关键设计、依赖关系和使用方式。注释覆盖了英雄信息面板、技能卡槽位管理器、排行榜弹窗、卡牌控制器、背景滚动组件等核心功能模块,提高了代码的可读性和维护性。 同时修复了英雄预制体的激活状态和技能效果预制体的尺寸参数。
67 lines
2.5 KiB
TypeScript
67 lines
2.5 KiB
TypeScript
/**
|
||
* @file GameMap.ts
|
||
* @description 游戏地图 ECS 实体
|
||
*
|
||
* 职责:
|
||
* 1. 作为地图模块的 **ECS 根实体**,聚合 MapModelComp(数据层)与 MapViewComp(视图层)。
|
||
* 2. 在 init 阶段仅注册 MapModelComp(纯数据,不依赖节点)。
|
||
* 3. 显式调用 load() 时,异步加载地图预制(Prefab),实例化后将 MapViewComp 挂载到实体上。
|
||
*
|
||
* 设计说明:
|
||
* - 视图层的挂载延后到 load() 完成后,确保 Prefab 加载成功且节点树就绪。
|
||
* - 实例化的地图节点被添加至 oops.game.root,作为场景显示层的子节点。
|
||
* - MapViewComp 从预制体中名为 "map" 的子节点上获取。
|
||
*
|
||
* 依赖:
|
||
* - MapModelComp(model/MapModelComp.ts)—— 存放地图资源路径等数据配置
|
||
* - MapViewComp(view/MapViewComp.ts)—— 地图视图逻辑
|
||
* - oops.res —— 资源加载
|
||
* - oops.game.root —— 全局显示根节点
|
||
*/
|
||
/*
|
||
* @Author: dgflash
|
||
* @Date: 2022-02-12 11:02:21
|
||
* @LastEditors: dgflash
|
||
* @LastEditTime: 2022-08-04 15:20:55
|
||
*/
|
||
import { instantiate, Prefab } from "cc";
|
||
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
||
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
||
import { MapModelComp } from "./model/MapModelComp";
|
||
import { MapViewComp } from "./view/MapViewComp";
|
||
|
||
/** 游戏地图 ECS 实体 */
|
||
@ecs.register(`GameMap`)
|
||
export class GameMap extends ecs.Entity {
|
||
/** 地图数据模型组件(通过 ECS 自动注入) */
|
||
MapModel!: MapModelComp;
|
||
/** 地图视图组件(通过 ECS 自动注入,load() 完成后可用) */
|
||
MapView!: MapViewComp;
|
||
|
||
/**
|
||
* ECS 实体初始化:注册数据层组件。
|
||
* 视图层在 load() 中异步挂载。
|
||
*/
|
||
protected init(): void {
|
||
this.addComponents<ecs.Comp>(
|
||
MapModelComp);
|
||
}
|
||
|
||
/**
|
||
* 加载地图显示资源:
|
||
* 1. 通过 MapModel.resPrefab 路径加载 Prefab。
|
||
* 2. 实例化预制体并挂载到全局根节点。
|
||
* 3. 从预制体中提取 MapViewComp 并通过 this.add() 注册到实体。
|
||
*/
|
||
load() {
|
||
oops.res.load(this.MapModel.resPrefab, Prefab, (err: Error | null, res: Prefab) => {
|
||
if (err) {
|
||
console.error(err);
|
||
}
|
||
var map = instantiate(res);
|
||
map.parent = oops.game.root;
|
||
|
||
this.add(map.getChildByName("map").getComponent(MapViewComp));
|
||
});
|
||
}
|
||
} |