checkpoint

This commit is contained in:
tresabhi committed 2026-09-23 17:09:43 -05:00
1 parent c2714c4d6b
commit a75c47865b
9 files changed
+70 -61

No files matched your search

@@ -1,4 +1,4 @@
import { CamouflageDefinitions } from "@blitzkit/core";
import { CamouflageDefinitions } from "@blitzkit/protos";
import { Cache } from "./0_base";
import { ServerBlitzKitAPI1 } from "./1_tanks";
@@ -1,19 +1,16 @@
import {
Armor,
BlitzCrewType,
ChassisDefinitionsList,
Crew,
EngineDefinitionsList,
GunDefinitionsList,
ModelDefinitions,
TankParameters,
toUniqueId,
TurretDefinitionsList,
Vector3,
VehicleDefinitionArmor,
VehicleDefinitionList,
VehicleDefinitions,
} from "@blitzkit/core";
import { Armor, Crew, ModelDefinitions, Vector3 } from "@blitzkit/protos";
import { Vector3Tuple } from "three";
import { Cache } from "./0_base";
import { ServerBlitzKitAPI2 } from "./2_camouflages";
@@ -3,6 +3,7 @@ import {
ProvisionDefinitions,
TankDefinition,
} from "../../../protos/src/blitzkit";
import { isTankCompatible } from "../tankopedia";
export function availableProvisions(
tank: TankDefinition,
@@ -10,6 +11,6 @@ export function availableProvisions(
provisionDefinitions: ProvisionDefinitions,
) {
return Object.values(provisionDefinitions.provisions).filter((provision) =>
checkConsumableProvisionInclusivity(provision, tank, gun),
isTankCompatible(tank, gun, provision.include, provision.exclude),
);
}
+1
View File
@@ -7,4 +7,5 @@ export * from "./math";
export * from "./patreon";
export * from "./statistics";
export * from "./streams";
export * from "./tankopedia";
export * from "./types";
+1
View File
@@ -0,0 +1 @@
export * from "./isTankCompatible";
@@ -0,0 +1,57 @@
import {
ConsumableTankCategoryFilterCategory,
GunDefinition,
TankDefinition,
TankInclusivityFilter,
} from "@blitzkit/protos";
export function isTankCompatible(
tank: TankDefinition,
gun: GunDefinition,
include?: TankInclusivityFilter[],
exclude?: TankInclusivityFilter[],
) {
const included = include?.every((rule) => {
switch (rule.filter_type!.$case) {
case "tiers":
return (
rule.filter_type!.value.min <= tank.tier &&
tank.tier <= rule.filter_type!.value.max
);
case "ids":
return rule.filter_type!.value.ids.includes(tank.id);
case "nations":
return rule.filter_type!.value.nations.includes(tank.nation);
case "categories":
throw new SyntaxError("Category filtering found in include rule");
}
});
const excluded = exclude?.some((rule) => {
switch (rule.filter_type!.$case) {
case "tiers":
return (
rule.filter_type!.value.min <= tank.tier &&
tank.tier <= rule.filter_type!.value.max
);
case "ids":
return rule.filter_type!.value.ids.includes(tank.id);
case "nations":
return rule.filter_type!.value.nations.includes(tank.nation);
case "categories":
return rule.filter_type!.value.categories.some((category) => {
switch (category) {
case ConsumableTankCategoryFilterCategory.CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP:
return gun.gun_type!.$case !== "regular";
}
});
}
});
return include !== undefined && include?.length > 0 && included && !excluded;
}
@@ -4,9 +4,9 @@ import {
resolveDpm,
SEARCH_KEYS,
unionBoundingBox,
type TankDefinition,
} from "@blitzkit/core";
import { literals } from "@blitzkit/i18n/src/literals";
import type { TankDefinition } from "@blitzkit/protos";
import fuzzysort from "fuzzysort";
import { uniq } from "lodash-es";
import { memo, useMemo } from "react";
@@ -16,6 +16,7 @@ import { awaitableTankNames } from "../../core/awaitables/tankNames";
import { filterTanks } from "../../core/blitzkit/filterTanks";
import { resolveReload } from "../../core/blitzkit/resolveReload";
import { useLocale } from "../../hooks/useLocale";
import { useStrings } from "../../hooks/useStrings";
import { App } from "../../stores/app";
import { TankFilters } from "../../stores/tankFilters";
import { TankopediaPersistent } from "../../stores/tankopediaPersistent";
@@ -53,7 +54,8 @@ const [gameDefinitions, modelDefinitions, tankDefinitions, tankNames] =
export const TankSearch = memo<TankSearchProps>(
({ compact, onSelect, onSelectAll, skeleton }) => {
const { strings, locale } = useLocale();
const strings = useStrings();
const locale = useLocale();
const wargaming = App.use((state) => state.logins.wargaming);
const awaitedTanksDefinitionsArray = Object.values(tankDefinitions.tanks);
const tankopediaSort = TankSort.use();
@@ -1,5 +1,5 @@
import { isTankCompatible } from "@blitzkit/core";
import {
ConsumableTankCategoryFilterCategory,
GunDefinition,
TankDefinition,
TankInclusivityFilter,
@@ -13,54 +13,3 @@ export function useTankCompatibility(tank: TankDefinition, gun: GunDefinition) {
return isTankCompatible(tank, gun, include, exclude);
};
}
export function isTankCompatible(
tank: TankDefinition,
gun: GunDefinition,
include?: TankInclusivityFilter[],
exclude?: TankInclusivityFilter[],
) {
const included = include?.every((rule) => {
switch (rule.filter_type!.$case) {
case "tiers":
return (
rule.filter_type!.value.min <= tank.tier &&
tank.tier <= rule.filter_type!.value.max
);
case "ids":
return rule.filter_type!.value.ids.includes(tank.id);
case "nations":
return rule.filter_type!.value.nations.includes(tank.nation);
case "categories":
throw new SyntaxError("Category filtering found in include rule");
}
});
const excluded = exclude?.some((rule) => {
switch (rule.filter_type!.$case) {
case "tiers":
return (
rule.filter_type!.value.min <= tank.tier &&
tank.tier <= rule.filter_type!.value.max
);
case "ids":
return rule.filter_type!.value.ids.includes(tank.id);
case "nations":
return rule.filter_type!.value.nations.includes(tank.nation);
case "categories":
return rule.filter_type!.value.categories.some((category) => {
switch (category) {
case ConsumableTankCategoryFilterCategory.CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP:
return gun.gun_type!.$case !== "regular";
}
});
}
});
return include !== undefined && include?.length > 0 && included && !excluded;
}
@@ -1,10 +1,11 @@
import { useMemo } from "react";
import { api } from "../../../../../api/dynamic";
import { computeCharacteristics } from "../../../../../tankopedia/computeCharacteristics";
import { TankopediaLoadout } from "../../../../../components/TankopediaLoadout";
import { withErrorWrapper } from "../../../../../hocs/withErrorWrapper";
import { withLocale } from "../../../../../hocs/withLocale";
import { useAwait } from "../../../../../hooks/useAwait";
import { Tankopedia } from "../../../../../stores/tankopedia";
import { computeCharacteristics } from "../../../../../tankopedia/computeCharacteristics";
import styles from "./_index.module.css";
interface PageProps {