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 scaleMode Mapping
| Code | Alias | Zoom | Description |
|---|---|---|---|
MODE_1 | NANO | 2.5x | Most detailed view |
MODE_2 | MICRO | 1.5x | Detailed view |
MODE_3 | MESO | 0.8x | Medium view (human scale) |
MODE_4 | MACRO | 0.4x | Wide view (map) |
MODE_5 | MEGA | 0.3x | Maximum 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.0xExamples 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 overviewCode 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:
In configs - use
MODE_*typescriptconst config = { defaultMode: GameModeType.MODE_3, // Abstract };In gameplay - use aliases
typescriptif (mode === GameModeAlias.MICRO) { this.enableMicroManagement(); // Clear! }In UI - show both
typescript`Near View (MICRO)`;In logs - use aliases
typescriptconsole.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
- Game Modes - complete guide
- GameModeManager API
- GameMode model - see
src/core/models/GameMode.ts - Constants - see
src/core/config/constants.ts