Skip to content

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 scene
  • viewportManager - ViewportManager instance

Example

typescript
const gameModeManager = new GameModeManager(this, viewportManager);

Methods

init()

Initialize with automatic mode detection.

typescript
init(): void

Example

typescript
gameModeManager.init();
// Automatically detects mode based on viewport

getCurrentMode()

Get current mode.

typescript
getCurrentMode(): GameModeType

Returns

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"
): void

Parameters

  • mode - new mode
  • reason - reason for change (optional)

Example

typescript
// Set MODE_3 manually
gameModeManager.setMode(GameModeType.MODE_3, "manual");

getConfig()

Get current mode configuration.

typescript
getConfig(): GameModeConfig

Returns

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/false

can(action)

Check if action is available in current mode.

typescript
can(action: keyof GameModeFlags): boolean

Parameters

  • 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): void

Parameters

  • 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(): void

Example

typescript
// MODE_1 → MODE_2 → MODE_3 → MODE_4 → MODE_5 → MODE_1
gameModeManager.cycleMode();

cycleModeReverse()

Switch to previous mode.

typescript
cycleModeReverse(): void

Example

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): void

Parameters

  • 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(): UIConfig

Returns

UI configuration (iconSize, showAuxiliaryPanel, etc.)


getGameplayConfig()

Get gameplay configuration for current mode.

typescript
getGameplayConfig(): GameplayConfig

Returns

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

MIT Licensed