Files
blitzkit/packages/website/src/core/blitz/generateStats.ts
T

58 lines
1.6 KiB
TypeScript
Raw Normal View History

2024-09-07 21:45:00 -05:00
import { BlitzStats } from '@blitzkit/core';
import calculateWN8 from '@blitzkit/core/src/statistics/calculateWN8';
2024-05-01 17:55:13 -05:00
export type Stat = keyof ReturnType<typeof generateStats>;
export const STAT_NAMES: Record<Stat, string> = {
battles: 'Battles',
winrate: 'Winrate',
wn8: 'WN8',
2024-05-01 22:11:12 -05:00
averageDamage: 'Damage',
2024-05-03 09:02:06 -05:00
damage: 'Accumulated damage',
2024-05-01 22:11:12 -05:00
wins: 'Wins',
2024-05-01 17:55:13 -05:00
};
2024-05-03 09:02:06 -05:00
export const STAT_KEYS = Object.keys(STAT_NAMES) as Stat[];
2024-08-10 13:29:10 -05:00
export function generateStats(s: BlitzStats, e?: BlitzStats) {
2024-05-01 17:55:13 -05:00
return {
battles: s.battles,
2024-05-01 22:11:12 -05:00
wins: s.wins,
2024-05-01 17:55:13 -05:00
winrate: s.wins / s.battles,
wn8: e ? calculateWN8(e, s) : null,
2024-05-01 22:11:12 -05:00
damage: s.damage_dealt,
averageDamage: s.damage_dealt / s.battles,
2024-05-01 17:55:13 -05:00
};
}
export function prettifyStats(s: ReturnType<typeof generateStats>) {
return {
battles: `${s.battles}`,
2024-05-01 22:11:12 -05:00
wins: `${s.wins}`,
2024-05-01 17:55:13 -05:00
winrate: `${(s.winrate * 100).toFixed(0)}%`,
wn8: s.wn8 ? s.wn8.toFixed(0) : '--',
2024-05-01 22:11:12 -05:00
damage: `${s.damage}`,
averageDamage: s.averageDamage.toFixed(0),
2024-05-01 17:55:13 -05:00
} satisfies Record<Stat, string>;
}
2024-05-01 22:11:12 -05:00
export function sumStats(s: ReturnType<typeof generateStats>[]) {
function sum(slice: (stat: ReturnType<typeof generateStats>) => number) {
return s.reduce((a, b) => a + slice(b), 0);
}
const battles = sum((s) => s.battles);
const wins = sum((s) => s.wins);
const damage = sum((s) => s.damage);
return {
battles,
wins,
winrate: wins / battles,
damage,
averageDamage: damage / battles,
wn8:
sum((s) => (s.wn8 ? s.wn8 * s.battles : 0)) /
sum((s) => (s.wn8 ? s.battles : 0)),
} satisfies ReturnType<typeof generateStats>;
}