From db83ac40b414a984f440b983f3a76b51e11e5d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 30 Jun 2024 20:34:22 -0500 Subject: [PATCH] feat: player count --- public/protos/blitzkit.proto | 1 + scripts/averages.ts | 14 ++++++++++---- scripts/discoverIds.ts | 11 +++-------- .../tools/tank-performance/components/Header.tsx | 3 --- .../tools/tank-performance/components/Info.tsx | 16 ++++++---------- .../tank-performance/components/RowLoader.tsx | 6 +++--- .../tank-performance/components/TankRow.tsx | 13 +++++++------ src/core/blitzkit/averageDefinitions/index.ts | 14 +++++--------- src/core/blitzkit/discoveredIdDefinitions.ts | 12 ++++++++++++ src/core/blitzkit/fetchPreDiscoveredIds.ts | 4 ++-- 10 files changed, 49 insertions(+), 45 deletions(-) create mode 100644 src/core/blitzkit/discoveredIdDefinitions.ts diff --git a/public/protos/blitzkit.proto b/public/protos/blitzkit.proto index 99cb35b6f..a756b02c5 100644 --- a/public/protos/blitzkit.proto +++ b/public/protos/blitzkit.proto @@ -4,6 +4,7 @@ package blitzkit; message AverageDefinitions { map averages = 1; + uint32 players = 2; } message Tank { diff --git a/scripts/averages.ts b/scripts/averages.ts index 1e8d5fe4b..3b5f3bf5e 100644 --- a/scripts/averages.ts +++ b/scripts/averages.ts @@ -119,7 +119,7 @@ async function postWork() { `Generating statistics based off ${includedPlayers.toLocaleString()} players (${checkedPlayers.toLocaleString()} checked in total) and ${tankIds.length} tanks...`, ); - const averages: AverageDefinitions = {}; + const averages: Record = {}; tankIds.forEach((id) => { const tanks = tanksSorted[id]; @@ -170,14 +170,20 @@ async function postWork() { averages[id] = entry as AverageDefinitionsEntry; }); + const averageDefinitions = { + averages, + players: includedPlayers, + } satisfies AverageDefinitions; + commitAssets( 'averages', [ { path: 'definitions/averages.pb', - content: await encodeToBase64('blitzkit.AverageDefinitions', { - averages, - }), + content: await encodeToBase64( + 'blitzkit.AverageDefinitions', + averageDefinitions, + ), encoding: 'base64', }, ], diff --git a/scripts/discoverIds.ts b/scripts/discoverIds.ts index d767147ad..f27710bc9 100644 --- a/scripts/discoverIds.ts +++ b/scripts/discoverIds.ts @@ -7,14 +7,9 @@ import { getAccountInfo } from '../src/core/blitz/getAccountInfo'; import { MIN_IDS, idToRegion } from '../src/core/blitz/idToRegion'; import { asset } from '../src/core/blitzkit/asset'; import { commitAssets } from '../src/core/blitzkit/commitAssets'; +import { DiscoverIdsDefinitions } from '../src/core/blitzkit/discoveredIdDefinitions'; import { DidsReadStream, DidsWriteStream } from '../src/core/streams/dids'; -export interface DiscoverIdsManifest { - time: number; - chunks: number; - count: number; -} - const CHUNK_SIZE = 2 ** 21; const RUN_TIME = 1000 * 60 * 60 * 5.5; const PROGRESS_UPDATE_FREQUENCY = 1000 * 60; @@ -31,7 +26,7 @@ const indexableRegions = [...REGIONS]; let ids: number[] = []; const preDiscoveredManifest = (await fetch( asset('ids/manifest.json', !production), -).then((response) => response.json())) as DiscoverIdsManifest; +).then((response) => response.json())) as DiscoverIdsDefinitions; console.log( `Fetching ${preDiscoveredManifest.chunks} pre-discovered chunks...`, @@ -163,7 +158,7 @@ function post() { chunks: idsChunked.length, count: ids.length, time: Date.now(), - } satisfies DiscoverIdsManifest), + } satisfies DiscoverIdsDefinitions), encoding: 'utf-8', path: 'ids/manifest.json', }, diff --git a/src/app/tools/tank-performance/components/Header.tsx b/src/app/tools/tank-performance/components/Header.tsx index 2ce3ba7d4..988f696fb 100644 --- a/src/app/tools/tank-performance/components/Header.tsx +++ b/src/app/tools/tank-performance/components/Header.tsx @@ -44,9 +44,6 @@ export function Header() { Capture points - - Dropped capture points - ); diff --git a/src/app/tools/tank-performance/components/Info.tsx b/src/app/tools/tank-performance/components/Info.tsx index 8a99cea4e..0914f9139 100644 --- a/src/app/tools/tank-performance/components/Info.tsx +++ b/src/app/tools/tank-performance/components/Info.tsx @@ -2,15 +2,11 @@ import { InfoCircledIcon } from '@radix-ui/react-icons'; import { Callout, Flex } from '@radix-ui/themes'; -import { use, useMemo } from 'react'; -import { averageDefinitionsArray } from '../../../../core/blitzkit/averageDefinitions'; +import { use } from 'react'; +import { averageDefinitions } from '../../../../core/blitzkit/averageDefinitions'; export function Info() { - const awaitedAverageDefinitionsArray = use(averageDefinitionsArray); - const samples = useMemo( - () => awaitedAverageDefinitionsArray.reduce((a, b) => a + b.samples, 0), - [], - ); + const awaitedAverageDefinitions = use(averageDefinitions); return ( @@ -19,9 +15,9 @@ export function Info() { - Based on {samples.toLocaleString()} players with at least 5,000 career - battles and 1 battle in the past 120 days. Stats displayed as an - average per battle. Updated daily. + Based on {awaitedAverageDefinitions.players.toLocaleString()} players + with at least 5,000 career battles and 1 battle in the past 120 days. + Player counts are less than real values. Updated daily. diff --git a/src/app/tools/tank-performance/components/RowLoader.tsx b/src/app/tools/tank-performance/components/RowLoader.tsx index 7649d077a..41e5299b2 100644 --- a/src/app/tools/tank-performance/components/RowLoader.tsx +++ b/src/app/tools/tank-performance/components/RowLoader.tsx @@ -4,12 +4,12 @@ import { times } from 'lodash'; export function RowLoader() { return ( - + - {times(14, (index) => ( - + {times(13, (index) => ( + ))} diff --git a/src/app/tools/tank-performance/components/TankRow.tsx b/src/app/tools/tank-performance/components/TankRow.tsx index 404930fe6..a676a52bd 100644 --- a/src/app/tools/tank-performance/components/TankRow.tsx +++ b/src/app/tools/tank-performance/components/TankRow.tsx @@ -1,5 +1,5 @@ import { Table } from '@radix-ui/themes'; -import { memo, use } from 'react'; +import { memo, use, useMemo } from 'react'; import { TankRowHeaderCell } from '../../../../components/TankRowHeaderCell'; import { averageDefinitions } from '../../../../core/blitzkit/averageDefinitions'; import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions'; @@ -11,7 +11,11 @@ interface TankRowProps { export const TankRow = memo( ({ tank }) => { const awaitedAverageDefinitions = use(averageDefinitions); - const averages = awaitedAverageDefinitions[tank.id]; + const averages = awaitedAverageDefinitions.averages[tank.id]; + const numberFormat = useMemo( + () => Intl.NumberFormat(undefined, { notation: 'compact' }), + [], + ); return ( @@ -20,7 +24,7 @@ export const TankRow = memo( {Math.round(averages.mu.wins * 100)}% - {averages.samples.toLocaleString()} + {numberFormat.format(Math.round(averages.samples))} {Math.round(averages.mu.damage_dealt).toLocaleString()} @@ -47,9 +51,6 @@ export const TankRow = memo( {averages.mu.capture_points.toFixed(2)} - - {averages.mu.dropped_capture_points.toFixed(2)} - ); }, diff --git a/src/core/blitzkit/averageDefinitions/index.ts b/src/core/blitzkit/averageDefinitions/index.ts index 6b0031f43..033749443 100644 --- a/src/core/blitzkit/averageDefinitions/index.ts +++ b/src/core/blitzkit/averageDefinitions/index.ts @@ -21,25 +21,21 @@ export interface AverageDefinitionsEntrySubPartial { } export interface AverageDefinitions { - [id: number]: AverageDefinitionsEntry; -} - -interface AverageDefinitionsProto { - averages: AverageDefinitions; + averages: Record; + players: number; } export const averageDefinitions = fetch(asset('definitions/averages.pb')) .then((response) => response.arrayBuffer()) .then((buffer) => { - return decode( + return decode( 'blitzkit.AverageDefinitions', new Uint8Array(buffer), ); - }) - .then((data) => data.averages); + }); export const averageDefinitionsArray = averageDefinitions.then((data) => - Object.entries(data).map(([key, value]) => ({ + Object.entries(data.averages).map(([key, value]) => ({ id: Number(key), ...(value as AverageDefinitionsEntry), })), diff --git a/src/core/blitzkit/discoveredIdDefinitions.ts b/src/core/blitzkit/discoveredIdDefinitions.ts new file mode 100644 index 000000000..361991583 --- /dev/null +++ b/src/core/blitzkit/discoveredIdDefinitions.ts @@ -0,0 +1,12 @@ +import { asset } from './asset'; +import isDev from './isDev'; + +export interface DiscoveredIdsDefinitions { + time: number; + chunks: number; + count: number; +} + +export const discoveredIdsDefinitions = fetch( + asset('ids/manifest.json', isDev()), +).then((response) => response.json() as Promise); diff --git a/src/core/blitzkit/fetchPreDiscoveredIds.ts b/src/core/blitzkit/fetchPreDiscoveredIds.ts index bb8e3d454..484f99165 100644 --- a/src/core/blitzkit/fetchPreDiscoveredIds.ts +++ b/src/core/blitzkit/fetchPreDiscoveredIds.ts @@ -1,15 +1,15 @@ import { times } from 'lodash'; import { decompress } from 'lz4js'; import ProgressBar from 'progress'; -import { DiscoverIdsManifest } from '../../../scripts/discoverIds'; import { DidsReadStream } from '../streams/dids'; import { asset } from './asset'; +import { DiscoveredIdsDefinitions } from './discoveredIdDefinitions'; export async function fetchPreDiscoveredIds(dev: boolean) { const idChunks: number[][] = []; const manifest = (await fetch(asset('ids/manifest.json', dev)).then( (response) => response.json(), - )) as DiscoverIdsManifest; + )) as DiscoveredIdsDefinitions; const bar = new ProgressBar( `Fetching ${manifest.count.toLocaleString()} ids in ${manifest.chunks} chunks :bar`, manifest.chunks,