Files
blitzkit/src/hooks/useEccentricity.ts
T

35 lines
929 B
TypeScript
Raw Normal View History

2024-04-21 12:17:33 -05:00
import { sumBy } from 'lodash';
import { use, useMemo } from 'react';
import {
TankDefinition,
tankDefinitions,
2024-04-23 09:57:59 -05:00
} from '../core/blitzkit/tankDefinitions';
2024-07-09 20:35:36 -05:00
import * as Duel from '../stores/duel';
2024-04-21 12:17:33 -05:00
export enum UseEccentricityMode {
Tier,
Class,
}
export function useEccentricity(mode: UseEccentricityMode) {
const awaitedTankDefinitions = use(tankDefinitions);
2024-07-10 13:11:09 -05:00
const tank = Duel.use((state) => state.protagonist.tank);
2024-04-21 12:17:33 -05:00
const similarTanks = useMemo(
() =>
Object.values(awaitedTankDefinitions).filter(
(tankB) =>
tank.tier === tankB.tier &&
(mode === UseEccentricityMode.Class
? tank.class === tankB.class
: true),
),
[tank.id],
);
function eccentricity(property: (tank: TankDefinition) => number) {
const average = sumBy(similarTanks, property) / similarTanks.length;
return property(tank) / average;
}
return eccentricity;
}