mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 18:57:03 +02:00
checkpoint
This commit is contained in:
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),
|
||||
);
|
||||
}
|
||||
@@ -7,4 +7,5 @@ export * from "./math";
|
||||
export * from "./patreon";
|
||||
export * from "./statistics";
|
||||
export * from "./streams";
|
||||
export * from "./tankopedia";
|
||||
export * from "./types";
|
||||
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user