/** * @file MissionHomeComp.ts * @description 任务主页组件(UI 视图层) * * 职责: * 1. 作为玩家进入游戏后第一个看到的界面(主菜单/大厅)。 * 2. 提供"开始任务"按钮,触发 GameEvent.MissionStart 进入战斗。 * 3. 提供"排行榜"按钮,打开 RanksComp 弹窗。 * 4. 监听 MissionEnd 事件,任务结束后自动切回主页。 * * 关键设计: * - start_mission() 分发 MissionStart 事件并隐藏自身节点。 * - mission_end() 响应后重新显示主页。 * - isWxClient() 检测是否运行在微信小游戏环境。 * * 依赖: * - GameEvent.MissionStart / MissionEnd —— 游戏生命周期事件 * - UIID.Ranks —— 排行榜弹窗 ID */ import { _decorator, instantiate, Prefab, resources, Sprite, SpriteAtlas, UITransform ,Node} from "cc"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { smc } from "../common/SingletonModuleComp"; import { GameEvent } from "../common/config/GameEvent"; import { Timer } from "db://oops-framework/core/common/timer/Timer"; import { mLogger } from "../common/Logger"; import { UIID } from "../common/config/GameUIConfig"; const { ccclass, property } = _decorator; /** * MissionHomeComp —— 任务主页视图组件 * * 游戏大厅界面,提供开始战斗和查看排行的入口。 */ @ccclass('MissionHomeComp') @ecs.register('MissionHome', false) export class MissionHomeComp extends CCComp { /** 调试日志开关 */ debugMode: boolean = false; /** 主页按钮节点(预留) */ @property(Node) home_btn=null! /** 英雄图鉴按钮节点(预留) */ @property(Node) hero_btn=null! /** 排行榜按钮节点 */ @property(Node) rank_btn=null! /** 注册任务结束事件 */ protected onLoad(): void { this.on(GameEvent.MissionEnd,this.mission_end,this) } /** 启动时显示主页 */ start() { this.home_active() } onEnable(){ } update(dt:number){ } /** * 开始任务: * 1. 打印日志。 * 2. 分发 MissionStart 事件,驱动 MissionComp / MissionCardComp 初始化战斗。 * 3. 隐藏主页节点。 */ start_mission() { mLogger.log(this.debugMode, 'MissionHomeComp', "start_mission") oops.message.dispatchEvent(GameEvent.MissionStart, {}) this.node.active=false; } /** 打开排行榜弹窗 */ openRanks(){ oops.gui.open(UIID.Ranks) } /** 任务结束回调:重新显示主页 */ mission_end(){ mLogger.log(this.debugMode, 'MissionHomeComp', "[MissionHomeComp]=>mission_end") this.home_active() } /** 激活主页显示:刷新数据并显示节点 */ home_active(){ this.uodate_data() this.node.active=true } /** 更新主页显示数据(预留) */ uodate_data(){ } /** * 判断是否运行在微信小游戏环境。 * @returns true = 微信小游戏环境 */ isWxClient(){ return typeof wx !== 'undefined' && typeof (wx as any).getSystemInfoSync === 'function'; } /** ECS 组件移除时销毁节点 */ reset() { this.node.destroy(); } }