From 56a09536cd3d2871f7596694ef387ecd27731d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 2 Jan 2026 12:09:23 -0600 Subject: [PATCH] fix: use roles --- .../src/components/ConsumablesManager.tsx | 8 ++-- .../src/components/ProvisionsManager.tsx | 24 ++++++---- .../components/Tankopedia/GameModeSection.tsx | 45 ++++++++++--------- .../website/src/core/blitzkit/filterTank.ts | 26 ++++------- 4 files changed, 51 insertions(+), 52 deletions(-) diff --git a/packages/website/src/components/ConsumablesManager.tsx b/packages/website/src/components/ConsumablesManager.tsx index 932f4d5cf..8ddff5c06 100644 --- a/packages/website/src/components/ConsumablesManager.tsx +++ b/packages/website/src/components/ConsumablesManager.tsx @@ -1,6 +1,6 @@ -import type { Consumable } from '@blitzkit/core'; -import { Flex, type FlexProps } from '@radix-ui/themes'; -import { ConsumableButton } from './ModuleButtons/ConsumableButton'; +import type { Consumable } from "@blitzkit/core"; +import { Flex, type FlexProps } from "@radix-ui/themes"; +import { ConsumableButton } from "./ModuleButtons/ConsumableButton"; type ConsumablesManagerProps = FlexProps & { consumables: Consumable[]; @@ -27,6 +27,8 @@ export function ConsumablesManager({ return ( {consumables.map((consumable) => { + if (consumable.game_mode_exclusive) return null; + const isSelected = selected.some((id) => id === consumable.id); return ( diff --git a/packages/website/src/components/ProvisionsManager.tsx b/packages/website/src/components/ProvisionsManager.tsx index 4a8a4b740..7ede38889 100644 --- a/packages/website/src/components/ProvisionsManager.tsx +++ b/packages/website/src/components/ProvisionsManager.tsx @@ -1,5 +1,6 @@ -import { Flex } from '@radix-ui/themes'; -import { ProvisionButton } from './ModuleButtons/ProvisionButton'; +import { Flex } from "@radix-ui/themes"; +import { awaitableProvisionDefinitions } from "../core/awaitables/provisionDefinitions"; +import { ProvisionButton } from "./ModuleButtons/ProvisionButton"; interface ProvisionsManagerProps { provisions: number[]; @@ -8,6 +9,8 @@ interface ProvisionsManagerProps { onChange?: (provisions: number[]) => void; } +const provisionDefinitions = await awaitableProvisionDefinitions; + export function ProvisionsManager({ provisions, selected, @@ -15,15 +18,18 @@ export function ProvisionsManager({ disabled, }: ProvisionsManagerProps) { return ( - - {provisions.map((provision) => { - const isSelected = selected.includes(provision); + + {provisions.map((id) => { + const isSelected = selected.includes(id); + const provision = provisionDefinitions.provisions[id]; + + if (provision.game_mode_exclusive) return null; return ( { if (!onChange) return; @@ -31,9 +37,9 @@ export function ProvisionsManager({ const draft = [...selected]; if (isSelected) { - draft.splice(draft.indexOf(provision), 1); + draft.splice(draft.indexOf(id), 1); } else { - draft.push(provision); + draft.push(id); } onChange(draft); diff --git a/packages/website/src/components/Tankopedia/GameModeSection.tsx b/packages/website/src/components/Tankopedia/GameModeSection.tsx index 0c7e48196..b45b5b2aa 100644 --- a/packages/website/src/components/Tankopedia/GameModeSection.tsx +++ b/packages/website/src/components/Tankopedia/GameModeSection.tsx @@ -1,10 +1,10 @@ -import { asset } from '@blitzkit/core'; -import { Box, Flex, Heading, Text } from '@radix-ui/themes'; -import { awaitableConsumableDefinitions } from '../../core/awaitables/consumableDefinitions'; -import { awaitableGameDefinitions } from '../../core/awaitables/gameDefinitions'; -import { awaitableProvisionDefinitions } from '../../core/awaitables/provisionDefinitions'; -import { useLocale } from '../../hooks/useLocale'; -import { Duel } from '../../stores/duel'; +import { asset } from "@blitzkit/core"; +import { Box, Flex, Heading, Text } from "@radix-ui/themes"; +import { awaitableConsumableDefinitions } from "../../core/awaitables/consumableDefinitions"; +import { awaitableGameDefinitions } from "../../core/awaitables/gameDefinitions"; +import { awaitableProvisionDefinitions } from "../../core/awaitables/provisionDefinitions"; +import { useLocale } from "../../hooks/useLocale"; +import { Duel } from "../../stores/duel"; const [gameDefinitions, consumableDefinitions, provisionDefinitions] = await Promise.all([ @@ -39,22 +39,22 @@ export function GameModeSection() { overflow="hidden" direction="column" style={{ - borderRadius: 'var(--radius-3)', + borderRadius: "var(--radius-3)", background: `url(${asset( - `icons/game_mode_banners/${id}.webp`, + `icons/game_mode_banners/${id}.webp` )})`, - backgroundSize: 'cover', - backgroundPosition: 'center', + backgroundSize: "cover", + backgroundPosition: "center", }} > @@ -64,8 +64,8 @@ export function GameModeSection() { height="98px" flexShrink="0" style={{ - backdropFilter: 'blur(4rem)', - WebkitBackdropFilter: 'blur(4rem)', + backdropFilter: "blur(4rem)", + WebkitBackdropFilter: "blur(4rem)", }} align="center" justify="center" @@ -83,9 +83,9 @@ export function GameModeSection() { {unwrap(provisions.name)} ); })} + {gameDefinitions.roles[value].consumables.map((id) => { const consumable = consumableDefinitions.consumables[id]; @@ -103,9 +104,9 @@ export function GameModeSection() { {unwrap(consumable.name)} index); const consumableDefinitions = await awaitableConsumableDefinitions; const provisionDefinitions = await awaitableProvisionDefinitions; +const gameDefinitions = await awaitableGameDefinitions; export async function filterTank( filters: TankFilters, @@ -72,27 +74,15 @@ export async function filterTank( ) )) && (filters.abilities.length === 0 || - filters.abilities.every((ability) => - tank.turrets.some((turret) => - turret.guns.some((gun) => - checkConsumableProvisionInclusivity( - consumableDefinitions.consumables[ability], - tank, - gun - ) - ) + Object.values(tank.roles).some((id) => + gameDefinitions.roles[id as unknown as number].consumables.some( + (consumable) => filters.abilities.includes(consumable) ) )) && (filters.powers.length === 0 || - filters.powers.every((power) => - tank.turrets.some((turret) => - turret.guns.some((gun) => - checkConsumableProvisionInclusivity( - provisionDefinitions.provisions[power], - tank, - gun - ) - ) + Object.values(tank.roles).some((id) => + gameDefinitions.roles[id as unknown as number].provisions.some( + (consumable) => filters.powers.includes(consumable) ) )) );