Files
blitzkit/packages/website/src/stores/duel/index.ts
T
2025-09-02 16:24:13 -05:00

56 lines
1.4 KiB
TypeScript

import {
ModelDefinition,
type EngineDefinition,
type GunDefinition,
type ShellDefinition,
type TankDefinition,
type TrackDefinition,
type TurretDefinition,
} from "@blitzkit/core";
import { Varuna } from "varuna";
import { awaitableProvisionDefinitions } from "../../core/awaitables/provisionDefinitions";
import { tankToDuelMember } from "../../core/blitzkit/tankToDuelMember";
type EquipmentMatrixItem = -1 | 0 | 1;
type EquipmentMatrixRow = [
EquipmentMatrixItem,
EquipmentMatrixItem,
EquipmentMatrixItem,
];
export type EquipmentMatrix = [
EquipmentMatrixRow,
EquipmentMatrixRow,
EquipmentMatrixRow,
];
export interface DuelMember {
tank: TankDefinition;
engine: EngineDefinition;
turret: TurretDefinition;
gun: GunDefinition;
shell: ShellDefinition;
track: TrackDefinition;
equipmentMatrix: EquipmentMatrix;
consumables: number[];
provisions: number[];
camouflage: boolean;
cooldownBooster: number;
assaultDistance: number;
}
export interface DuelStore {
protagonist: DuelMember;
antagonist: DuelMember;
}
const provisionDefinitions = await awaitableProvisionDefinitions;
export const Duel = new Varuna<
DuelStore,
{ tank: TankDefinition; model: ModelDefinition }
>(({ tank, model }) => {
const protagonist = tankToDuelMember(tank, provisionDefinitions);
return { protagonist, antagonist: protagonist, model };
});