Files
healer-man/server/arena-simulation.d.mts
T
2026-09-05 21:27:30 -04:00

48 lines
1.3 KiB
TypeScript

import type {
ArenaAuthoritativeSnapshot,
ArenaCombatIntent,
ArenaResult,
ArenaRole,
ArenaStageManifest,
} from "../src/game/arenaTypes";
import type { ArenaBracket, ArenaMode, ArenaRuleset } from "../src/game/arenaRules";
export interface ArenaSimulationParticipant {
actorId: string;
accountId?: string | null;
characterId?: string | null;
name: string;
team: 0 | 1;
role: ArenaRole;
isBot: boolean;
disconnected?: boolean;
rating: number;
}
export interface ArenaSimulationOptions {
id: string;
stage: ArenaStageManifest;
bracket: ArenaBracket;
mode: ArenaMode;
ruleset: ArenaRuleset;
participants: readonly ArenaSimulationParticipant[];
random?: () => number;
startedAt?: number;
onSnapshot?: (snapshot: ArenaAuthoritativeSnapshot) => void;
onResult?: (result: Omit<ArenaResult, "ratingUpdates">) => void;
}
export declare const ARENA_TICK_RATE: 20;
export declare const ARENA_SNAPSHOT_RATE: 10;
export declare const ARENA_TICK_MS: 50;
export declare class ArenaSimulation {
constructor(options: ArenaSimulationOptions);
start(): this;
resetPreparationClock(startedAt?: number): boolean;
stop(): void;
step(): void;
snapshot(): ArenaAuthoritativeSnapshot;
receiveIntent(actorId: string, intent: ArenaCombatIntent): { accepted: boolean; reason?: string };
}