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 (