feat: more stats

This commit is contained in:
TrèsAbhi committed 2024-04-04 19:14:22 -05:00
1 parent 3bc5a6d740
commit c1b1b8d304
2 files changed
+63 -19

No files matched your search

+51 -19
View File
@@ -1,7 +1,14 @@
'use client'; 'use client';
import { PlusIcon } from '@radix-ui/react-icons'; import { PlusIcon } from '@radix-ui/react-icons';
import { Button, Dialog, Flex, Table, Text } from '@radix-ui/themes'; import {
Button,
Dialog,
Flex,
SegmentedControl,
Table,
Text,
} from '@radix-ui/themes';
import { usePathname, useRouter, useSearchParams } from 'next/navigation'; import { usePathname, useRouter, useSearchParams } from 'next/navigation';
import { use, useCallback, useEffect, useMemo, useState } from 'react'; import { use, useCallback, useEffect, useMemo, useState } from 'react';
import PageWrapper from '../../../components/PageWrapper'; import PageWrapper from '../../../components/PageWrapper';
@@ -11,7 +18,7 @@ import { provisionDefinitions } from '../../../core/blitzkrieg/provisionDefiniti
import { tankCharacteristics } from '../../../core/blitzkrieg/tankCharacteristics'; import { tankCharacteristics } from '../../../core/blitzkrieg/tankCharacteristics';
import { tankDefinitions } from '../../../core/blitzkrieg/tankDefinitions'; import { tankDefinitions } from '../../../core/blitzkrieg/tankDefinitions';
import { tankIcon } from '../../../core/blitzkrieg/tankIcon'; import { tankIcon } from '../../../core/blitzkrieg/tankIcon';
import { tankToDuelMember } from '../../../core/blitzkrieg/tankToDuelMember'; import { tankToCompareMember } from '../../../core/blitzkrieg/tankToCompareMember';
import mutateCompare, { import mutateCompare, {
CompareMember, CompareMember,
useCompare, useCompare,
@@ -82,10 +89,9 @@ export default function Page() {
.map(Number) .map(Number)
.map( .map(
(id) => (id) =>
({ tankToCompareMember(
...tankToDuelMember(awaitedTankDefinitions[id]), awaitedTankDefinitions[id],
crewSkills: {}, ) satisfies CompareMember,
}) satisfies CompareMember,
); );
}); });
} }
@@ -103,7 +109,7 @@ export default function Page() {
| (( | ((
member: Awaited<ReturnType<typeof tankCharacteristics>>, member: Awaited<ReturnType<typeof tankCharacteristics>>,
) => number | undefined); ) => number | undefined);
display: ( display?: (
member: Awaited<ReturnType<typeof tankCharacteristics>>, member: Awaited<ReturnType<typeof tankCharacteristics>>,
) => number | string | undefined; ) => number | string | undefined;
deltaType?: 'higherIsBetter' | 'lowerIsBetter'; deltaType?: 'higherIsBetter' | 'lowerIsBetter';
@@ -152,7 +158,7 @@ export default function Page() {
: 'red' : 'red'
} }
> >
{display(stats[index])} {display ? display(stats[index]) : value}
</Text> </Text>
</Flex> </Flex>
</Table.Cell> </Table.Cell>
@@ -163,7 +169,20 @@ export default function Page() {
return ( return (
<PageWrapper color="crimson" size="100%"> <PageWrapper color="crimson" size="100%">
<Flex justify="center"> <Flex justify="center" gap="6" align="center">
<Flex justify="center" gap="2" align="center">
Delta:{' '}
<SegmentedControl.Root defaultValue="none">
<SegmentedControl.Item value="none">None</SegmentedControl.Item>
<SegmentedControl.Item value="percentage">
Percentage
</SegmentedControl.Item>
<SegmentedControl.Item value="nominal">
Nominal
</SegmentedControl.Item>
</SegmentedControl.Root>
</Flex>
<Dialog.Root <Dialog.Root
open={addTankDialogOpen} open={addTankDialogOpen}
onOpenChange={setAddTankDialogOpen} onOpenChange={setAddTankDialogOpen}
@@ -186,10 +205,7 @@ export default function Page() {
compact compact
onSelect={(tank) => { onSelect={(tank) => {
mutateCompare((draft) => { mutateCompare((draft) => {
draft.members.push({ draft.members.push(tankToCompareMember(tank));
...tankToDuelMember(tank),
crewSkills: {},
});
}); });
setAddTankDialogOpen(false); setAddTankDialogOpen(false);
@@ -278,16 +294,32 @@ export default function Page() {
display={(stats) => stats.intraClip?.toFixed(2)} display={(stats) => stats.intraClip?.toFixed(2)}
/> />
)} )}
<Row name="Caliber" value="caliber" />
<Row name="Penetration" value="penetration" />
<Row name="Damage" value="damage" />
<Row name="Module damage" value="moduleDamage" />
<Row name="Shell velocity" value="shellVelocity" />
<Row <Row
name="Caliber" name="Aim time"
value="caliber" value="aimTime"
display={(stats) => stats.caliber.toFixed(0)} display={(stats) => stats.aimTime.toFixed(2)}
/> />
<Row <Row
name="Penetration" name="Dispersion"
value="penetration" value="dispersion"
display={(stats) => stats.penetration.toFixed(0)} display={(stats) => stats.dispersion.toFixed(3)}
/> />
<Row name="Dispersion moving" value="dispersionMoving" />
<Row
name="Dispersion hull traversing"
value="dispersionHullTraversing"
/>
<Row
name="Dispersion turret traversing"
value="dispersionTurretTraversing"
/>
<Row name="Dispersion shooting" value="dispersionShooting" />
<Row name="Dispersion gun damaged" value="dispersionGunDamaged" />
</Table.Body> </Table.Body>
</Table.Root> </Table.Root>
</Flex> </Flex>
@@ -0,0 +1,12 @@
import { CompareMember } from '../../stores/compare';
import { TankDefinition } from './tankDefinitions';
import { tankToDuelMember } from './tankToDuelMember';
export function tankToCompareMember(tank: TankDefinition) {
const member = {
...tankToDuelMember(tank),
crewSkills: {},
} satisfies CompareMember;
return member;
}