Skip to content

Mode Aliases

Two Ways to Reference Modes

Abstract (MODE_1-5)

Use in code for flexibility:

typescript
gameModeManager.setMode(GameModeType.MODE_3);

Greek Aliases (NANO/MICRO/MESO/MACRO/MEGA)

Use for readability:

typescript
import { GameModeAlias } from "@/models/GameMode";

gameModeManager.setMode(GameModeAlias.MACRO);

Scale System

Greek Scale Prefixes:

NANO  (νανο)  →  10⁻⁹  →  Nano scale
MICRO (μικρο) →  10⁻⁶  →  Micro scale
MESO  (μεσο)  →  10⁰   →  Meso scale (human)
MACRO (μακρο) →  10³   →  Macro scale
MEGA  (μεγα)  →  10⁶   →  Mega scale

Mode Mapping

CodeAliasZoomDescription
MODE_1NANO2.5xMost detailed view
MODE_2MICRO1.5xDetailed view
MODE_3MESO0.8xMedium view (human scale)
MODE_4MACRO0.4xWide view (map)
MODE_5MEGA0.3xMaximum wide (satellite)

Usage Examples

Option 1: Abstract (flexible)

typescript
// Good for configurable systems
const currentMode = GameModeType.MODE_3;

if (currentMode === GameModeType.MODE_1) {
  // MODE_1 can be anything
}

Option 2: With Aliases (readable)

typescript
import { GameModeAlias } from "@/models/GameMode";

// Immediately clear it's macro scale!
gameModeManager.setMode(GameModeAlias.MACRO);

// Check
if (currentMode === GameModeAlias.MICRO) {
  console.log("Micro scale active");
}

Option 3: Combined

typescript
// Store as MODE_*, use as alias
const config = {
  defaultMode: GameModeType.MODE_3, // Flexible
};

// Show with alias in UI
const alias = getModeAlias(config.defaultMode);
console.log(alias); // "MESO"

API

GameModeAlias

Object with alias constants:

typescript
export const GameModeAlias = {
  NANO: GameModeType.MODE_1,
  MICRO: GameModeType.MODE_2,
  MESO: GameModeType.MODE_3,
  MACRO: GameModeType.MODE_4,
  MEGA: GameModeType.MODE_5,
} as const;

getModeAlias(mode)

Get text alias by type:

typescript
getModeAlias(GameModeType.MODE_3);
// → "MESO"

getModeAlias(GameModeType.MODE_1);
// → "NANO"

When to Use What?

Use MODE_1-5 when:

  • Writing universal code
  • Configuring systems
  • Don't want to tie to specific terms
  • Modes can mean anything
typescript
// Universal
function handleMode(mode: GameModeType) {
  const config = GAME_MODES[mode];
  // Works for any gameplay
}

Use Aliases when:

  • Writing specific gameplay code
  • Want readability
  • Using scale mechanics (zoom-based)
  • Communicating with team (clearer "MACRO" than "MODE_4")
typescript
// Readable and clear
if (mode === GameModeAlias.NANO) {
  // Obviously the closest scale
  showDetailedTextures();
}

In UI

Display Mode with Alias:

typescript
const config = gameModeManager.getConfig();
const alias = getModeAlias(gameModeManager.getCurrentMode());

// Show both variants
console.log(`${config.name} (${alias})`);
// → "Near View (MICRO)"

In Console:

typescript
Mode changed: MODE_2 (MICRO) → MODE_4 (MACRO)
Applied MACRO scale settings...
   Zoom: 0.4x
   Time: 5.0x

Examples for Different Genres

God Game (Populous-style)

typescript
// Modes make sense in scale context
NANO:  Individual person level (micro life)
MICRO: Village level (settlement)
MESO:  City level (management)
MACRO: Region level (kingdom)
MEGA:  World level (god view)

Strategy Game

typescript
NANO:  Control individual unit
MICRO: Control squad
MESO:  Control army
MACRO: Strategic map
MEGA:  Global strategy (diplomacy, trade)

Sandbox / Builder

typescript
NANO:  Detailed voxel/pixel editing
MICRO: Object editing
MESO:  Scene editing
MACRO: Level overview
MEGA:  Entire project overview

Code Examples

Basic Example:

typescript
import { GameModeType, GameModeAlias, getModeAlias } from "@/models/GameMode";

// Option 1: Abstract
gameModeManager.setMode(GameModeType.MODE_3);

// Option 2: With alias (same thing!)
gameModeManager.setMode(GameModeAlias.MESO);

// Both work identically!

Advanced Example:

typescript
class GameController {
  switchToMicroManagement() {
    // Use clear alias
    this.gameModeManager.setMode(GameModeAlias.MICRO);

    console.log("Switched to micro scale");
    console.log("Now controlling individual units");
  }

  switchToGodView() {
    // Clear it's maximum scale
    this.gameModeManager.setMode(GameModeAlias.MEGA);

    console.log("Switched to mega scale");
    console.log("God view enabled");
  }

  // Get current alias for logs
  logCurrentScale() {
    const mode = this.gameModeManager.getCurrentMode();
    const alias = getModeAlias(mode);

    console.log(`Current scale: ${alias}`);
    // → "Current scale: MESO"
  }
}

Recommendations

Best Practices:

  1. In configs - use MODE_*

    typescript
    const config = {
      defaultMode: GameModeType.MODE_3, // Abstract
    };
  2. In gameplay - use aliases

    typescript
    if (mode === GameModeAlias.MICRO) {
      this.enableMicroManagement(); // Clear!
    }
  3. In UI - show both

    typescript
    `Near View (MICRO)`;
  4. In logs - use aliases

    typescript
    console.log(`Switched to ${getModeAlias(mode)} scale`);

Terminology

Established Terms:

  • Nano - very small (nanoparticles)
  • Micro - small (microorganisms, micromanagement)
  • Meso - medium (mesoscale in meteorology)
  • Macro - large (macroeconomics, macro photography)
  • Mega - very large (megacity, megaprojects)

In Games:

  • Micromanagement - detailed unit control (StarCraft, WarCraft)
  • Macro - strategic management (Civilization, Total War)
  • Meso scale - medium scale between micro and macro

Quick Start

bash
pnpm dev

# In game press TAB several times
# Top-right you'll see:

CLOSE VIEW (NANO)
 TAB
NEAR VIEW (MICRO)
 TAB
MID VIEW (MESO)
 TAB
FAR VIEW (MACRO)
 TAB
DISTANT VIEW (MEGA)

Summary

╔══════════════════════════════════════════════════════╗
║                                                      ║
║  TWO WAYS - ONE SYSTEM:                             ║
║                                                      ║
║  Abstract:       MODE_1, MODE_2, MODE_3 ...         ║
║  Aliases:        NANO, MICRO, MESO, MACRO, MEGA     ║
║                                                      ║
║  USE WHATEVER IS MORE CONVENIENT!                   ║
║                                                      ║
║  In code:        GameModeType.MODE_3                ║
║  Or:             GameModeAlias.MESO                 ║
║                                                      ║
║  Result:         IDENTICAL                          ║
║                                                      ║
╚══════════════════════════════════════════════════════╝

See Also

MIT Licensed