mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-11-01 15:00:36 +01:00
feat: migrated tankopedia search
This commit is contained in:
1 parent
73c7bdf0c0
commit
e1c8194beb
59 files changed
+146
-131
No files matched your search
@@ -38,7 +38,6 @@
|
|||||||
"@resvg/resvg-js": "^2.6.2",
|
"@resvg/resvg-js": "^2.6.2",
|
||||||
"@types/three": "^0.160.0",
|
"@types/three": "^0.160.0",
|
||||||
"@vanilla-extract/css": "^1.15.5",
|
"@vanilla-extract/css": "^1.15.5",
|
||||||
"@vanilla-extract/dynamic": "^2.1.2",
|
|
||||||
"adm-zip": "^0.5.16",
|
"adm-zip": "^0.5.16",
|
||||||
"bepaint": "^0.1.0-beta.3",
|
"bepaint": "^0.1.0-beta.3",
|
||||||
"csv-parse": "^5.5.6",
|
"csv-parse": "^5.5.6",
|
||||||
|
|||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,8 @@
|
|||||||
|
export const TREE_TYPES = ['researchable', 'premium', 'collector'] as const;
|
||||||
|
|
||||||
|
export const TANK_CLASSES = [
|
||||||
|
'lightTank',
|
||||||
|
'mediumTank',
|
||||||
|
'heavyTank',
|
||||||
|
'AT-SPG',
|
||||||
|
] as const;
|
||||||
@@ -1 +1,3 @@
|
|||||||
|
export * from './constants';
|
||||||
export * from './idToRegion';
|
export * from './idToRegion';
|
||||||
|
export * from './resolveNearPenetration';
|
||||||
File renamed without changes.
@@ -1,5 +1,5 @@
|
|||||||
import { assertSecret } from '@blitzkit/core/src/blitzkit/assertSecret';
|
import { assertSecret } from '@blitzkit/core/src/blitzkit/assertSecret';
|
||||||
import { ASSETS_REPO } from '../../constants/assets';
|
import { ASSETS_REPO } from '../../../../src/constants/assets';
|
||||||
|
|
||||||
export function asset(path: string) {
|
export function asset(path: string) {
|
||||||
return `https://raw.githubusercontent.com/tresabhi/${ASSETS_REPO}/${assertSecret(
|
return `https://raw.githubusercontent.com/tresabhi/${ASSETS_REPO}/${assertSecret(
|
||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
import { fetchCdonLz4 } from './fetchCdonLz4';
|
import { fetchCdonLz4 } from '@blitzkit/core/src/blitzkit/fetchCdonLz4';
|
||||||
|
|
||||||
export type CamouflageDefinitions = Record<
|
export type CamouflageDefinitions = Record<
|
||||||
number,
|
number,
|
||||||
File renamed without changes.
@@ -1,4 +1,4 @@
|
|||||||
import { TankFilters } from '../../../packages/website/src/stores/tankFilters';
|
import { TankFilters } from '../../../website/src/stores/tankFilters';
|
||||||
import { TankDefinition } from './tankDefinitions';
|
import { TankDefinition } from './tankDefinitions';
|
||||||
|
|
||||||
export function filterTank(filters: TankFilters, tank: TankDefinition) {
|
export function filterTank(filters: TankFilters, tank: TankDefinition) {
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { asset } from '../../../../src/core/blitzkit/asset';
|
import { asset } from './asset';
|
||||||
import { fetchCdonLz4 } from '../../../../src/core/blitzkit/fetchCdonLz4';
|
import { fetchCdonLz4 } from './fetchCdonLz4';
|
||||||
|
|
||||||
interface GameMode {
|
interface GameMode {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
export * from './assertSecret';
|
export * from './assertSecret';
|
||||||
|
export * from './asset';
|
||||||
|
export * from './camouflageDefinitions';
|
||||||
|
export * from './fetchCdonLz4';
|
||||||
|
export * from './filterTank';
|
||||||
export * from './gameDefinitions';
|
export * from './gameDefinitions';
|
||||||
|
export * from './modelDefinitions';
|
||||||
export * from './superCompress';
|
export * from './superCompress';
|
||||||
export * from './superDecompress';
|
export * from './superDecompress';
|
||||||
|
export * from './tankDefinitions';
|
||||||
|
export * from './tankIcon';
|
||||||
|
export * from './tankNames';
|
||||||
File renamed without changes.
+12
-1
@@ -1,5 +1,4 @@
|
|||||||
import { CrewMember, GunDefinition, ShellType, Tier } from '.';
|
import { CrewMember, GunDefinition, ShellType, Tier } from '.';
|
||||||
import { TankClass } from '../../../components/Tanks';
|
|
||||||
|
|
||||||
export const SHELL_NAMES: Record<ShellType, string> = {
|
export const SHELL_NAMES: Record<ShellType, string> = {
|
||||||
ap: 'AP',
|
ap: 'AP',
|
||||||
@@ -59,3 +58,15 @@ export const TIER_ROMAN_NUMERALS: Record<Tier, string> = {
|
|||||||
9: 'IX',
|
9: 'IX',
|
||||||
10: 'X',
|
10: 'X',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const flags: Record<string, string> = {
|
||||||
|
ussr: '<:ussr:1218421042033197197>',
|
||||||
|
germany: '🇩🇪',
|
||||||
|
usa: '🇺🇸',
|
||||||
|
china: '🇨🇳',
|
||||||
|
uk: '🇬🇧',
|
||||||
|
france: '🇫🇷',
|
||||||
|
japan: '🇯🇵',
|
||||||
|
european: '🇪🇺',
|
||||||
|
other: '<:other:1218421572243558482>',
|
||||||
|
};
|
||||||
+1
-11
@@ -179,14 +179,4 @@ export const tankDefinitionsArray = tankDefinitions.then((tanks) =>
|
|||||||
);
|
);
|
||||||
export type Tier = (typeof TIERS)[number];
|
export type Tier = (typeof TIERS)[number];
|
||||||
|
|
||||||
export const flags: Record<string, string> = {
|
export * from './constants';
|
||||||
ussr: '<:ussr:1218421042033197197>',
|
|
||||||
germany: '🇩🇪',
|
|
||||||
usa: '🇺🇸',
|
|
||||||
china: '🇨🇳',
|
|
||||||
uk: '🇬🇧',
|
|
||||||
france: '🇫🇷',
|
|
||||||
japan: '🇯🇵',
|
|
||||||
european: '🇪🇺',
|
|
||||||
other: '<:other:1218421572243558482>',
|
|
||||||
};
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
|
|
||||||
export function tankIcon(id: number, size: 'big' | 'small' = 'big') {
|
export function tankIcon(id: number, size: 'big' | 'small' = 'big') {
|
||||||
return asset(`icons/tanks/${size}/${id}.webp`);
|
return asset(`icons/tanks/${size}/${id}.webp`);
|
||||||
+1
-2
@@ -1,6 +1,5 @@
|
|||||||
import { deburr } from 'lodash';
|
import { deburr } from 'lodash';
|
||||||
import { tankDefinitionsArray } from '.';
|
import { camouflageDefinitions, tankDefinitionsArray } from '.';
|
||||||
import { camouflageDefinitions } from '../camouflageDefinitions';
|
|
||||||
|
|
||||||
export const tankNames = Promise.all([
|
export const tankNames = Promise.all([
|
||||||
tankDefinitionsArray,
|
tankDefinitionsArray,
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-fuzzysort": "^1.0.1",
|
"react-fuzzysort": "^1.0.1",
|
||||||
"immer": "^10.1.1",
|
"immer": "^10.1.1",
|
||||||
|
"@vanilla-extract/dynamic": "^2.1.2",
|
||||||
"zustand": "^4.5.5",
|
"zustand": "^4.5.5",
|
||||||
"react-promise-suspense": "^0.3.4"
|
"react-promise-suspense": "^0.3.4"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import {
|
||||||
|
asset,
|
||||||
|
gameDefinitions,
|
||||||
|
TANK_CLASSES,
|
||||||
|
Tier,
|
||||||
|
TIER_ROMAN_NUMERALS,
|
||||||
|
} from '@blitzkit/core';
|
||||||
|
import strings from '@blitzkit/core/lang/en-US.json';
|
||||||
import { ReloadIcon } from '@radix-ui/react-icons';
|
import { ReloadIcon } from '@radix-ui/react-icons';
|
||||||
import { Box, Flex, IconButton, Text, Tooltip } from '@radix-ui/themes';
|
import { Box, Flex, IconButton, Text, Tooltip } from '@radix-ui/themes';
|
||||||
import { times } from 'lodash';
|
import { times } from 'lodash';
|
||||||
@@ -9,12 +17,6 @@ import { ExperimentIcon } from '../../../../components/ExperimentIcon';
|
|||||||
import { ResearchedIcon } from '../../../../components/ResearchedIcon';
|
import { ResearchedIcon } from '../../../../components/ResearchedIcon';
|
||||||
import { ScienceIcon } from '../../../../components/ScienceIcon';
|
import { ScienceIcon } from '../../../../components/ScienceIcon';
|
||||||
import { ScienceOffIcon } from '../../../../components/ScienceOffIcon';
|
import { ScienceOffIcon } from '../../../../components/ScienceOffIcon';
|
||||||
import { TANK_CLASSES } from '../../../../components/Tanks/components/Item/constants';
|
|
||||||
import { asset } from '../../../../core/blitzkit/asset';
|
|
||||||
import { gameDefinitions } from '../../../../core/blitzkit/gameDefinitions';
|
|
||||||
import { Tier } from '../../../../core/blitzkit/tankDefinitions';
|
|
||||||
import { TIER_ROMAN_NUMERALS } from '../../../../core/blitzkit/tankDefinitions/constants';
|
|
||||||
import strings from '../../../../lang/en-US.json';
|
|
||||||
import * as TankFilters from '../../../../stores/tankFilters';
|
import * as TankFilters from '../../../../stores/tankFilters';
|
||||||
|
|
||||||
interface FilterControlProps {
|
interface FilterControlProps {
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
|
import {
|
||||||
|
asset,
|
||||||
|
modelDefinitions,
|
||||||
|
resolveNearPenetration,
|
||||||
|
TankDefinition,
|
||||||
|
tankIcon,
|
||||||
|
} from '@blitzkit/core';
|
||||||
import { Flex, Text } from '@radix-ui/themes';
|
import { Flex, Text } from '@radix-ui/themes';
|
||||||
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
import { assignInlineVars } from '@vanilla-extract/dynamic';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { use, useMemo } from 'react';
|
import { use, useMemo } from 'react';
|
||||||
import { classIcons } from '../../../../components/ClassIcon';
|
import { classIcons } from '../../../../components/ClassIcon';
|
||||||
import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { asset } from '../../../../core/blitzkit/asset';
|
|
||||||
import { modelDefinitions } from '../../../../core/blitzkit/modelDefinitions';
|
|
||||||
import { normalizeBoundingBox } from '../../../../core/blitzkit/normalizeBoundingBox';
|
|
||||||
import { resolveDpm } from '../../../../core/blitzkit/resolveDpm';
|
|
||||||
import { resolveReload } from '../../../../core/blitzkit/resolveReload';
|
|
||||||
import { TankDefinition } from '../../../../core/blitzkit/tankDefinitions';
|
|
||||||
import { tankIcon } from '../../../../core/blitzkit/tankIcon';
|
|
||||||
import { unionBoundingBox } from '../../../../core/blitzkit/unionBoundingBox';
|
|
||||||
import * as TankopediaSort from '../../../../stores/tankopediaSort';
|
import * as TankopediaSort from '../../../../stores/tankopediaSort';
|
||||||
import * as styles from './TankCard.css';
|
import * as styles from './TankCard.css';
|
||||||
|
|
||||||
@@ -139,14 +137,16 @@ export function TankCard({ tank, onSelect }: TankCardProps) {
|
|||||||
tank.treeType === 'collector'
|
tank.treeType === 'collector'
|
||||||
? 'blue'
|
? 'blue'
|
||||||
: tank.treeType === 'premium'
|
: tank.treeType === 'premium'
|
||||||
? 'amber'
|
? 'amber'
|
||||||
: 'gray'
|
: 'gray'
|
||||||
}
|
}
|
||||||
highContrast={tank.treeType === 'researchable'}
|
highContrast={tank.treeType === 'researchable'}
|
||||||
onClick={onSelect ? () => onSelect(tank) : undefined}
|
onClick={onSelect ? () => onSelect(tank) : undefined}
|
||||||
className={styles.card}
|
className={styles.card}
|
||||||
style={assignInlineVars({
|
style={assignInlineVars({
|
||||||
[styles.cardBackgroundVar]: `top left / contain no-repeat url(${asset(`flags/scratched/${tank.nation}.webp`)})`,
|
[styles.cardBackgroundVar]: `top left / contain no-repeat url(${asset(
|
||||||
|
`flags/scratched/${tank.nation}.webp`,
|
||||||
|
)})`,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -1,26 +1,22 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import {
|
||||||
|
TANK_CLASSES,
|
||||||
|
TankDefinition,
|
||||||
|
filterTank,
|
||||||
|
gameDefinitions,
|
||||||
|
modelDefinitions,
|
||||||
|
resolveNearPenetration,
|
||||||
|
tankDefinitions,
|
||||||
|
tankDefinitionsArray,
|
||||||
|
tankNames,
|
||||||
|
} from '@blitzkit/core';
|
||||||
import { Callout, Flex, FlexProps, Link, Text } from '@radix-ui/themes';
|
import { Callout, Flex, FlexProps, Link, Text } from '@radix-ui/themes';
|
||||||
import { go } from 'fuzzysort';
|
import { go } from 'fuzzysort';
|
||||||
import { times } from 'lodash';
|
import { times } from 'lodash';
|
||||||
import { Fragment, memo, use, useEffect, useMemo, useState } from 'react';
|
import { Fragment, memo, use, useEffect, useMemo, useState } from 'react';
|
||||||
import { AdMidSectionResponsive } from '../../../../../components/AdMidSectionResponsive';
|
import { AdMidSectionResponsive } from '../../../../../components/AdMidSectionResponsive';
|
||||||
import { ExperimentIcon } from '../../../../../components/ExperimentIcon';
|
import { ExperimentIcon } from '../../../../../components/ExperimentIcon';
|
||||||
import { TANK_CLASSES } from '../../../../../components/Tanks/components/Item/constants';
|
|
||||||
import { resolveNearPenetration } from '../../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { filterTank } from '../../../../../core/blitzkit/filterTank';
|
|
||||||
import { gameDefinitions } from '../../../../../core/blitzkit/gameDefinitions';
|
|
||||||
import { modelDefinitions } from '../../../../../core/blitzkit/modelDefinitions';
|
|
||||||
import { normalizeBoundingBox } from '../../../../../core/blitzkit/normalizeBoundingBox';
|
|
||||||
import { resolveDpm } from '../../../../../core/blitzkit/resolveDpm';
|
|
||||||
import { resolveReload } from '../../../../../core/blitzkit/resolveReload';
|
|
||||||
import {
|
|
||||||
TankDefinition,
|
|
||||||
tankDefinitions,
|
|
||||||
tankDefinitionsArray,
|
|
||||||
} from '../../../../../core/blitzkit/tankDefinitions';
|
|
||||||
import { tankNames } from '../../../../../core/blitzkit/tankDefinitions/tankNames';
|
|
||||||
import { unionBoundingBox } from '../../../../../core/blitzkit/unionBoundingBox';
|
|
||||||
import { useAdExempt } from '../../../../../hooks/useAdExempt';
|
import { useAdExempt } from '../../../../../hooks/useAdExempt';
|
||||||
import * as TankFilters from '../../../../../stores/tankFilters';
|
import * as TankFilters from '../../../../../stores/tankFilters';
|
||||||
import {
|
import {
|
||||||
|
|||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,7 @@
|
|||||||
import { assertSecret } from '@blitzkit/core';
|
import { assertSecret } from '@blitzkit/core';
|
||||||
|
import strings from '@blitzkit/core/lang/en-US.json';
|
||||||
import { Button, ButtonProps, Dialog, Flex } from '@radix-ui/themes';
|
import { Button, ButtonProps, Dialog, Flex } from '@radix-ui/themes';
|
||||||
import { REGIONS } from '../../../../../../src/constants/regions';
|
import { REGIONS } from '../../../../../../src/constants/regions';
|
||||||
import strings from '../../../../../../src/lang/en-US.json';
|
|
||||||
import { Link } from '../../Link';
|
import { Link } from '../../Link';
|
||||||
import { WargamingIcon } from '../../WargamingIcon';
|
import { WargamingIcon } from '../../WargamingIcon';
|
||||||
|
|
||||||
|
|||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,7 +1,6 @@
|
|||||||
import { ObjectMap, useLoader } from '@react-three/fiber';
|
import { ObjectMap, useLoader } from '@react-three/fiber';
|
||||||
import { Mesh, MeshStandardMaterial } from 'three';
|
import { Mesh, MeshStandardMaterial } from 'three';
|
||||||
import { GLTF, GLTFLoader } from 'three-stdlib';
|
import { GLTF, GLTFLoader } from 'three-stdlib';
|
||||||
import { asset } from '../core/blitzkit/asset';
|
|
||||||
|
|
||||||
const cache: Record<
|
const cache: Record<
|
||||||
number,
|
number,
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { Tier, createNextSafeStore } from '@blitzkit/core';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { TankClass, TreeType } from '../components/Tanks';
|
|
||||||
import { Tier } from '../core/blitzkit/tankDefinitions';
|
|
||||||
import { createNextSafeStore } from '../core/zustand/createNextSafeStore';
|
|
||||||
|
|
||||||
export interface TankFilters {
|
export interface TankFilters {
|
||||||
tiers: Tier[];
|
tiers: Tier[];
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { createNextSafeStore } from '@blitzkit/core';
|
||||||
import { merge } from 'lodash';
|
import { merge } from 'lodash';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { persist, subscribeWithSelector } from 'zustand/middleware';
|
import { persist, subscribeWithSelector } from 'zustand/middleware';
|
||||||
import { ENVIRONMENTS } from '../../app/tools/tankopedia/[id]/components/Lighting';
|
import { ENVIRONMENTS } from '../../app/tools/tankopedia/[id]/components/Lighting';
|
||||||
import { TankClass, TreeType } from '../../components/Tanks';
|
|
||||||
import { Tier } from '../../core/blitzkit/tankDefinitions';
|
|
||||||
import { createNextSafeStore } from '../../core/zustand/createNextSafeStore';
|
|
||||||
import { SORT_NAMES, TankopediaDisplay } from './constants';
|
import { SORT_NAMES, TankopediaDisplay } from './constants';
|
||||||
|
|
||||||
export type TankopediaSortBy = keyof typeof SORT_NAMES;
|
export type TankopediaSortBy = keyof typeof SORT_NAMES;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { createNextSafeStore } from '@blitzkit/core';
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { createNextSafeStore } from '../core/zustand/createNextSafeStore';
|
|
||||||
import {
|
import {
|
||||||
TankopediaSortBy,
|
TankopediaSortBy,
|
||||||
TankopediaSortDirection,
|
TankopediaSortDirection,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { tankIcon } from '@blitzkit/core/src/blitzkit/tankIcon';
|
||||||
import { clamp } from 'lodash';
|
import { clamp } from 'lodash';
|
||||||
import CommandWrapper from '../components/CommandWrapper';
|
import CommandWrapper from '../components/CommandWrapper';
|
||||||
import TitleBar from '../components/TitleBar';
|
import TitleBar from '../components/TitleBar';
|
||||||
@@ -9,7 +10,6 @@ import { mapDefinitions } from '../core/blitzkit/mapDefinitions';
|
|||||||
import { RenderConfiguration } from '../core/blitzkit/renderConfiguration';
|
import { RenderConfiguration } from '../core/blitzkit/renderConfiguration';
|
||||||
import { tankDefinitions } from '../core/blitzkit/tankDefinitions';
|
import { tankDefinitions } from '../core/blitzkit/tankDefinitions';
|
||||||
import { TIER_ROMAN_NUMERALS } from '../core/blitzkit/tankDefinitions/constants';
|
import { TIER_ROMAN_NUMERALS } from '../core/blitzkit/tankDefinitions/constants';
|
||||||
import { tankIcon } from '../core/blitzkit/tankIcon';
|
|
||||||
import { tankAverages } from '../core/blitzstars/tankAverages';
|
import { tankAverages } from '../core/blitzstars/tankAverages';
|
||||||
import buttonLink from '../core/discord/buttonLink';
|
import buttonLink from '../core/discord/buttonLink';
|
||||||
import { createLocalizedCommand } from '../core/discord/createLocalizedCommand';
|
import { createLocalizedCommand } from '../core/discord/createLocalizedCommand';
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { resolveNearPenetration } from '@blitzkit/core/src/blitzkit/resolveNearPenetration';
|
||||||
import { useFrame } from '@react-three/fiber';
|
import { useFrame } from '@react-three/fiber';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three';
|
import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three';
|
||||||
@@ -6,7 +7,6 @@ import * as Duel from '../../../../../packages/website/src/stores/duel';
|
|||||||
import * as TankopediaPersistent from '../../../../../packages/website/src/stores/tankopediaPersistent';
|
import * as TankopediaPersistent from '../../../../../packages/website/src/stores/tankopediaPersistent';
|
||||||
import { canSplash } from '../../../../core/blitz/canSplash';
|
import { canSplash } from '../../../../core/blitz/canSplash';
|
||||||
import { isExplosive } from '../../../../core/blitz/isExplosive';
|
import { isExplosive } from '../../../../core/blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePenetrationCoefficient';
|
import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePenetrationCoefficient';
|
||||||
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
|
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
|
||||||
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
|
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,4 @@
|
|||||||
|
import { resolveNearPenetration } from '@blitzkit/core/src/blitzkit/resolveNearPenetration';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import {
|
import {
|
||||||
AdditiveBlending,
|
AdditiveBlending,
|
||||||
@@ -8,7 +9,6 @@ import {
|
|||||||
} from 'three';
|
} from 'three';
|
||||||
import { ArmorUserData, ExternalModuleVariant } from '../..';
|
import { ArmorUserData, ExternalModuleVariant } from '../..';
|
||||||
import * as Duel from '../../../../../../../packages/website/src/stores/duel';
|
import * as Duel from '../../../../../../../packages/website/src/stores/duel';
|
||||||
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient';
|
import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient';
|
||||||
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
|
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
|
||||||
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
|
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,4 @@
|
|||||||
|
import { resolveNearPenetration } from '@blitzkit/core/src/blitzkit/resolveNearPenetration';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import {
|
import {
|
||||||
AdditiveBlending,
|
AdditiveBlending,
|
||||||
@@ -9,7 +10,6 @@ import { degToRad } from 'three/src/math/MathUtils';
|
|||||||
import { ArmorUserData } from '../..';
|
import { ArmorUserData } from '../..';
|
||||||
import * as Duel from '../../../../../../../packages/website/src/stores/duel';
|
import * as Duel from '../../../../../../../packages/website/src/stores/duel';
|
||||||
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
|
import { isExplosive } from '../../../../../../core/blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../../../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient';
|
import { resolvePenetrationCoefficient } from '../../../../../../core/blitz/resolvePenetrationCoefficient';
|
||||||
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
|
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
|
||||||
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
|
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { resolveNearPenetration } from '@blitzkit/core/src/blitzkit/resolveNearPenetration';
|
||||||
import { useThree } from '@react-three/fiber';
|
import { useThree } from '@react-three/fiber';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import {
|
import {
|
||||||
@@ -14,7 +15,6 @@ import { degToRad } from 'three/src/math/MathUtils';
|
|||||||
import * as Duel from '../../../../../packages/website/src/stores/duel';
|
import * as Duel from '../../../../../packages/website/src/stores/duel';
|
||||||
import * as TankopediaEphemeral from '../../../../../packages/website/src/stores/tankopediaEphemeral';
|
import * as TankopediaEphemeral from '../../../../../packages/website/src/stores/tankopediaEphemeral';
|
||||||
import { isExplosive } from '../../../../core/blitz/isExplosive';
|
import { isExplosive } from '../../../../core/blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../../../../core/blitz/resolveNearPenetration';
|
|
||||||
import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePenetrationCoefficient';
|
import { resolvePenetrationCoefficient } from '../../../../core/blitz/resolvePenetrationCoefficient';
|
||||||
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
|
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
|
||||||
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
|
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
|
||||||
@@ -190,8 +190,8 @@ export function SpacedArmorSceneComponent({
|
|||||||
shell.type === ShellType.HE
|
shell.type === ShellType.HE
|
||||||
? 'blocked'
|
? 'blocked'
|
||||||
: blocked
|
: blocked
|
||||||
? 'blocked'
|
? 'blocked'
|
||||||
: 'penetration',
|
: 'penetration',
|
||||||
variant: layer.variant,
|
variant: layer.variant,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -241,8 +241,8 @@ export function SpacedArmorSceneComponent({
|
|||||||
shell.type === ShellType.HE && layer.type !== ArmorType.Primary
|
shell.type === ShellType.HE && layer.type !== ArmorType.Primary
|
||||||
? 'blocked'
|
? 'blocked'
|
||||||
: blocked
|
: blocked
|
||||||
? 'blocked'
|
? 'blocked'
|
||||||
: 'penetration',
|
: 'penetration',
|
||||||
angle,
|
angle,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { asset } from '../core/blitzkit/asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
|
|
||||||
interface FlagProps {
|
interface FlagProps {
|
||||||
nation: string;
|
nation: string;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { asset } from '../../core/blitzkit/asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
import { GenericTankComponentButton } from './GenericTankComponentButton';
|
import { GenericTankComponentButton } from './GenericTankComponentButton';
|
||||||
import { TankComponentButtonProps } from './TankComponentButton';
|
import { TankComponentButtonProps } from './TankComponentButton';
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
import { tankIcon } from '@blitzkit/core/src/blitzkit/tankIcon';
|
||||||
|
import { classIcons } from '../../packages/website/src/components/ClassIcon';
|
||||||
import { TankDefinition } from '../core/blitzkit/tankDefinitions';
|
import { TankDefinition } from '../core/blitzkit/tankDefinitions';
|
||||||
import { tankIcon } from '../core/blitzkit/tankIcon';
|
|
||||||
import { classIcons } from './ClassIcon';
|
|
||||||
import { ExperimentIcon } from './ExperimentIcon';
|
import { ExperimentIcon } from './ExperimentIcon';
|
||||||
import { Link } from './Link';
|
import { Link } from './Link';
|
||||||
import { StickyRowHeaderCell } from './StickyRowHeaderCell';
|
import { StickyRowHeaderCell } from './StickyRowHeaderCell';
|
||||||
@@ -36,8 +36,8 @@ export function TankRowHeaderCell({ tank }: TankRowHeaderCellProps) {
|
|||||||
tank.treeType === 'collector'
|
tank.treeType === 'collector'
|
||||||
? 'blue'
|
? 'blue'
|
||||||
: tank.treeType === 'premium'
|
: tank.treeType === 'premium'
|
||||||
? 'amber'
|
? 'amber'
|
||||||
: 'gray'
|
: 'gray'
|
||||||
}
|
}
|
||||||
highContrast={tank.treeType === 'researchable'}
|
highContrast={tank.treeType === 'researchable'}
|
||||||
underline="hover"
|
underline="hover"
|
||||||
|
|||||||
@@ -5,15 +5,6 @@ import {
|
|||||||
TANK_ICONS_PREMIUM,
|
TANK_ICONS_PREMIUM,
|
||||||
} from '../../../../core/blitzkit/tankDefinitions/constants';
|
} from '../../../../core/blitzkit/tankDefinitions/constants';
|
||||||
|
|
||||||
export const TREE_TYPES = ['researchable', 'premium', 'collector'] as const; // BIG TODO: REMOVE THIS AFTER LOCALIZATION
|
|
||||||
|
|
||||||
export const TANK_CLASSES = [
|
|
||||||
'lightTank',
|
|
||||||
'mediumTank',
|
|
||||||
'heavyTank',
|
|
||||||
'AT-SPG',
|
|
||||||
] as const;
|
|
||||||
|
|
||||||
export const TREE_TYPE_NAMES: Record<TreeType, string> = {
|
export const TREE_TYPE_NAMES: Record<TreeType, string> = {
|
||||||
researchable: 'Tech tree',
|
researchable: 'Tech tree',
|
||||||
premium: 'Premium',
|
premium: 'Premium',
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ import { amberDark, blueDark } from '@radix-ui/colors';
|
|||||||
import { Flex, Text } from '@radix-ui/themes';
|
import { Flex, Text } from '@radix-ui/themes';
|
||||||
import { times } from 'lodash';
|
import { times } from 'lodash';
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
|
import { ClassHeavy } from '../../packages/website/src/components/ClassIcon/components/ClassHeavy';
|
||||||
|
import { ClassLight } from '../../packages/website/src/components/ClassIcon/components/ClassLight';
|
||||||
|
import { ClassMedium } from '../../packages/website/src/components/ClassIcon/components/ClassMedium';
|
||||||
|
import { ClassTankDestroyer } from '../../packages/website/src/components/ClassIcon/components/ClassTankDestroyer';
|
||||||
import { useEmbedStateCurry } from '../../packages/website/src/stores/embedState/utilities';
|
import { useEmbedStateCurry } from '../../packages/website/src/stores/embedState/utilities';
|
||||||
import { breakdownConfig } from '../app/tools/embed/configurations/breakdown';
|
import { breakdownConfig } from '../app/tools/embed/configurations/breakdown';
|
||||||
import { toRadiusVar } from '../app/tools/embed/utilities';
|
import { toRadiusVar } from '../app/tools/embed/utilities';
|
||||||
@@ -9,10 +13,6 @@ import { TankDefinition } from '../core/blitzkit/tankDefinitions';
|
|||||||
import { previewCompositeStat } from '../core/statistics/compositeStats';
|
import { previewCompositeStat } from '../core/statistics/compositeStats';
|
||||||
import { CompositeStatsKey } from '../core/statistics/compositeStats/constants';
|
import { CompositeStatsKey } from '../core/statistics/compositeStats/constants';
|
||||||
import strings from '../lang/en-US.json';
|
import strings from '../lang/en-US.json';
|
||||||
import { ClassHeavy } from './ClassIcon/components/ClassHeavy';
|
|
||||||
import { ClassLight } from './ClassIcon/components/ClassLight';
|
|
||||||
import { ClassMedium } from './ClassIcon/components/ClassMedium';
|
|
||||||
import { ClassTankDestroyer } from './ClassIcon/components/ClassTankDestroyer';
|
|
||||||
|
|
||||||
interface BreakdownEmbedWrapperProps {
|
interface BreakdownEmbedWrapperProps {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
@@ -62,14 +62,14 @@ export function BreakdownEmbedCard({ tank }: BreakdownEmbedCardProps) {
|
|||||||
tank === null
|
tank === null
|
||||||
? undefined
|
? undefined
|
||||||
: tank.treeType === 'researchable' ||
|
: tank.treeType === 'researchable' ||
|
||||||
!useState('cardTitleTypeColor')
|
!useState('cardTitleTypeColor')
|
||||||
? undefined
|
? undefined
|
||||||
: {
|
: {
|
||||||
color:
|
color:
|
||||||
tank.treeType === 'premium'
|
tank.treeType === 'premium'
|
||||||
? amberDark.amber11
|
? amberDark.amber11
|
||||||
: blueDark.blue11,
|
: blueDark.blue11,
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Flex align="center" gap="1">
|
<Flex align="center" gap="1">
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
|
import {
|
||||||
|
PitchLimits,
|
||||||
|
YawLimits,
|
||||||
|
} from '@blitzkit/core/src/blitzkit/modelDefinitions';
|
||||||
import { clamp } from 'lodash';
|
import { clamp } from 'lodash';
|
||||||
import { degToRad } from 'three/src/math/MathUtils';
|
import { degToRad } from 'three/src/math/MathUtils';
|
||||||
import { PitchLimits, YawLimits } from '../blitzkit/modelDefinitions';
|
|
||||||
import { normalizeAngleRad } from '../math/normalizeAngleRad';
|
import { normalizeAngleRad } from '../math/normalizeAngleRad';
|
||||||
|
|
||||||
export function applyPitchYawLimits(
|
export function applyPitchYawLimits(
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
|
|
||||||
export interface DiscoveredIdsDefinitions {
|
export interface DiscoveredIdsDefinitions {
|
||||||
time: number;
|
time: number;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
import { fetchCdonLz4 } from './fetchCdonLz4';
|
import { fetchCdonLz4 } from '@blitzkit/core/src/blitzkit/fetchCdonLz4';
|
||||||
|
|
||||||
export interface MapDefinitions {
|
export interface MapDefinitions {
|
||||||
[id: number]: {
|
[id: number]: {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { BoundingBox } from '@blitzkit/core/src/blitzkit/modelDefinitions';
|
||||||
import { Vector3Tuple } from 'three';
|
import { Vector3Tuple } from 'three';
|
||||||
import { BoundingBox } from './modelDefinitions';
|
|
||||||
|
|
||||||
export function normalizeBoundingBox(boundingBox: BoundingBox) {
|
export function normalizeBoundingBox(boundingBox: BoundingBox) {
|
||||||
return boundingBox.max.map(
|
return boundingBox.max.map(
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ModelArmor } from './modelDefinitions';
|
import { ModelArmor } from '@blitzkit/core/src/blitzkit/modelDefinitions';
|
||||||
|
|
||||||
export function resolveArmor(armor: ModelArmor, index: number) {
|
export function resolveArmor(armor: ModelArmor, index: number) {
|
||||||
const spaced = armor.spaced?.includes(index) ?? false;
|
const spaced = armor.spaced?.includes(index) ?? false;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { decode } from '../protobuf/decode';
|
import { decode } from '../protobuf/decode';
|
||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
|
|
||||||
export interface Reviews {
|
export interface Reviews {
|
||||||
reviews: Record<number, Review>;
|
reviews: Record<number, Review>;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { TankClass } from '../../components/Tanks';
|
import { TankClass } from '../../components/Tanks';
|
||||||
import { asset } from './asset';
|
import { asset } from '@blitzkit/core/src/blitzkit/asset';
|
||||||
import { fetchCdonLz4 } from './fetchCdonLz4';
|
import { fetchCdonLz4 } from '@blitzkit/core/src/blitzkit/fetchCdonLz4';
|
||||||
|
|
||||||
export interface SkillDefinitions {
|
export interface SkillDefinitions {
|
||||||
classes: Record<TankClass, string[]>;
|
classes: Record<TankClass, string[]>;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
import { ModelDefinition } from '@blitzkit/core/src/blitzkit/modelDefinitions';
|
||||||
|
import { resolveNearPenetration } from '@blitzkit/core/src/blitzkit/resolveNearPenetration';
|
||||||
import { EquipmentMatrix } from '../../../packages/website/src/stores/duel';
|
import { EquipmentMatrix } from '../../../packages/website/src/stores/duel';
|
||||||
import { isExplosive } from '../blitz/isExplosive';
|
import { isExplosive } from '../blitz/isExplosive';
|
||||||
import { resolveNearPenetration } from '../blitz/resolveNearPenetration';
|
|
||||||
import { resolvePenetrationCoefficient } from '../blitz/resolvePenetrationCoefficient';
|
import { resolvePenetrationCoefficient } from '../blitz/resolvePenetrationCoefficient';
|
||||||
import { coefficient } from './coefficient';
|
import { coefficient } from './coefficient';
|
||||||
import { degressiveStat } from './degressiveStat';
|
import { degressiveStat } from './degressiveStat';
|
||||||
import { EquipmentDefinitions } from './equipmentDefinitions';
|
import { EquipmentDefinitions } from './equipmentDefinitions';
|
||||||
import { ModelDefinition } from './modelDefinitions';
|
|
||||||
import { normalizeBoundingBox } from './normalizeBoundingBox';
|
import { normalizeBoundingBox } from './normalizeBoundingBox';
|
||||||
import { progressiveStat } from './progressiveStat';
|
import { progressiveStat } from './progressiveStat';
|
||||||
import { ProvisionDefinitions } from './provisionDefinitions';
|
import { ProvisionDefinitions } from './provisionDefinitions';
|
||||||
@@ -238,10 +238,10 @@ export function tankCharacteristics(
|
|||||||
tank.class === 'heavyTank'
|
tank.class === 'heavyTank'
|
||||||
? 0.06
|
? 0.06
|
||||||
: tank.class === 'mediumTank'
|
: tank.class === 'mediumTank'
|
||||||
? 0.08
|
? 0.08
|
||||||
: tank.class === 'lightTank'
|
: tank.class === 'lightTank'
|
||||||
? 0.11
|
? 0.11
|
||||||
: 0.04,
|
: 0.04,
|
||||||
]) * coefficient([true, progressiveStat(commanderMastery)]);
|
]) * coefficient([true, progressiveStat(commanderMastery)]);
|
||||||
const fireChanceCoefficient = coefficient([hasProtectiveKit, -0.2]);
|
const fireChanceCoefficient = coefficient([hasProtectiveKit, -0.2]);
|
||||||
|
|
||||||
@@ -263,8 +263,8 @@ export function tankCharacteristics(
|
|||||||
tank.class === 'AT-SPG'
|
tank.class === 'AT-SPG'
|
||||||
? 0.04
|
? 0.04
|
||||||
: tank.class === 'heavyTank'
|
: tank.class === 'heavyTank'
|
||||||
? 0.03
|
? 0.03
|
||||||
: 0.02,
|
: 0.02,
|
||||||
]),
|
]),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -272,10 +272,10 @@ export function tankCharacteristics(
|
|||||||
tank.class === 'heavyTank'
|
tank.class === 'heavyTank'
|
||||||
? 0.02
|
? 0.02
|
||||||
: tank.class === 'mediumTank'
|
: tank.class === 'mediumTank'
|
||||||
? 0.04
|
? 0.04
|
||||||
: tank.class === 'lightTank'
|
: tank.class === 'lightTank'
|
||||||
? 0.07
|
? 0.07
|
||||||
: 0.1,
|
: 0.1,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
const camouflageCoefficientStill = sum(
|
const camouflageCoefficientStill = sum(
|
||||||
@@ -287,8 +287,8 @@ export function tankCharacteristics(
|
|||||||
tank.class === 'AT-SPG'
|
tank.class === 'AT-SPG'
|
||||||
? 0.04
|
? 0.04
|
||||||
: tank.class === 'heavyTank'
|
: tank.class === 'heavyTank'
|
||||||
? 0.03
|
? 0.03
|
||||||
: 0.02,
|
: 0.02,
|
||||||
],
|
],
|
||||||
[true, crewSkills.camouflage * (3 / 100)],
|
[true, crewSkills.camouflage * (3 / 100)],
|
||||||
),
|
),
|
||||||
@@ -298,10 +298,10 @@ export function tankCharacteristics(
|
|||||||
tank.class === 'heavyTank'
|
tank.class === 'heavyTank'
|
||||||
? 0.04
|
? 0.04
|
||||||
: tank.class === 'mediumTank'
|
: tank.class === 'mediumTank'
|
||||||
? 0.08
|
? 0.08
|
||||||
: tank.class === 'lightTank'
|
: tank.class === 'lightTank'
|
||||||
? 0.14
|
? 0.14
|
||||||
: 0.2,
|
: 0.2,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { tankIcon } from '@blitzkit/core/src/blitzkit/tankIcon';
|
||||||
import { iconPng } from './iconPng';
|
import { iconPng } from './iconPng';
|
||||||
import { tankIcon } from './tankIcon';
|
|
||||||
|
|
||||||
export function tankIconPng(id: number) {
|
export function tankIconPng(id: number) {
|
||||||
return iconPng(tankIcon(id));
|
return iconPng(tankIcon(id));
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { BoundingBox } from '@blitzkit/core/src/blitzkit/modelDefinitions';
|
||||||
import { Vector3Tuple } from 'three';
|
import { Vector3Tuple } from 'three';
|
||||||
import { BoundingBox } from './modelDefinitions';
|
|
||||||
|
|
||||||
export function unionBoundingBox(a: BoundingBox, b: BoundingBox) {
|
export function unionBoundingBox(a: BoundingBox, b: BoundingBox) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
+12
-2
@@ -37,7 +37,17 @@
|
|||||||
"packages/website/src/components/Party3.tsx",
|
"packages/website/src/components/Party3.tsx",
|
||||||
"packages/website/src/components/PageWrapper.tsx",
|
"packages/website/src/components/PageWrapper.tsx",
|
||||||
"packages/core/src/blitzkit/gameDefinitions.ts",
|
"packages/core/src/blitzkit/gameDefinitions.ts",
|
||||||
"packages/core/src/zustand/createNextSafeStore.tsx"
|
"packages/core/src/zustand/createNextSafeStore.tsx",
|
||||||
, "packages/core/src/blitzkit/superDecompress.ts", "packages/core/src/blitzkit/superCompress.ts" ],
|
"packages/core/src/blitzkit/superDecompress.ts",
|
||||||
|
"packages/core/src/blitzkit/superCompress.ts",
|
||||||
|
"packages/website/src/components/ClassIcon",
|
||||||
|
"packages/core/src/blitzkit/asset.ts",
|
||||||
|
"packages/core/src/blitzkit/fetchCdonLz4.ts",
|
||||||
|
"packages/core/src/blitz/resolveNearPenetration.ts",
|
||||||
|
"packages/core/src/blitzkit/modelDefinitions.ts",
|
||||||
|
"packages/core/src/blitzkit/camouflageDefinitions.ts",
|
||||||
|
"packages/core/src/blitzkit/filterTank.ts",
|
||||||
|
"packages/core/src/blitzkit/tankIcon.ts"
|
||||||
|
],
|
||||||
"exclude": ["node_modules/**/*", "dist", "scripts"]
|
"exclude": ["node_modules/**/*", "dist", "scripts"]
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user