import { BaseState } from "../../Framework/FSM/BaseState"; import { NetManager } from "../../Framework/Net/NetManager"; import { UIMgr } from "../../Framework/UI/UIMgr"; import { UILogin } from "../Login/UILogin"; /** * 应用登录状态 * 职责: * - 显示登录界面 * - 处理玩家ID输入 * - 发送登录请求(Login API) * - 登录成功后直接进入游戏世界 */ export class AppStatusLogin extends BaseState { constructor(fsm: any) { super(fsm, "Login"); } /** * 进入登录状态 */ async onEnter(params?: any): Promise { super.onEnter(params); console.log("[AppStatusLogin] 显示登录界面"); // 1. 显示登录界面 await this.showLoginUI(); // 2. 等待用户输入玩家ID并点击登录 // 在 UI 中处理输入,调用 this.login(playerId, playerName) } /** * 显示登录界面 */ private async showLoginUI(): Promise { console.log("[AppStatusLogin] 加载登录UI..."); try { const uiMgr = UIMgr.getInstance(); await uiMgr.load(UILogin); console.log("[AppStatusLogin] 登录UI加载成功"); } catch (error) { console.error("[AppStatusLogin] 登录UI加载失败:", error); } } /** * 执行登录 * @param playerId 玩家ID(用于识别玩家) * @param playerName 玩家昵称(可选,新玩家时使用) */ async login(playerId: string, playerName?: string): Promise { console.log(`[AppStatusLogin] 尝试登录, 玩家ID: ${playerId}`); if (!playerId || playerId.trim().length === 0) { console.error("[AppStatusLogin] 玩家ID不能为空"); // TODO: 显示错误提示 return; } try { // 1. 发送登录请求到服务器 // const netManager = NetManager.getInstance(); // const result = await netManager.callApi("Login", { // playerId, // playerName // }); // 模拟登录请求 await this.delay(500); const mockResult = { success: true, message: "登录成功", player: { id: playerId, name: playerName || `Player_${playerId}`, position: { x: 0, y: 0, z: 0 }, spawnPoint: { x: 0, y: 0, z: 0 }, hp: 100, maxHp: 100, isAlive: true, createdAt: Date.now(), lastLoginAt: Date.now() }, isNewPlayer: false }; console.log("[AppStatusLogin] 登录成功,玩家信息:", mockResult.player); // 2. 登录成功后直接进入游戏状态 this._fsm.changeState("Game", { player: mockResult.player, isNewPlayer: mockResult.isNewPlayer }); } catch (error) { console.error("[AppStatusLogin] 登录失败:", error); // TODO: 显示错误提示 } } /** * 延迟辅助函数 */ private delay(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)); } /** * 退出登录状态 */ onExit(): void { super.onExit(); console.log("[AppStatusLogin] 离开登录状态"); // 隐藏登录界面 const uiMgr = UIMgr.getInstance(); uiMgr.hide(UILogin); } }