From 54e012f7368863cb7c81a9f188091bb5ed851d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 1 Apr 2024 19:05:55 -0500 Subject: [PATCH] feat: dropdown modules --- scripts/buildAssets/definitions.ts | 2 + .../Characteristics/components/Modules.tsx | 265 ++++++++++++------ .../ModuleButtons/TankComponentButton.tsx | 10 +- src/core/blitzkrieg/tankDefinitions/index.ts | 1 + 4 files changed, 189 insertions(+), 89 deletions(-) diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index d1b9a5eab..5635291fc 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -118,6 +118,7 @@ interface VehicleDefinitions { weight: number; terrainResistance: string; rotationSpeed: number; + userString: string; shotDispersionFactors: { vehicleMovement: number; vehicleRotation: number; @@ -566,6 +567,7 @@ export async function definitions(production: boolean) { tankDefinitions[tankId].tracks.push({ id: trackId, weight: track.weight, + name: strings[track.userString], traverseSpeed: track.rotationSpeed, dispersion: { move: track.shotDispersionFactors.vehicleMovement, diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx index ff1564892..780b66ac8 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Modules.tsx @@ -1,4 +1,5 @@ -import { Button, Flex, Heading } from '@radix-ui/themes'; +import { Button, DropdownMenu, Flex, Heading } from '@radix-ui/themes'; +import { useState } from 'react'; import { ModuleButton } from '../../../../../../../components/ModuleButtons/ModuleButton'; import { TIER_ROMAN_NUMERALS } from '../../../../../../../core/blitzkrieg/tankDefinitions/constants'; import { mutateDuel, useDuel } from '../../../../../../../stores/duel'; @@ -12,6 +13,10 @@ export function Modules() { protagonist.tank.turrets[0].guns.length > 1 || protagonist.tank.engines.length > 1 || protagonist.tank.tracks.length > 1; + const [turretMenuOpen, setTurretMenuOpen] = useState(false); + const [gunMenuOpen, setGunMenuOpen] = useState(false); + const [engineMenuOpen, setEngineMenuOpen] = useState(false); + const [trackMenuOpen, setTrackMenuOpen] = useState(false); return ( @@ -59,96 +64,180 @@ export function Modules() { )} - - - {protagonist.tank.turrets.map((turret, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.turret = turret; - draft.protagonist!.gun = turret.guns.at(-1)!; - draft.protagonist!.shell = turret.guns.at(-1)!.shells[0]; - }); - mutateTankopediaTemporary((draft) => { - draft.shot = undefined; - }); - }} - /> - ); - })} - + + setTurretMenuOpen(true)} + /> - - {protagonist.turret.guns.map((gun, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.gun = gun; - draft.protagonist!.shell = gun.shells[0]; - }); - }} - /> - ); - })} - + + +
+ - - {protagonist.tank.engines.map((engine, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.engine = engine; - }); - }} - /> - ); - })} - + + + {[...protagonist.tank.turrets].reverse().map((turret) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.turret = turret; + draft.protagonist!.gun = turret.guns.at(-1)!; + draft.protagonist!.shell = + turret.guns.at(-1)!.shells[0]; + }); + mutateTankopediaTemporary((draft) => { + draft.shot = undefined; + }); + setTurretMenuOpen(false); + }} + > + {' '} + {turret.name} + + ); + })} + + + - - {protagonist.tank.tracks.map((track, index) => { - return ( - { - mutateDuel((draft) => { - draft.protagonist!.track = track; - }); - }} - /> - ); - })} - + setGunMenuOpen(true)} + /> + + + +
+ + + + + {[...protagonist.turret.guns].reverse().map((gun) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.gun = gun; + draft.protagonist!.shell = gun.shells[0]; + }); + }} + > + {' '} + {gun.name} + + ); + })} + + + + + setEngineMenuOpen(true)} + /> + + + +
+ + + + + {[...protagonist.tank.engines].reverse().map((engine) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.engine = engine; + }); + }} + > + {' '} + {engine.name} + + ); + })} + + + + + setTrackMenuOpen(true)} + /> + + + +
+ + + + + {[...protagonist.tank.tracks].reverse().map((track) => { + return ( + { + mutateDuel((draft) => { + draft.protagonist!.track = track; + }); + }} + > + {' '} + {track.name} + + ); + })} + + + ); diff --git a/src/components/ModuleButtons/TankComponentButton.tsx b/src/components/ModuleButtons/TankComponentButton.tsx index 676de80e7..95efbb659 100644 --- a/src/components/ModuleButtons/TankComponentButton.tsx +++ b/src/components/ModuleButtons/TankComponentButton.tsx @@ -15,6 +15,7 @@ export interface TankComponentButtonProps } export function TankComponentButton({ + variant, selected, first = false, last = false, @@ -23,13 +24,15 @@ export function TankComponentButton({ special, children, banner, + disabled, + style, ...props }: TankComponentButtonProps) { return (