Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x 8x | // Core game state and flow management
import { GameMode, KoreanText } from "@/types";
import type { PlayerState } from "./player";
// Match configuration
export interface MatchConfig {
readonly mode: GameMode;
readonly rounds: number;
readonly roundDuration: number; // seconds
readonly player1Archetype: string;
readonly player2Archetype: string;
readonly stage: string;
readonly difficulty?: "easy" | "medium" | "hard" | "expert";
}
// Game event system
export interface GameEvent {
readonly id: string;
readonly type: GameEventType;
readonly timestamp: number;
readonly playerId?: string;
readonly data: Record<string, any>; // Fix: Keep consistent type
readonly message?: KoreanText;
}
// Game event types
export enum GameEventType {
GAME_START = "game_start",
ROUND_START = "round_start",
ROUND_END = "round_end",
MATCH_END = "match_end",
PLAYER_ATTACK = "player_attack",
PLAYER_HIT = "player_hit",
STANCE_CHANGE = "stance_change",
TECHNIQUE_EXECUTE = "technique_execute",
VITAL_POINT_HIT = "vital_point_hit",
STATUS_EFFECT = "status_effect",
PAUSE_TOGGLE = "pause_toggle",
ERROR = "error",
}
// Game session interface
export interface GameSession {
readonly id: string;
readonly gameMode: GameMode;
readonly players: readonly [PlayerState, PlayerState];
readonly currentRound: number;
readonly maxRounds: number;
readonly roundTimeLimit: number;
readonly timeRemaining: number;
readonly isPaused: boolean;
readonly isGameOver: boolean;
readonly winner: PlayerState | null;
}
// Game configuration
export interface GameConfig {
readonly maxHealth: number;
readonly maxKi: number;
readonly maxStamina: number;
readonly roundDuration: number;
readonly maxRounds: number;
readonly difficulty: "beginner" | "intermediate" | "expert" | "master";
readonly enableVitalPoints: boolean;
readonly enableStatusEffects: boolean;
readonly allowArchetypeSwitching: boolean;
}
// Game save data
export interface GameSaveData {
readonly version: string;
readonly playerId: string;
readonly playerProgress: {
readonly archetypeExperience: Record<string, number>;
readonly unlockedTechniques: readonly string[];
readonly achievements: readonly string[];
};
readonly settings: {
readonly volume: number;
readonly difficulty: string;
readonly controls: Record<string, string>;
};
readonly statistics: {
readonly totalMatches: number;
readonly wins: number;
readonly losses: number;
readonly favoriteArchetype: string;
};
}
|