From 850308b2aca2f630cea5c6f27d15ae521350a444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 6 Apr 2024 18:37:21 -0500 Subject: [PATCH] feat: provision assignment --- .../tools/compare/components/TankControl.tsx | 3 ++ src/app/tools/compare/page.tsx | 13 ++++++- src/core/blitzkrieg/assignDuelMember.ts | 38 ++----------------- src/core/blitzkrieg/tankToCompareMember.ts | 5 ++- src/core/blitzkrieg/tankToDuelMember.ts | 19 ++++++++-- 5 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/app/tools/compare/components/TankControl.tsx b/src/app/tools/compare/components/TankControl.tsx index ffe5c213c..c66a6b3f3 100644 --- a/src/app/tools/compare/components/TankControl.tsx +++ b/src/app/tools/compare/components/TankControl.tsx @@ -6,6 +6,7 @@ import { } from '@radix-ui/react-icons'; import { Dialog, Flex, IconButton } from '@radix-ui/themes'; import { use, useState } from 'react'; +import { provisionDefinitions } from '../../../../core/blitzkrieg/provisionDefinitions'; import { skillDefinitions } from '../../../../core/blitzkrieg/skillDefinitions'; import { TankDefinition } from '../../../../core/blitzkrieg/tankDefinitions'; import { tankToCompareMember } from '../../../../core/blitzkrieg/tankToCompareMember'; @@ -22,6 +23,7 @@ interface TankControlProps { } export function TankControl({ index, tank, members }: TankControlProps) { + const awaitedProvisionDefinitions = use(provisionDefinitions); const awaitedSkillDefinitions = use(skillDefinitions); const [switchTankDialogOpen, setSwitchTankDialogOpen] = useState(false); @@ -77,6 +79,7 @@ export function TankControl({ index, tank, members }: TankControlProps) { mutateCompareTemporary((draft) => { draft.members[index] = tankToCompareMember( tank, + awaitedProvisionDefinitions, awaitedSkillDefinitions, ); draft.sorting = undefined; diff --git a/src/app/tools/compare/page.tsx b/src/app/tools/compare/page.tsx index 24e78539e..c45b1a4a2 100644 --- a/src/app/tools/compare/page.tsx +++ b/src/app/tools/compare/page.tsx @@ -110,6 +110,7 @@ export default function Page() { .map((id) => tankToCompareMember( awaitedTankDefinitions[id], + awaitedProvisionDefinitions, awaitedSkillDefinitions, ), ); @@ -317,7 +318,11 @@ export default function Page() { onSelect={(tank) => { mutateCompareTemporary((draft) => { draft.members.push( - tankToCompareMember(tank, awaitedSkillDefinitions), + tankToCompareMember( + tank, + awaitedProvisionDefinitions, + awaitedSkillDefinitions, + ), ); draft.sorting = undefined; }); @@ -327,7 +332,11 @@ export default function Page() { mutateCompareTemporary((draft) => { draft.members.push( ...tanks.map((tank) => - tankToCompareMember(tank, awaitedSkillDefinitions), + tankToCompareMember( + tank, + awaitedProvisionDefinitions, + awaitedSkillDefinitions, + ), ), ); draft.sorting = undefined; diff --git a/src/core/blitzkrieg/assignDuelMember.ts b/src/core/blitzkrieg/assignDuelMember.ts index 1b201a2b1..377dd0da9 100644 --- a/src/core/blitzkrieg/assignDuelMember.ts +++ b/src/core/blitzkrieg/assignDuelMember.ts @@ -1,10 +1,7 @@ -import { degToRad } from 'three/src/math/MathUtils'; -import { DuelMember, mutateDuel } from '../../stores/duel'; -import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants'; -import { availableProvisions } from './availableProvisions'; -import { modelDefinitions } from './modelDefinitions'; +import { mutateDuel } from '../../stores/duel'; import { provisionDefinitions } from './provisionDefinitions'; import { tankDefinitions } from './tankDefinitions'; +import { tankToDuelMember } from './tankToDuelMember'; export async function assignDuelMember( type: 'antagonist' | 'protagonist' | 'both', @@ -12,37 +9,8 @@ export async function assignDuelMember( ) { const awaitedTankDefinitions = await tankDefinitions; const awaitedProvisionDefinitions = await provisionDefinitions; - const awaitedModelDefinitions = await modelDefinitions; - const tankModelDefinition = awaitedModelDefinitions[id]; const tank = awaitedTankDefinitions[id]; - const turret = tank.turrets.at(-1)!; - const gun = turret.guns.at(-1)!; - const shell = gun.shells[0]; - const engine = tank.engines.at(-1)!; - const track = tank.tracks.at(-1)!; - const provisionsList = availableProvisions( - tank, - gun, - awaitedProvisionDefinitions, - ); - const member: DuelMember = { - tank, - engine, - turret, - gun, - shell, - track, - equipmentMatrix: genericDefaultEquipmentMatrix, - pitch: degToRad(tankModelDefinition.turretRotation?.pitch ?? 0), - yaw: 0, - camouflage: true, - consumables: [], - cooldownBooster: 0, - crewMastery: 1, - provisions: provisionsList - .filter((provision) => provision.crew !== undefined) - .map((provision) => provision.id), - }; + const member = tankToDuelMember(tank, awaitedProvisionDefinitions); mutateDuel((draft) => { draft.assigned = true; diff --git a/src/core/blitzkrieg/tankToCompareMember.ts b/src/core/blitzkrieg/tankToCompareMember.ts index 83a84ee37..3a5b26362 100644 --- a/src/core/blitzkrieg/tankToCompareMember.ts +++ b/src/core/blitzkrieg/tankToCompareMember.ts @@ -1,16 +1,19 @@ import { uniqueId } from 'lodash'; import { CompareMember } from '../../stores/compare'; import { createDefaultSkills } from './createDefaultSkills'; +import { ProvisionDefinitions } from './provisionDefinitions'; import { SkillDefinitions } from './skillDefinitions'; import { TankDefinition } from './tankDefinitions'; import { tankToDuelMember } from './tankToDuelMember'; export function tankToCompareMember( tank: TankDefinition, + provisionDefinitions: ProvisionDefinitions, skillDefinitions: SkillDefinitions, ) { return { - ...tankToDuelMember(tank), + ...tankToDuelMember(tank, provisionDefinitions), + crewSkills: createDefaultSkills(skillDefinitions), key: uniqueId(), } satisfies CompareMember; diff --git a/src/core/blitzkrieg/tankToDuelMember.ts b/src/core/blitzkrieg/tankToDuelMember.ts index 6062cce30..68f08cdc3 100644 --- a/src/core/blitzkrieg/tankToDuelMember.ts +++ b/src/core/blitzkrieg/tankToDuelMember.ts @@ -1,22 +1,33 @@ import { DuelMember } from '../../stores/duel'; import { genericDefaultEquipmentMatrix } from '../../stores/duel/constants'; +import { availableProvisions } from './availableProvisions'; +import { ProvisionDefinitions } from './provisionDefinitions'; import { TankDefinition } from './tankDefinitions'; -export function tankToDuelMember(tank: TankDefinition) { +export function tankToDuelMember( + tank: TankDefinition, + provisionDefinitions: ProvisionDefinitions, +) { + const turret = tank.turrets.at(-1)!; + const gun = turret.guns.at(-1)!; + const provisionsList = availableProvisions(tank, gun, provisionDefinitions); + return { camouflage: true, consumables: [], equipmentMatrix: genericDefaultEquipmentMatrix, cooldownBooster: 0, crewMastery: 1, - provisions: [], + provisions: provisionsList + .filter((provision) => provision.crew !== undefined) + .map((provision) => provision.id), engine: tank.engines.at(-1)!, - gun: tank.turrets.at(-1)!.guns.at(-1)!, + gun, shell: tank.turrets.at(-1)!.guns.at(-1)!.shells[0], tank, track: tank.tracks.at(-1)!, yaw: 0, pitch: 0, - turret: tank.turrets.at(-1)!, + turret, } satisfies DuelMember; }