diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx index 7d2a63ca6..55f489eaa 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Consumables.tsx @@ -1,7 +1,7 @@ import { Flex, Heading, Text } from '@radix-ui/themes'; import { use } from 'react'; import { ModuleButton } from '../../../../../../../components/ModuleButton'; -import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableInclusivity'; +import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableProvisionInclusivity'; import { consumableDefinitions } from '../../../../../../../core/blitzkrieg/consumableDefinitions'; import { useDuel } from '../../../../../../../stores/duel'; import { 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 a5dc96ebf..fd80f9c48 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/components/Provisions.tsx @@ -1,7 +1,7 @@ import { Flex, Heading, Text } from '@radix-ui/themes'; import { use } from 'react'; import { ModuleButton } from '../../../../../../../components/ModuleButton'; -import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableInclusivity'; +import { checkConsumableProvisionInclusivity } from '../../../../../../../core/blitzkrieg/checkConsumableProvisionInclusivity'; import { provisionDefinitions } from '../../../../../../../core/blitzkrieg/provisionDefinitions'; import { useDuel } from '../../../../../../../stores/duel'; import { diff --git a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx index 99a786684..17da50b50 100644 --- a/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx +++ b/src/app/tools/tankopedia/[id]/components/Characteristics/index.tsx @@ -9,6 +9,7 @@ import { SHELL_NAMES, } from '../../../../../../core/blitzkrieg/tankDefinitions'; import { unionBoundingBox } from '../../../../../../core/blitzkrieg/unionBoundingBox'; +import { useEquipment } from '../../../../../../core/blitzkrieg/useEquipmentEquipped'; import { useDuel } from '../../../../../../stores/duel'; import { Info } from './components/Info'; @@ -40,6 +41,7 @@ export function Characteristics() { stockTrack.weight + stockTurret.weight + stockGun.weight; + const hasRammer = useEquipment(100); return ( @@ -79,7 +81,7 @@ export function Characteristics() { Fire {GUN_TYPE_NAMES[gun.type]} - {resolveDpm(gun, shell).toFixed(0)} + {resolveDpm(gun, shell, hasRammer).toFixed(0)} {gun.type === 'autoReloader' && ( <> @@ -136,7 +138,7 @@ export function Characteristics() { )) ) : ( - {gun.reload.toFixed(2)} + {(gun.reload * (hasRammer ? 0.93 : 1)).toFixed(2)} )} diff --git a/src/core/blitzkrieg/checkConsumableInclusivity.ts b/src/core/blitzkrieg/checkConsumableProvisionInclusivity.ts similarity index 100% rename from src/core/blitzkrieg/checkConsumableInclusivity.ts rename to src/core/blitzkrieg/checkConsumableProvisionInclusivity.ts diff --git a/src/core/blitzkrieg/equipmentDefinitions.ts b/src/core/blitzkrieg/equipmentDefinitions.ts index 65b032f40..ead52a68c 100644 --- a/src/core/blitzkrieg/equipmentDefinitions.ts +++ b/src/core/blitzkrieg/equipmentDefinitions.ts @@ -25,3 +25,5 @@ export interface EquipmentDefinitions { export const equipmentDefinitions = fetchCdonLz4( asset('definitions/equipment.cdon.lz4'), ); + +equipmentDefinitions.then(console.log); diff --git a/src/core/blitzkrieg/resolveDpm.ts b/src/core/blitzkrieg/resolveDpm.ts index 63739d39e..94b992076 100644 --- a/src/core/blitzkrieg/resolveDpm.ts +++ b/src/core/blitzkrieg/resolveDpm.ts @@ -1,8 +1,12 @@ import { GunDefinition, ShellDefinition } from './tankDefinitions'; -export function resolveDpm(gun: GunDefinition, shell: ShellDefinition) { +export function resolveDpm( + gun: GunDefinition, + shell: ShellDefinition, + hasRammer = false, +) { if (gun.type === 'regular') { - return (shell.damage.armor / gun.reload) * 60; + return (shell.damage.armor / ((hasRammer ? 0.93 : 1) * gun.reload)) * 60; } else if (gun.type === 'autoLoader') { return ( ((shell.damage.armor * gun.count) / diff --git a/src/core/blitzkrieg/useEquipmentEquipped.ts b/src/core/blitzkrieg/useEquipmentEquipped.ts new file mode 100644 index 000000000..42b17f23f --- /dev/null +++ b/src/core/blitzkrieg/useEquipmentEquipped.ts @@ -0,0 +1,28 @@ +import { use, useMemo } from 'react'; +import { useDuel } from '../../stores/duel'; +import { useTankopediaTemporary } from '../../stores/tankopedia'; +import { equipmentDefinitions } from './equipmentDefinitions'; + +export function useEquipment(id: number) { + const awaitedEquipmentDefinitions = use(equipmentDefinitions); + const protagonist = useDuel((state) => state.protagonist!); + const equipmentRows = + awaitedEquipmentDefinitions.presets[protagonist.tank.equipment]; + const equipmentMatrix = useTankopediaTemporary( + (state) => state.equipmentMatrix, + ); + const value = useMemo( + () => + equipmentRows.some((equipmentRow, rowIndex) => { + return equipmentRow.some((equipment, columnIndex) => { + const choice = equipmentMatrix[rowIndex][columnIndex]; + if (choice === 0) return false; + const equipped = equipment[choice === -1 ? 0 : 1]; + return equipped === id; + }); + }), + [equipmentMatrix, protagonist.tank], + ); + + return value; +}