mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 11:39:50 +02:00
feat: filter owned tanks
This commit is contained in:
1 parent
66cf590f1c
commit
9412be2d7c
10 files changed
+435
-354
No files matched your search
@@ -1,30 +1,37 @@
|
||||
import type { TankDefinition } from '@blitzkit/core';
|
||||
import { times } from 'lodash-es';
|
||||
import type { TankFilters } from '../../stores/tankFilters';
|
||||
import type { TankDefinition } from "@blitzkit/core";
|
||||
import { times } from "lodash-es";
|
||||
import type { TankFilters } from "../../stores/tankFilters";
|
||||
|
||||
const SHELLS = times(3, (index) => index);
|
||||
|
||||
export function filterTank(filters: TankFilters, tank: TankDefinition) {
|
||||
export async function filterTank(
|
||||
filters: TankFilters,
|
||||
tank: TankDefinition,
|
||||
owned: number[] = []
|
||||
) {
|
||||
return (
|
||||
(filters.ownership === "all" ||
|
||||
(filters.ownership === "owned" && owned.includes(tank.id)) ||
|
||||
(filters.ownership === "unowned" && !owned.includes(tank.id))) &&
|
||||
(filters.tiers.length === 0 || filters.tiers.includes(tank.tier)) &&
|
||||
(filters.nations.length === 0 || filters.nations.includes(tank.nation)) &&
|
||||
(filters.classes.length === 0 || filters.classes.includes(tank.class)) &&
|
||||
(filters.types.length === 0 || filters.types.includes(tank.type)) &&
|
||||
(filters.testing === 'include' ||
|
||||
(filters.testing === 'only' && tank.testing) ||
|
||||
(filters.testing === 'exclude' && !tank.testing)) &&
|
||||
(filters.testing === "include" ||
|
||||
(filters.testing === "only" && tank.testing) ||
|
||||
(filters.testing === "exclude" && !tank.testing)) &&
|
||||
(filters.gunType.length === 0 ||
|
||||
(filters.gunType.includes('regular') &&
|
||||
(filters.gunType.includes("regular") &&
|
||||
tank.turrets.some((turret) =>
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === 'regular'),
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === "regular")
|
||||
)) ||
|
||||
(filters.gunType.includes('auto_loader') &&
|
||||
(filters.gunType.includes("auto_loader") &&
|
||||
tank.turrets.some((turret) =>
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === 'auto_loader'),
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === "auto_loader")
|
||||
)) ||
|
||||
(filters.gunType.includes('auto_reloader') &&
|
||||
(filters.gunType.includes("auto_reloader") &&
|
||||
tank.turrets.some((turret) =>
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === 'auto_reloader'),
|
||||
turret.guns.some((gun) => gun.gun_type!.$case === "auto_reloader")
|
||||
))) &&
|
||||
tank.turrets.some((turret) =>
|
||||
turret.guns.some((gun) =>
|
||||
@@ -32,9 +39,9 @@ export function filterTank(filters: TankFilters, tank: TankDefinition) {
|
||||
(index) =>
|
||||
filters.shells[index] === null ||
|
||||
gun.shells[index] === undefined ||
|
||||
gun.shells[index].type === filters.shells[index],
|
||||
),
|
||||
),
|
||||
gun.shells[index].type === filters.shells[index]
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import { getTankStats, idToRegion, TankDefinition } from "@blitzkit/core";
|
||||
import { TankFilters } from "../../stores/tankFilters";
|
||||
import { filterTank } from "./filterTank";
|
||||
|
||||
export async function filterTanks(
|
||||
filters: TankFilters,
|
||||
tanks: TankDefinition[],
|
||||
player?: number
|
||||
) {
|
||||
const filtered: TankDefinition[] = [];
|
||||
let owned: number[] | undefined;
|
||||
|
||||
if (player) {
|
||||
const tankStats = await getTankStats(idToRegion(player), player, {
|
||||
fields: "tank_id",
|
||||
});
|
||||
|
||||
owned = tankStats?.map(({ tank_id }) => tank_id);
|
||||
}
|
||||
|
||||
for (const tank of tanks) {
|
||||
if (await filterTank(filters, tank, owned)) filtered.push(tank);
|
||||
}
|
||||
|
||||
return filtered;
|
||||
}
|
||||
Reference in new issue
Block a user