GameModeManager
Game mode management system with automatic adaptation.
Import
typescript
import { GameModeManager } from "@systems/GameModeManager";
import { GameModeType } from "@/models/GameMode";Constructor
typescript
constructor(scene: Phaser.Scene, viewportManager: ViewportManager)Parameters
scene- Phaser sceneviewportManager- ViewportManager instance
Example
typescript
const gameModeManager = new GameModeManager(this, viewportManager);Methods
init()
Initialize with automatic mode detection.
typescript
init(): voidExample
typescript
gameModeManager.init();
// Automatically detects mode based on viewportgetCurrentMode()
Get current mode.
typescript
getCurrentMode(): GameModeTypeReturns
Current GameModeType (MODE_1, MODE_2, etc.)
Example
typescript
const mode = gameModeManager.getCurrentMode();
console.log(`Current mode: ${mode}`);setMode(mode, reason?)
Set mode manually.
typescript
setMode(
mode: GameModeType,
reason: "auto" | "manual" | "viewport_change" = "manual"
): voidParameters
mode- new modereason- reason for change (optional)
Example
typescript
// Set MODE_3 manually
gameModeManager.setMode(GameModeType.MODE_3, "manual");getConfig()
Get current mode configuration.
typescript
getConfig(): GameModeConfigReturns
Full mode configuration with zoom, timeScale, flags, ui, gameplay.
Example
typescript
const config = gameModeManager.getConfig();
console.log(`Zoom: ${config.cameraZoom}x`);
console.log(`Time: ${config.timeScale}x`);
console.log(config.flags.detailedInteraction); // true/falsecan(action)
Check if action is available in current mode.
typescript
can(action: keyof GameModeFlags): booleanParameters
action- flag name
Returns
true if action is available
Example
typescript
if (gameModeManager.can("specialAbilities")) {
this.showMagicButton();
}
if (gameModeManager.can("detailedInteraction")) {
this.enableDetailedControls();
}setAutoMode(enabled)
Enable/disable automatic mode detection.
typescript
setAutoMode(enabled: boolean): voidParameters
enabled- true to enable, false to disable
Example
typescript
// Enable auto mode
gameModeManager.setAutoMode(true);
// Disable - mode is fixed
gameModeManager.setAutoMode(false);cycleMode()
Switch to next mode.
typescript
cycleMode(): voidExample
typescript
// MODE_1 → MODE_2 → MODE_3 → MODE_4 → MODE_5 → MODE_1
gameModeManager.cycleMode();cycleModeReverse()
Switch to previous mode.
typescript
cycleModeReverse(): voidExample
typescript
// MODE_5 → MODE_4 → MODE_3 → MODE_2 → MODE_1 → MODE_5
gameModeManager.cycleModeReverse();onModeChange(callback)
Subscribe to mode changes.
typescript
onModeChange(callback: (event: GameModeChangeEvent) => void): voidParameters
callback- function called on mode change
Example
typescript
gameModeManager.onModeChange((event) => {
console.log(`Mode changed: ${event.oldMode} → ${event.newMode}`);
console.log(`Reason: ${event.reason}`);
this.updateUI();
this.updateGameplay();
});getUIConfig()
Get UI configuration for current mode.
typescript
getUIConfig(): UIConfigReturns
UI configuration (iconSize, showAuxiliaryPanel, etc.)
getGameplayConfig()
Get gameplay configuration for current mode.
typescript
getGameplayConfig(): GameplayConfigReturns
Gameplay configuration (maxVisibleElements, processingDetail, etc.)
Types
GameModeType
typescript
enum GameModeType {
MODE_1 = "mode_1",
MODE_2 = "mode_2",
MODE_3 = "mode_3",
MODE_4 = "mode_4",
MODE_5 = "mode_5",
}GameModeFlags
typescript
interface GameModeFlags {
detailedInteraction: boolean;
tacticalControl: boolean;
strategicControl: boolean;
globalControl: boolean;
environmentManipulation: boolean;
specialAbilities: boolean;
showDetails: boolean;
showTacticalInfo: boolean;
showStrategicMap: boolean;
canPause: boolean;
canSlowTime: boolean;
automation: boolean;
}GameModeChangeEvent
typescript
interface GameModeChangeEvent {
oldMode: GameModeType;
newMode: GameModeType;
reason: "auto" | "manual" | "viewport_change";
timestamp: number;
}Complete Example
typescript
export class GameScene extends Phaser.Scene {
private viewportManager!: ViewportManager;
private gameModeManager!: GameModeManager;
create() {
// 1. Create ViewportManager
this.viewportManager = new ViewportManager(this);
this.viewportManager.init((width, height) => {
console.log(`Viewport: ${width}x${height}`);
});
// 2. Create GameModeManager
this.gameModeManager = new GameModeManager(this, this.viewportManager);
this.gameModeManager.init();
// 3. Subscribe to changes
this.gameModeManager.onModeChange((event) => {
const config = this.gameModeManager.getConfig();
// Apply settings
this.applyModeSettings(config);
// Update UI
this.updateUI(config);
});
// 4. Use flags
if (this.gameModeManager.can("specialAbilities")) {
this.showAbilitiesPanel();
}
}
}See Also
- Game Modes - complete guide
- ViewportManager - adaptive viewport