mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-22 11:17:05 +02:00
36 lines
929 B
TypeScript
36 lines
929 B
TypeScript
import { sumBy } from 'lodash';
|
|
import { use, useMemo } from 'react';
|
|
import {
|
|
TankDefinition,
|
|
tankDefinitions,
|
|
} from '../core/blitzkit/tankDefinitions';
|
|
import * as Duel from '../stores/duel';
|
|
|
|
export enum UseEccentricityMode {
|
|
Tier,
|
|
Class,
|
|
}
|
|
|
|
export function useEccentricity(mode: UseEccentricityMode) {
|
|
const awaitedTankDefinitions = use(tankDefinitions);
|
|
const tank = Duel.use((state) => state.protagonist.tank);
|
|
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;
|
|
}
|