import { BaseState } from "../../Framework/FSM/BaseState"; /** * 应用游戏状态 * 职责: * - 加载游戏场景 * - 初始化玩家角色 * - 监听服务器广播(其他玩家加入、移动等) * - 游戏主循环 */ export class AppStatusGame extends BaseState { private _player: any = null; private _isNewPlayer: boolean = false; constructor(fsm: any) { super(fsm, "Game"); } /** * 进入游戏状态 */ async onEnter(params?: any): Promise { super.onEnter(params); console.log("[AppStatusGame] 进入游戏世界"); // 保存玩家信息 if (params) { this._player = params.player || null; this._isNewPlayer = params.isNewPlayer || false; console.log(`[AppStatusGame] 玩家信息:`, this._player); console.log(`[AppStatusGame] 是否新玩家: ${this._isNewPlayer}`); } try { // 1. 加载游戏场景 await this.loadGameScene(); // 2. 初始化游戏 await this.initGame(); // 3. 开始监听服务器广播 this.listenServerMessages(); // 4. 开始游戏 this.startGame(); } catch (error) { console.error("[AppStatusGame] 进入游戏失败:", error); // 返回登录 this._fsm.changeState("Login"); } } /** * 加载游戏场景 */ private async loadGameScene(): Promise { console.log("[AppStatusGame] 加载游戏场景..."); // TODO: 使用Cocos场景管理器加载游戏场景 // await director.loadScene("GameScene"); // 模拟加载延迟 await this.delay(500); console.log("[AppStatusGame] 游戏场景加载完成(待实现)"); } /** * 初始化游戏 */ private async initGame(): Promise { console.log("[AppStatusGame] 初始化游戏..."); // TODO: 初始化游戏逻辑 // - 创建玩家角色(根据this._player信息) // - 设置玩家位置(this._player.position) // - 创建敌人 // - 初始化游戏规则 console.log("[AppStatusGame] 游戏初始化完成(待实现)"); } /** * 监听服务器广播消息 */ private listenServerMessages(): void { console.log("[AppStatusGame] 开始监听服务器广播..."); // TODO: 监听服务器广播消息 // const netManager = NetManager.getInstance(); // 监听玩家加入 (MsgPlayerJoin) // netManager.listenMsg("PlayerJoin", (msg) => { // console.log("玩家加入:", msg.playerName); // // 在场景中创建其他玩家 // }); // 监听玩家移动 (MsgPlayerMove) // netManager.listenMsg("PlayerMove", (msg) => { // console.log("玩家移动:", msg.playerName, msg.position); // // 更新其他玩家位置 // }); // 监听聊天消息 (MsgChat) // netManager.listenMsg("Chat", (msg) => { // console.log("聊天消息:", msg); // // 显示聊天内容 // }); console.log("[AppStatusGame] 服务器广播监听已设置(待实现)"); } /** * 开始游戏 */ private startGame(): void { console.log("[AppStatusGame] 游戏开始!"); // TODO: 启动游戏逻辑 // - 显示游戏UI // - 开始接收输入 // - 开始游戏主循环(在onUpdate中) } /** * 更新游戏状态(每帧调用) */ onUpdate(dt: number): void { // TODO: 游戏主循环逻辑 // - 更新角色位置 // - 检测碰撞 // - 更新敌人AI // - 同步网络状态 } /** * 暂停游戏 */ pauseGame(): void { console.log("[AppStatusGame] 游戏暂停"); // TODO: 暂停游戏逻辑 // - 停止游戏更新 // - 显示暂停菜单 } /** * 恢复游戏 */ resumeGame(): void { console.log("[AppStatusGame] 游戏恢复"); // TODO: 恢复游戏逻辑 // - 继续游戏更新 // - 隐藏暂停菜单 } /** * 玩家死亡 */ onPlayerDeath(): void { console.log("[AppStatusGame] 玩家死亡"); // TODO: 处理玩家死亡 // - 显示死亡界面 // - 显示复活选项或返回登录 // 延迟后返回登录 setTimeout(() => { this._fsm.changeState("Login"); }, 3000); } /** * 退出游戏(返回登录) */ quitGame(): void { console.log("[AppStatusGame] 退出游戏"); // TODO: 断开连接或通知服务器 // const netManager = NetManager.getInstance(); // await netManager.disconnect(); // 返回登录 this._fsm.changeState("Login"); } /** * 延迟辅助函数 */ private delay(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)); } /** * 退出游戏状态 */ onExit(): void { super.onExit(); console.log("[AppStatusGame] 离开游戏状态"); // TODO: 清理游戏资源 // - 卸载游戏场景 // - 清理角色对象 // - 取消服务器消息监听 // const netManager = NetManager.getInstance(); // netManager.unlistenMsg("PlayerJoin"); // netManager.unlistenMsg("PlayerMove"); // netManager.unlistenMsg("Chat"); } }