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 { Cache } from "./0_base";
import { ServerBlitzKitAPI1 } from "./1_tanks"; import { ServerBlitzKitAPI1 } from "./1_tanks";
@@ -1,19 +1,16 @@
import { import {
Armor,
BlitzCrewType, BlitzCrewType,
ChassisDefinitionsList, ChassisDefinitionsList,
Crew,
EngineDefinitionsList, EngineDefinitionsList,
GunDefinitionsList, GunDefinitionsList,
ModelDefinitions,
TankParameters, TankParameters,
toUniqueId, toUniqueId,
TurretDefinitionsList, TurretDefinitionsList,
Vector3,
VehicleDefinitionArmor, VehicleDefinitionArmor,
VehicleDefinitionList, VehicleDefinitionList,
VehicleDefinitions, VehicleDefinitions,
} from "@blitzkit/core"; } from "@blitzkit/core";
import { Armor, Crew, ModelDefinitions, Vector3 } from "@blitzkit/protos";
import { Vector3Tuple } from "three"; import { Vector3Tuple } from "three";
import { Cache } from "./0_base"; import { Cache } from "./0_base";
import { ServerBlitzKitAPI2 } from "./2_camouflages"; import { ServerBlitzKitAPI2 } from "./2_camouflages";
@@ -3,6 +3,7 @@ import {
ProvisionDefinitions, ProvisionDefinitions,
TankDefinition, TankDefinition,
} from "../../../protos/src/blitzkit"; } from "../../../protos/src/blitzkit";
import { isTankCompatible } from "../tankopedia";
export function availableProvisions( export function availableProvisions(
tank: TankDefinition, tank: TankDefinition,
@@ -10,6 +11,6 @@ export function availableProvisions(
provisionDefinitions: ProvisionDefinitions, provisionDefinitions: ProvisionDefinitions,
) { ) {
return Object.values(provisionDefinitions.provisions).filter((provision) => 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 "./patreon";
export * from "./statistics"; export * from "./statistics";
export * from "./streams"; export * from "./streams";
export * from "./tankopedia";
export * from "./types"; 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, resolveDpm,
SEARCH_KEYS, SEARCH_KEYS,
unionBoundingBox, unionBoundingBox,
type TankDefinition,
} from "@blitzkit/core"; } from "@blitzkit/core";
import { literals } from "@blitzkit/i18n/src/literals"; import { literals } from "@blitzkit/i18n/src/literals";
import type { TankDefinition } from "@blitzkit/protos";
import fuzzysort from "fuzzysort"; import fuzzysort from "fuzzysort";
import { uniq } from "lodash-es"; import { uniq } from "lodash-es";
import { memo, useMemo } from "react"; import { memo, useMemo } from "react";
@@ -16,6 +16,7 @@ import { awaitableTankNames } from "../../core/awaitables/tankNames";
import { filterTanks } from "../../core/blitzkit/filterTanks"; import { filterTanks } from "../../core/blitzkit/filterTanks";
import { resolveReload } from "../../core/blitzkit/resolveReload"; import { resolveReload } from "../../core/blitzkit/resolveReload";
import { useLocale } from "../../hooks/useLocale"; import { useLocale } from "../../hooks/useLocale";
import { useStrings } from "../../hooks/useStrings";
import { App } from "../../stores/app"; import { App } from "../../stores/app";
import { TankFilters } from "../../stores/tankFilters"; import { TankFilters } from "../../stores/tankFilters";
import { TankopediaPersistent } from "../../stores/tankopediaPersistent"; import { TankopediaPersistent } from "../../stores/tankopediaPersistent";
@@ -53,7 +54,8 @@ const [gameDefinitions, modelDefinitions, tankDefinitions, tankNames] =
export const TankSearch = memo<TankSearchProps>( export const TankSearch = memo<TankSearchProps>(
({ compact, onSelect, onSelectAll, skeleton }) => { ({ compact, onSelect, onSelectAll, skeleton }) => {
const { strings, locale } = useLocale(); const strings = useStrings();
const locale = useLocale();
const wargaming = App.use((state) => state.logins.wargaming); const wargaming = App.use((state) => state.logins.wargaming);
const awaitedTanksDefinitionsArray = Object.values(tankDefinitions.tanks); const awaitedTanksDefinitionsArray = Object.values(tankDefinitions.tanks);
const tankopediaSort = TankSort.use(); const tankopediaSort = TankSort.use();
@@ -1,5 +1,5 @@
import { isTankCompatible } from "@blitzkit/core";
import { import {
ConsumableTankCategoryFilterCategory,
GunDefinition, GunDefinition,
TankDefinition, TankDefinition,
TankInclusivityFilter, TankInclusivityFilter,
@@ -13,54 +13,3 @@ export function useTankCompatibility(tank: TankDefinition, gun: GunDefinition) {
return isTankCompatible(tank, gun, include, exclude); 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 { useMemo } from "react";
import { api } from "../../../../../api/dynamic"; import { api } from "../../../../../api/dynamic";
import { computeCharacteristics } from "../../../../../tankopedia/computeCharacteristics"; import { TankopediaLoadout } from "../../../../../components/TankopediaLoadout";
import { withErrorWrapper } from "../../../../../hocs/withErrorWrapper"; import { withErrorWrapper } from "../../../../../hocs/withErrorWrapper";
import { withLocale } from "../../../../../hocs/withLocale"; import { withLocale } from "../../../../../hocs/withLocale";
import { useAwait } from "../../../../../hooks/useAwait"; import { useAwait } from "../../../../../hooks/useAwait";
import { Tankopedia } from "../../../../../stores/tankopedia"; import { Tankopedia } from "../../../../../stores/tankopedia";
import { computeCharacteristics } from "../../../../../tankopedia/computeCharacteristics";
import styles from "./_index.module.css"; import styles from "./_index.module.css";
interface PageProps { interface PageProps {