diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx index f2b67f01e..ccc5f8ee1 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx @@ -1,8 +1,7 @@ import { Flex, Heading } from '@radix-ui/themes'; import { use } from 'react'; import { ProvisionButton } from '../../../../../../../components/ModuleButtons/ProvisionButton'; -import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableProvisionInclusivity'; -import { provisionDefinitions } from '../../../../../../../core/blitzkrieg/provisionDefinitions'; +import { availableProvisions } from '../../../../../../../core/blitzkrieg/availableProvisions'; import { useDuel } from '../../../../../../../stores/duel'; import { mutateTankopediaTemporary, @@ -11,17 +10,9 @@ import { import { ConfigurationChildWrapper } from './ConfigurationChildWrapper'; export function Provisions() { - const protagonist = useDuel((state) => state.protagonist!); - const awaitedProvisionDefinitions = use(provisionDefinitions); + const { tank, gun } = useDuel((state) => state.protagonist!); const provisions = useTankopediaTemporary((state) => state.provisions); - const provisionsList = Object.values(awaitedProvisionDefinitions).filter( - (provision) => - checkConsumableProvisionInclusivity( - provision, - protagonist.tank, - protagonist.gun, - ), - ); + const provisionsList = use(availableProvisions(tank, gun)); return ( @@ -37,9 +28,7 @@ export function Provisions() { first={index === 0} last={index === provisionsList.length - 1} rowChild - disabled={ - protagonist.tank.provisions === provisions.length && !selected - } + disabled={tank.provisions === provisions.length && !selected} provision={provision.id} selected={selected} onClick={() => { diff --git a/src/app/tools/tankopedia/[id]/page.tsx b/src/app/tools/tankopedia/[id]/page.tsx index 936ce286d..63d1d324a 100644 --- a/src/app/tools/tankopedia/[id]/page.tsx +++ b/src/app/tools/tankopedia/[id]/page.tsx @@ -3,6 +3,7 @@ import { Flex } from '@radix-ui/themes'; import { use, useEffect } from 'react'; import PageWrapper from '../../../../components/PageWrapper'; +import { availableProvisions } from '../../../../core/blitzkrieg/availableProvisions'; import { tankDefinitions } from '../../../../core/blitzkrieg/tankDefinitions'; import { useWideFormat } from '../../../../hooks/useWideFormat'; import { mutateDuel, useDuel } from '../../../../stores/duel'; @@ -20,6 +21,9 @@ import { Title } from './components/Title'; export default function Page({ params }: { params: { id: string } }) { const id = parseInt(params.id); const awaitedTankDefinitions = use(tankDefinitions); + const tank = awaitedTankDefinitions[id]; + const gun = tank.turrets.at(-1)!.guns.at(-1)!; + const provisionsList = use(availableProvisions(tank, gun)); const assigned = useDuel((state) => state.assigned); const wideFormat = useWideFormat(); @@ -27,13 +31,12 @@ export default function Page({ params }: { params: { id: string } }) { mutateDuel((draft) => { draft.assigned = true; draft.protagonist = { - tank: awaitedTankDefinitions[id], - engine: awaitedTankDefinitions[id].engines.at(-1)!, - turret: awaitedTankDefinitions[id].turrets.at(-1)!, - gun: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)!, - shell: awaitedTankDefinitions[id].turrets.at(-1)!.guns.at(-1)! - .shells[0], - track: awaitedTankDefinitions[id].tracks.at(-1)!, + tank, + engine: tank.engines.at(-1)!, + turret: tank.turrets.at(-1)!, + gun, + shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0], + track: tank.tracks.at(-1)!, }; draft.antagonist = { ...draft.protagonist }; }); @@ -42,8 +45,15 @@ export default function Page({ params }: { params: { id: string } }) { draft.model.pose.yaw = 0; draft.model.pose.pitch = 0; draft.consumables = []; - draft.provisions = []; + draft.provisions = provisionsList + .filter((provision) => provision.crew !== undefined) + .map((provision) => provision.id); draft.shot = undefined; + draft.equipmentMatrix = [ + [1, -1, -1], + [0, 0, 0], + [0, 0, 0], + ]; }); function handleKeyDown(event: KeyboardEvent) { diff --git a/src/core/blitzkrieg/availableProvisions.ts b/src/core/blitzkrieg/availableProvisions.ts new file mode 100644 index 000000000..b60e45f7c --- /dev/null +++ b/src/core/blitzkrieg/availableProvisions.ts @@ -0,0 +1,12 @@ +import { checkConsumableProvisionInclusivity } from './checkConsumableProvisionInclusivity'; +import { provisionDefinitions } from './provisionDefinitions'; +import { GunDefinition, TankDefinition } from './tankDefinitions'; + +export async function availableProvisions( + tank: TankDefinition, + gun: GunDefinition, +) { + return Object.values(await provisionDefinitions).filter((provision) => + checkConsumableProvisionInclusivity(provision, tank, gun), + ); +}