mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 10:47:04 +02:00
feat: more stats
This commit is contained in:
1 parent
3bc5a6d740
commit
c1b1b8d304
2 files changed
+63
-19
No files matched your search
@@ -1,7 +1,14 @@
|
||||
'use client';
|
||||
|
||||
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 { use, useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import PageWrapper from '../../../components/PageWrapper';
|
||||
@@ -11,7 +18,7 @@ import { provisionDefinitions } from '../../../core/blitzkrieg/provisionDefiniti
|
||||
import { tankCharacteristics } from '../../../core/blitzkrieg/tankCharacteristics';
|
||||
import { tankDefinitions } from '../../../core/blitzkrieg/tankDefinitions';
|
||||
import { tankIcon } from '../../../core/blitzkrieg/tankIcon';
|
||||
import { tankToDuelMember } from '../../../core/blitzkrieg/tankToDuelMember';
|
||||
import { tankToCompareMember } from '../../../core/blitzkrieg/tankToCompareMember';
|
||||
import mutateCompare, {
|
||||
CompareMember,
|
||||
useCompare,
|
||||
@@ -82,10 +89,9 @@ export default function Page() {
|
||||
.map(Number)
|
||||
.map(
|
||||
(id) =>
|
||||
({
|
||||
...tankToDuelMember(awaitedTankDefinitions[id]),
|
||||
crewSkills: {},
|
||||
}) satisfies CompareMember,
|
||||
tankToCompareMember(
|
||||
awaitedTankDefinitions[id],
|
||||
) satisfies CompareMember,
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -103,7 +109,7 @@ export default function Page() {
|
||||
| ((
|
||||
member: Awaited<ReturnType<typeof tankCharacteristics>>,
|
||||
) => number | undefined);
|
||||
display: (
|
||||
display?: (
|
||||
member: Awaited<ReturnType<typeof tankCharacteristics>>,
|
||||
) => number | string | undefined;
|
||||
deltaType?: 'higherIsBetter' | 'lowerIsBetter';
|
||||
@@ -152,7 +158,7 @@ export default function Page() {
|
||||
: 'red'
|
||||
}
|
||||
>
|
||||
{display(stats[index])}
|
||||
{display ? display(stats[index]) : value}
|
||||
</Text>
|
||||
</Flex>
|
||||
</Table.Cell>
|
||||
@@ -163,7 +169,20 @@ export default function Page() {
|
||||
|
||||
return (
|
||||
<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
|
||||
open={addTankDialogOpen}
|
||||
onOpenChange={setAddTankDialogOpen}
|
||||
@@ -186,10 +205,7 @@ export default function Page() {
|
||||
compact
|
||||
onSelect={(tank) => {
|
||||
mutateCompare((draft) => {
|
||||
draft.members.push({
|
||||
...tankToDuelMember(tank),
|
||||
crewSkills: {},
|
||||
});
|
||||
draft.members.push(tankToCompareMember(tank));
|
||||
});
|
||||
|
||||
setAddTankDialogOpen(false);
|
||||
@@ -278,16 +294,32 @@ export default function Page() {
|
||||
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
|
||||
name="Caliber"
|
||||
value="caliber"
|
||||
display={(stats) => stats.caliber.toFixed(0)}
|
||||
name="Aim time"
|
||||
value="aimTime"
|
||||
display={(stats) => stats.aimTime.toFixed(2)}
|
||||
/>
|
||||
<Row
|
||||
name="Penetration"
|
||||
value="penetration"
|
||||
display={(stats) => stats.penetration.toFixed(0)}
|
||||
name="Dispersion"
|
||||
value="dispersion"
|
||||
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.Root>
|
||||
</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;
|
||||
}
|
||||
Reference in new issue
Block a user