feat: migrated tankopedia pages

This commit is contained in:
TrèsAbhi committed 2024-09-07 20:40:06 -05:00
1 parent 135dd85a82
commit 9ae8b0ac49
30 files changed
+77 -19

No files matched your search

@@ -24,6 +24,7 @@ import { debounce } from 'lodash';
import { Fragment, use, useEffect, useRef, useState } from 'react';
import { lerp } from 'three/src/math/MathUtils';
import { Ad, AdType } from '../../../../../../components/Ad';
import { applyPitchYawLimits } from '../../../../../../core/blitz/applyPitchYawLimits';
import { useAdExempt } from '../../../../../../hooks/useAdExempt';
import { useEquipment } from '../../../../../../hooks/useEquipment';
import { useTankModelDefinition } from '../../../../../../hooks/useTankModelDefinition';
@@ -1,9 +1,12 @@
import { Pose } from '@blitzkit/core';
import { modelDefinitions } from '@blitzkit/core';
import { OrbitControls } from '@react-three/drei';
import { useThree } from '@react-three/fiber';
import { useEffect, useRef, useState } from 'react';
import { Vector3 } from 'three';
import { OrbitControls as OrbitControlsClass } from 'three-stdlib';
import { applyPitchYawLimits } from '../../../../../core/blitz/applyPitchYawLimits';
import { hasEquipment } from '../../../../../core/blitzkit/hasEquipment';
import { Pose, poseEvent } from '../../../../../core/blitzkit/pose';
import { useAwait } from '../../../../../hooks/useAwait';
import * as Duel from '../../../../../stores/duel';
import * as TankopediaEphemeral from '../../../../../stores/tankopediaEphemeral';
@@ -9,7 +9,13 @@ import {
import { Armor } from '../../../../../../components/Armor';
import { ArmorPlateDisplay } from '../../../../../../components/Armor/components/ArmorPlateDisplay';
import { ShotDisplay } from '../../../../../../components/Armor/components/ShotDisplay';
import { StaticArmor } from '../../../../../../components/Armor/components/StaticArmor';
import {
StaticArmor,
ThicknessRange,
} from '../../../../../../components/Armor/components/StaticArmor';
import { applyPitchYawLimits } from '../../../../../../core/blitz/applyPitchYawLimits';
import { modelTransformEvent } from '../../../../../../core/blitzkit/modelTransform';
import { Pose, poseEvent } from '../../../../../../core/blitzkit/pose';
import { useEquipment } from '../../../../../../hooks/useEquipment';
import useOnScreen from '../../../../../../hooks/useOnScreen';
import { useTankModelDefinition } from '../../../../../../hooks/useTankModelDefinition';
@@ -1,4 +1,4 @@
import { imgur, uniqueGuns } from '@blitzkit/core';
import { asset, imgur, resolveNearPenetration, resolvePenetrationCoefficient, TIER_ROMAN_NUMERALS, uniqueGuns } from '@blitzkit/core';
import {
CameraIcon,
CopyIcon,
@@ -35,6 +35,10 @@ import { ENVIRONMENTS } from '../../../Lighting';
import { QuickInputs } from '../../../QuickInputs';
import { Thicknesses } from '../../../Thicknesses';
import { DynamicArmorSwitcher } from './components/DynamicArmorSwitcher';
import { ThicknessRange } from '../../../../../../../../components/Armor/components/StaticArmor';
import { ModuleButton } from '../../../../../../../../components/ModuleButtons/ModuleButton';
import { SmallTankIcon } from '../../../../../../../../components/SmallTankIcon';
import { poseEvent, Pose } from '../../../../../../../../core/blitzkit/pose';
interface OptionsProps {
thicknessRange: ThicknessRange;
@@ -1,6 +1,12 @@
import { normalizeAngleRad } from '@blitzkit/core';
import { invalidate, ThreeEvent, useThree } from '@react-three/fiber';
import { memo, useRef } from 'react';
import { Group, Mesh, MeshStandardMaterial, Vector2 } from 'three';
import { ModelTankWrapper } from '../../../../../../../components/Armor/components/ModelTankWrapper';
import { applyPitchYawLimits } from '../../../../../../../core/blitz/applyPitchYawLimits';
import { hasEquipment } from '../../../../../../../core/blitzkit/hasEquipment';
import { jsxTree } from '../../../../../../../core/blitzkit/jsxTree';
import { modelTransformEvent } from '../../../../../../../core/blitzkit/modelTransform';
import { useModel } from '../../../../../../../hooks/useModel';
import { useTankModelDefinition } from '../../../../../../../hooks/useTankModelDefinition';
import { useTankTransform } from '../../../../../../../hooks/useTankTransform';
@@ -1,8 +1,9 @@
import { modelTransformEvent, ModelTransformEventData } from '@blitzkit/core';
import { HeightIcon, WidthIcon } from '@radix-ui/react-icons';
import { Flex, TextField } from '@radix-ui/themes';
import { useEffect, useRef } from 'react';
import { degToRad, radToDeg } from 'three/src/math/MathUtils';
import { applyPitchYawLimits } from '../../../../../../core/blitz/applyPitchYawLimits';
import { modelTransformEvent } from '../../../../../../core/blitzkit/modelTransform';
import { useEquipment } from '../../../../../../hooks/useEquipment';
import { useTankModelDefinition } from '../../../../../../hooks/useTankModelDefinition';
import * as Duel from '../../../../../../stores/duel';
@@ -1,5 +1,8 @@
import { memo, useRef } from 'react';
import { Group } from 'three';
import { correctZYTuple } from '../../../core/blitz/correctZYTuple';
import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId';
import { resolveArmor } from '../../../core/blitzkit/resolveThickness';
import { useArmor } from '../../../hooks/useArmor';
import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition';
import { useTankTransform } from '../../../hooks/useTankTransform';
@@ -1,9 +1,13 @@
import { ShellDefinition, resolveNearPenetration } from '@blitzkit/core';
import { isExplosive } from '@blitzkit/core/src/blitzkit/isExplosive';
import { resolvePenetrationCoefficient } from '@blitzkit/core/src/blitzkit/resolvePenetrationCoefficient';
import { useFrame } from '@react-three/fiber';
import { useEffect } from 'react';
import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three';
import { degToRad } from 'three/src/math/MathUtils';
import { canSplash } from '../../../../core/blitz/canSplash';
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
import * as Duel from '../../../../stores/duel';
import * as TankopediaPersistent from '../../../../stores/tankopediaPersistent';
import fragmentShader from './shaders/fragment.glsl';
@@ -16,6 +16,7 @@ import {
Quaternion,
} from 'three';
import { useFullScreen } from '../../../hooks/useFullScreen';
import * as TankopediaEphemeral from '../../../stores/tankopediaEphemeral';
import { ShotDisplayCard } from './ShotDisplayCard';
export const shotStatusColors: Record<
@@ -1,5 +1,8 @@
import { memo, useRef } from 'react';
import { Group, Plane, Scene, Vector3 } from 'three';
import { correctZYTuple } from '../../../core/blitz/correctZYTuple';
import { nameToArmorId } from '../../../core/blitzkit/nameToArmorId';
import { resolveArmor } from '../../../core/blitzkit/resolveThickness';
import { useArmor } from '../../../hooks/useArmor';
import { useModel } from '../../../hooks/useModel';
import { useTankModelDefinition } from '../../../hooks/useTankModelDefinition';
@@ -1,3 +1,4 @@
import { ShellDefinition, resolveNearPenetration } from '@blitzkit/core';
import { resolvePenetrationCoefficient } from '@blitzkit/core/src/blitzkit/resolvePenetrationCoefficient';
import { useEffect } from 'react';
import {
@@ -8,6 +9,8 @@ import {
ShaderMaterial,
} from 'three';
import { ArmorUserData, ExternalModuleVariant } from '../..';
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
import * as Duel from '../../../../../../stores/duel';
import { ArmorType } from '../../../SpacedArmorScene';
import fragmentShader from './shaders/fragment.glsl';
@@ -1,3 +1,4 @@
import { ShellDefinition, resolveNearPenetration } from '@blitzkit/core';
import { isExplosive } from '@blitzkit/core/src/blitzkit/isExplosive';
import { resolvePenetrationCoefficient } from '@blitzkit/core/src/blitzkit/resolvePenetrationCoefficient';
import { useEffect } from 'react';
@@ -9,6 +10,8 @@ import {
} from 'three';
import { degToRad } from 'three/src/math/MathUtils';
import { ArmorUserData } from '../..';
import { hasEquipment } from '../../../../../../core/blitzkit/hasEquipment';
import { jsxTree } from '../../../../../../core/blitzkit/jsxTree';
import * as Duel from '../../../../../../stores/duel';
import { ArmorType } from '../../../SpacedArmorScene';
import fragmentShader from './shaders/fragment.glsl';
@@ -1,3 +1,4 @@
import { ShellType, resolveNearPenetration } from '@blitzkit/core';
import { isExplosive } from '@blitzkit/core/src/blitzkit/isExplosive';
import { resolvePenetrationCoefficient } from '@blitzkit/core/src/blitzkit/resolvePenetrationCoefficient';
import { useThree } from '@react-three/fiber';
@@ -13,6 +14,9 @@ import {
Vector3,
} from 'three';
import { degToRad } from 'three/src/math/MathUtils';
import { hasEquipment } from '../../../../core/blitzkit/hasEquipment';
import { jsxTree } from '../../../../core/blitzkit/jsxTree';
import { discardClippingPlane } from '../../../../core/three/discardClippingPlane';
import * as Duel from '../../../../stores/duel';
import * as TankopediaEphemeral from '../../../../stores/tankopediaEphemeral';
import { ArmorType } from '../SpacedArmorScene';
@@ -1,4 +1,4 @@
import { asset } from '../../core/blitzkit/asset';
import { asset } from '@blitzkit/core';
import { GenericTankComponentButton } from './GenericTankComponentButton';
import { TankComponentButtonProps } from './TankComponentButton';
@@ -1,6 +1,5 @@
import { assertSecret } from '@blitzkit/core';
import { assertSecret, REGIONS } from '@blitzkit/core';
import strings from '@blitzkit/core/lang/en-US.json';
import { REGIONS } from '@blitzkit/core/src/blitzkit/regions';
import { Button, ButtonProps, Dialog, Flex } from '@radix-ui/themes';
import { Link } from '../../Link';
import { WargamingIcon } from '../../WargamingIcon';
@@ -1,4 +1,4 @@
import { asset } from '../core/blitzkit/asset';
import { asset } from '@blitzkit/core';
interface SmallTankIconProps {
id: number;
@@ -1,3 +0,0 @@
export function degressiveStat(crew: number) {
return 0.875 / (0.00375 * 100 * crew + 0.5) - 1;
}
@@ -1,8 +0,0 @@
import { BoundingBox } from '@blitzkit/core/src/blitzkit/modelDefinitions';
import { Vector3Tuple } from 'three';
export function normalizeBoundingBox(boundingBox: BoundingBox) {
return boundingBox.max.map(
(max, index) => max - boundingBox.min[index],
) as Vector3Tuple;
}
@@ -0,0 +1,9 @@
import { EventManager } from '@blitzkit/core/src/blitzkit/eventManager';
export enum Pose {
HullDown,
FaceHug,
Default,
}
export const poseEvent = new EventManager<Pose>();
@@ -1,3 +0,0 @@
export function progressiveStat(crew: number) {
return (0.00375 * 100 * crew + 0.5) / 0.875 - 1;
}
@@ -1,39 +0,0 @@
import { GunDefinition, ShellDefinition } from './tankDefinitions';
export function resolveDpm(
gun: GunDefinition,
shell: ShellDefinition,
damageCoefficient = 1,
reloadCoefficient = 1,
intraClipCoefficient = 1,
) {
const alpha = shell.damage.armor * damageCoefficient;
let dps: number;
if (gun.type === 'regular') {
dps = alpha / (reloadCoefficient * gun.reload);
} else if (gun.type === 'autoLoader') {
dps =
(alpha * gun.count) /
(gun.reload * reloadCoefficient +
(gun.count - 1) * gun.intraClip * intraClipCoefficient);
} else {
const mostOptimalShell = gun.reload.reduce<null | {
index: number;
reload: number;
}>((current, reloadRaw, index) => {
const reload =
reloadRaw * reloadCoefficient +
(index > 0 ? gun.intraClip * intraClipCoefficient : 0);
if (current === null || reload < current.reload) {
return { index, reload };
}
return current;
}, null)!;
dps = alpha / mostOptimalShell?.reload;
}
return dps * 60;
}
@@ -1,9 +0,0 @@
import { BoundingBox } from '@blitzkit/core/src/blitzkit/modelDefinitions';
import { Vector3Tuple } from 'three';
export function unionBoundingBox(a: BoundingBox, b: BoundingBox) {
return {
min: a.min.map((a, index) => Math.min(a, b.min[index])) as Vector3Tuple,
max: a.max.map((a, index) => Math.max(a, b.max[index])) as Vector3Tuple,
} satisfies BoundingBox;
}
+1
View File
@@ -1,3 +1,4 @@
import { asset } from '@blitzkit/core';
import { ObjectMap, useLoader } from '@react-three/fiber';
import { GLTF, GLTFLoader } from 'three-stdlib';
+1
View File
@@ -1,3 +1,4 @@
import { asset } from '@blitzkit/core';
import { ObjectMap, useLoader } from '@react-three/fiber';
import { Mesh, MeshStandardMaterial } from 'three';
import { GLTF, GLTFLoader } from 'three-stdlib';
@@ -1,6 +1,13 @@
import { I_HAT, J_HAT, K_HAT } from '@blitzkit/core';
import { RefObject, useEffect } from 'react';
import { Euler, Group, Vector3 } from 'three';
import { degToRad } from 'three/src/math/MathUtils';
import { correctZYTuple } from '../core/blitz/correctZYTuple';
import {
ModelTransformEventData,
modelTransformEvent,
} from '../core/blitzkit/modelTransform';
import { DuelMember } from '../stores/duel';
import { useTankModelDefinition } from './useTankModelDefinition';
export function useTankTransform(