Spaces:
Running
Running
| import { InputMode } from "./InputMode"; | |
| class ModeManager { | |
| private static _instance: ModeManager; | |
| private static _modeFactories: Map<string, () => InputMode> = new Map(); | |
| private static _currentMode: InputMode | null = null; | |
| public static get instance(): ModeManager { | |
| if (!ModeManager._instance) { | |
| ModeManager._instance = new ModeManager(); | |
| } | |
| return ModeManager._instance; | |
| } | |
| public static registerMode(name: string, factory: () => InputMode) { | |
| this._modeFactories.set(name, factory); | |
| } | |
| public static enterMode(name: string) { | |
| const factory = this._modeFactories.get(name); | |
| if (factory) { | |
| this._currentMode?.exit(); | |
| this._currentMode = factory(); | |
| } else { | |
| console.error(`No mode registered with name ${name}.`); | |
| } | |
| } | |
| public static exitCurrentMode() { | |
| this._currentMode?.exit(); | |
| this._currentMode = null; | |
| } | |
| } | |
| export { ModeManager }; | |