import { TIER_ROMAN_NUMERALS } from "@blitzkit/core"; import type { EngineDefinition, GunDefinition, ShellDefinition, TankDefinition, TrackDefinition, TurretDefinition, } from "@blitzkit/protos"; import { DropdownMenu, Flex } from "@radix-ui/themes"; import { useState } from "react"; import { useLocale } from "../hooks/useLocale"; import { ModuleButton } from "./ModuleButtons/ModuleButton"; interface ModuleManagerProps { tank: TankDefinition; turret: TurretDefinition; gun: GunDefinition; shell: ShellDefinition; engine: EngineDefinition; track: TrackDefinition; onChange?: (modules: { turret: TurretDefinition; gun: GunDefinition; engine: EngineDefinition; track: TrackDefinition; }) => void; } export function ModuleManager({ tank, onChange, ...modules }: ModuleManagerProps) { const [turretMenuOpen, setTurretMenuOpen] = useState(false); const [gunMenuOpen, setGunMenuOpen] = useState(false); const [engineMenuOpen, setEngineMenuOpen] = useState(false); const [trackMenuOpen, setTrackMenuOpen] = useState(false); const { unwrap } = useLocale(); return ( setTurretMenuOpen(true)} />
{[...tank.turrets].reverse().map((turret) => { return ( { const draft = { ...modules }; draft.turret = turret; draft.gun = draft.turret.guns.at(-1)!; draft.shell = draft.gun.shells[0]; onChange?.(draft); setTurretMenuOpen(false); }} > {" "} {unwrap(turret.name!)} ); })} setGunMenuOpen(true)} />
{[...modules.turret.guns].reverse().map((gun) => { return ( { const draft = { ...modules }; draft.gun = gun; draft.shell = draft.gun.shells[0]; onChange?.(draft); setGunMenuOpen(false); }} > {" "} {unwrap(gun.name!)} ); })} setEngineMenuOpen(true)} />
{[...tank.engines].reverse().map((engine) => { return ( { const draft = { ...modules }; draft.engine = engine; onChange?.(draft); setEngineMenuOpen(false); }} > {" "} {unwrap(engine.name!)} ); })} setTrackMenuOpen(true)} />
{[...tank.tracks].reverse().map((track) => { return ( { const draft = { ...modules }; draft.track = track; onChange?.(draft); setTrackMenuOpen(false); }} > {" "} {unwrap(track.name!)} ); })} ); }