From 7372075ba3f4bd374e6eaee392c15fc8e732c11e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 13 Apr 2024 10:36:13 -0500 Subject: [PATCH] fix: remove duplicate mantlets --- scripts/buildAssets/definitions.ts | 12 ++++++++++++ scripts/buildAssets/tankIcons.ts | 14 ++++++++++++++ .../[id]/components/Model/TankSandbox.tsx | 4 ++++ .../Model/components/TankArmor/index.tsx | 0 .../Armor/components/SpacedArmorScene.tsx | 5 ++++- .../components/SpacedArmorSubExternal/index.tsx | 7 +++++++ .../SpacedArmorSubExternal/shaders/fragment.glsl | 4 ++++ .../SpacedArmorSubExternal/shaders/vertex.glsl | 7 +++++-- .../components/SpacedArmorSubSpaced/index.tsx | 1 + .../components/SpacedArmorSceneComponent/index.tsx | 4 ++++ src/core/blitzkrieg/modelDefinitions.ts | 1 + src/core/blitzkrieg/provisionDefinitions.ts | 2 -- 12 files changed, 56 insertions(+), 5 deletions(-) delete mode 100644 src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/index.tsx diff --git a/scripts/buildAssets/definitions.ts b/scripts/buildAssets/definitions.ts index e3a99fbf5..ac27aa7c8 100644 --- a/scripts/buildAssets/definitions.ts +++ b/scripts/buildAssets/definitions.ts @@ -739,6 +739,17 @@ export async function definitions(production: boolean) { const gunArmor: ModelArmor = { thickness: {} }; const shotDispersionFactors = gun.shotDispersionFactors ?? gunListEntry.shotDispersionFactors; + const maskName = `gun_${gunModel.toString().padStart(2, '0')}`; + const maskEnabled = + tankParameters.maskSlice?.[maskName]?.enabled ?? false; + let mask: number | undefined; + + if (maskEnabled) { + const maskRaw = tankParameters.maskSlice![maskName]!; + mask = maskRaw.planePosition[1]; + } else { + mask = undefined; + } totalUnlocks.push(gun.unlocks); Object.keys(gun.armor) @@ -788,6 +799,7 @@ export async function definitions(production: boolean) { modelDefinitions[tankId].turrets[turretId].guns[gunId] = { armor: gunArmor, model: gunModel, + mask, thickness: gun.armor.gun === undefined ? 0 diff --git a/scripts/buildAssets/tankIcons.ts b/scripts/buildAssets/tankIcons.ts index 5eaf437ff..11824c524 100644 --- a/scripts/buildAssets/tankIcons.ts +++ b/scripts/buildAssets/tankIcons.ts @@ -26,6 +26,20 @@ export interface TankParameters { averageThickness?: Record; }; }; + maskSlice?: { + [key: string]: + | { + enabled: boolean; + planePosition: Vector3Tuple; + planeNormal: Vector3Tuple; + planeAxis: Vector3Tuple; + frustumConeBaseRadius: number; + frustumConeAngleDegrees: number; + planeSliceMode: number; + frustumConeSliceMode: number; + } + | undefined; + }; } export async function tankIcons(production: boolean) { diff --git a/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx b/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx index c8971db51..05e98cf02 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/TankSandbox.tsx @@ -199,6 +199,10 @@ export function TankSandbox() { {loadModel ? (
(({ scene }) => { turretModelDefinition.gunOrigin[1], -turretModelDefinition.gunOrigin[2], ).applyAxisAngle(I_HAT, Math.PI / 2); + const maskOrigin = + gunModelDefinition.mask! + hullOrigin.y + turretOrigin.y + gunOrigin.y; return ( (({ scene }) => { thickness={gunModelDefinition.thickness} variant="gun" node={node} + clip={new Plane(new Vector3(0, 0, -1), -maskOrigin)} /> ); })} diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx index 2db0bb49b..f0f74327e 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx @@ -3,6 +3,7 @@ import { AdditiveBlending, MeshBasicMaterial, Object3D, + Plane, ShaderMaterial, } from 'three'; import { ArmorUserData, ExternalModuleVariant } from '../..'; @@ -20,12 +21,14 @@ interface SpacedArmorSubExternalProps { node: Object3D; thickness: number; variant: ExternalModuleVariant; + clip?: Plane; } export function SpacedArmorSubExternal({ node, thickness, variant, + clip, }: SpacedArmorSubExternalProps) { const material = new ShaderMaterial({ fragmentShader, @@ -34,6 +37,8 @@ export function SpacedArmorSubExternal({ depthTest: true, depthWrite: false, blending: AdditiveBlending, + clippingPlanes: clip ? [clip] : undefined, + clipping: true, uniforms: { thickness: { value: null }, @@ -108,6 +113,7 @@ export function SpacedArmorSubExternal({ colorWrite: false, depthTest: true, depthWrite: true, + clippingPlanes: clip ? [clip] : undefined, }), onClick() {}, userData: { @@ -116,6 +122,7 @@ export function SpacedArmorSubExternal({ variant, } satisfies ArmorUserData, })} + {jsxTree(node, { renderOrder: 4, material, diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl index 0ab70c10d..ca6251f89 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/fragment.glsl @@ -1,6 +1,10 @@ uniform float thickness; uniform float penetration; +#include + void main() { + #include + gl_FragColor = vec4(thickness / penetration, 0.0, 0.0, 1.0); } \ No newline at end of file diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl index 5f9df37ef..43b37bc3c 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/shaders/vertex.glsl @@ -1,4 +1,7 @@ +#include + void main() { - vec4 vViewPosition4 = modelViewMatrix * vec4(position, 1.0); - gl_Position = projectionMatrix * vViewPosition4; + #include + #include + #include } \ No newline at end of file diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx index 73f63049d..c283f3ce2 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx @@ -122,6 +122,7 @@ export function SpacedArmorSubSpaced({ thickness, } satisfies ArmorUserData, })} + {jsxTree(node, { renderOrder: 5, material: depthWriteMaterial, diff --git a/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx b/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx index 28c0c82a2..607be66ec 100644 --- a/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx +++ b/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx @@ -3,6 +3,7 @@ import { Intersection, MeshBasicMaterial, Object3D, + Plane, Quaternion, Raycaster, Scene, @@ -29,6 +30,7 @@ type SpacedArmorSceneComponentProps = { node: Object3D; thickness: number; scene: Scene; + clip?: Plane; } & ( | { type: Exclude; @@ -71,6 +73,7 @@ export function SpacedArmorSceneComponent({ node, thickness, scene, + clip, ...props }: SpacedArmorSceneComponentProps) { const camera = useThree((state) => state.camera); @@ -333,6 +336,7 @@ export function SpacedArmorSceneComponent({ node={node} thickness={thickness} variant={props.variant} + clip={clip} /> )} diff --git a/src/core/blitzkrieg/modelDefinitions.ts b/src/core/blitzkrieg/modelDefinitions.ts index 1f49f358f..58f5b5dfe 100644 --- a/src/core/blitzkrieg/modelDefinitions.ts +++ b/src/core/blitzkrieg/modelDefinitions.ts @@ -47,6 +47,7 @@ interface GunModelDefinition { thickness: number; model: number; pitch: PitchLimits; + mask?: number; } export interface PitchLimits { min: number; diff --git a/src/core/blitzkrieg/provisionDefinitions.ts b/src/core/blitzkrieg/provisionDefinitions.ts index 46393d483..9f70f90af 100644 --- a/src/core/blitzkrieg/provisionDefinitions.ts +++ b/src/core/blitzkrieg/provisionDefinitions.ts @@ -17,5 +17,3 @@ export interface ProvisionDefinitions { export const provisionDefinitions = fetchCdonLz4( asset('definitions/provisions.cdon.lz4'), ); - -provisionDefinitions.then(console.log);