108 lines
2.5 KiB
TypeScript
108 lines
2.5 KiB
TypeScript
import { FSM } from "../../Framework/FSM/FSM";
|
|
import { AppStatusBoot } from "./AppStatusBoot";
|
|
import { AppStatusLogin } from "./AppStatusLogin";
|
|
import { AppStatusGame } from "./AppStatusGame";
|
|
|
|
/**
|
|
* 应用状态管理器
|
|
* 职责:
|
|
* - 管理应用的整体状态流转
|
|
* - 提供单例访问
|
|
* - 初始化所有应用状态
|
|
*
|
|
* 状态流程: Boot -> Login -> Game
|
|
*/
|
|
export class AppStatusManager {
|
|
private static _instance: AppStatusManager | null = null;
|
|
private _fsm: FSM;
|
|
|
|
/**
|
|
* 构造函数(私有)
|
|
*/
|
|
private constructor() {
|
|
this._fsm = new FSM();
|
|
this.initStates();
|
|
}
|
|
|
|
/**
|
|
* 获取单例
|
|
*/
|
|
static getInstance(): AppStatusManager {
|
|
if (!this._instance) {
|
|
this._instance = new AppStatusManager();
|
|
}
|
|
return this._instance;
|
|
}
|
|
|
|
/**
|
|
* 初始化所有状态
|
|
*/
|
|
private initStates(): void {
|
|
console.log("[AppStatusManager] 初始化应用状态...");
|
|
|
|
// 添加应用状态: Boot -> Login -> Game
|
|
this._fsm.addState(new AppStatusBoot(this._fsm));
|
|
this._fsm.addState(new AppStatusLogin(this._fsm));
|
|
this._fsm.addState(new AppStatusGame(this._fsm));
|
|
|
|
console.log("[AppStatusManager] 应用状态初始化完成");
|
|
}
|
|
|
|
/**
|
|
* 启动应用
|
|
* 从Boot状态开始
|
|
*/
|
|
start(): void {
|
|
console.log("[AppStatusManager] 启动应用...");
|
|
this._fsm.changeState("Boot");
|
|
}
|
|
|
|
/**
|
|
* 切换状态
|
|
* @param stateName 状态名称
|
|
* @param params 可选参数
|
|
*/
|
|
changeState(stateName: string, params?: any): void {
|
|
this._fsm.changeState(stateName, params);
|
|
}
|
|
|
|
/**
|
|
* 获取当前状态名称
|
|
*/
|
|
getCurrentStateName(): string | null {
|
|
return this._fsm.getCurrentStateName();
|
|
}
|
|
|
|
/**
|
|
* 获取当前状态
|
|
*/
|
|
getCurrentState(): any {
|
|
return this._fsm.getCurrentState();
|
|
}
|
|
|
|
/**
|
|
* 更新状态机(在主循环中调用)
|
|
* @param dt 距离上一帧的时间增量(秒)
|
|
*/
|
|
update(dt: number): void {
|
|
this._fsm.update(dt);
|
|
}
|
|
|
|
/**
|
|
* 获取状态机实例
|
|
* 用于高级操作
|
|
*/
|
|
getFSM(): FSM {
|
|
return this._fsm;
|
|
}
|
|
|
|
/**
|
|
* 销毁管理器
|
|
*/
|
|
destroy(): void {
|
|
console.log("[AppStatusManager] 销毁应用状态管理器");
|
|
this._fsm.clear();
|
|
AppStatusManager._instance = null;
|
|
}
|
|
}
|