diff --git a/scripts/buildAssets/tankArmors.ts b/scripts/buildAssets/tankArmors.ts index 29d39bc2e..b17791f4b 100644 --- a/scripts/buildAssets/tankArmors.ts +++ b/scripts/buildAssets/tankArmors.ts @@ -20,6 +20,8 @@ export async function buildTankArmors() { await Promise.all( nations.map(async (nation) => { + if (nation !== 'japan') return; + const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( `${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, ); @@ -28,8 +30,6 @@ export async function buildTankArmors() { Object.entries(tanks.root).map(async ([tankKey, tank]) => { const id = toUniqueId(nation, tank.id); - if (id !== 9489) return; - console.log(`Building armor ${id} @ ${nation}/${tankKey}`); const model = await extractArmor(DATA, `${nation}-${tankKey}`); diff --git a/scripts/buildAssets/tankModels.ts b/scripts/buildAssets/tankModels.ts index dacd2a923..f75dfa297 100644 --- a/scripts/buildAssets/tankModels.ts +++ b/scripts/buildAssets/tankModels.ts @@ -27,6 +27,8 @@ export async function buildTankModels() { await Promise.all( nations.map(async (nation) => { + if (nation !== 'japan') return; + const tanks = await readXMLDVPL<{ root: VehicleDefinitionList }>( `${DATA}/${POI.vehicleDefinitions}/${nation}/list.xml.dvpl`, ); @@ -43,8 +45,6 @@ export async function buildTankModels() { Object.entries(tanks.root).map(async ([tankKey, tank]) => { const id = toUniqueId(nation, tank.id); - if (id !== 9489) return; - console.log(`Building model ${id} @ ${nation}/${tankKey}`); const parameters = await readYAMLDVPL( diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx index b5ad20735..dc6fe277e 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/ArmorHighlighting.tsx @@ -123,20 +123,13 @@ export function ArmorHighlighting({ duel }: ArmorHighlightingProps) { turretModelDefinition.gunOrigin[1], -turretModelDefinition.gunOrigin[2], ).applyAxisAngle(X_AXIS, Math.PI / 2); - const maxExternalModuleThickness = Math.max( + const maxThickness = Math.max( tankModelDefinition.trackThickness, gunModelDefinition.barrelThickness, - ); - const maxSpacedArmorThickness = Math.max( ...armorNodes .map((node) => { const armorId = nameToArmorId(node.name); - const { spaced, thickness } = resolveArmor( - tankModelDefinition.armor, - armorId, - ); - - return spaced ? thickness : null; + return resolveArmor(tankModelDefinition.armor, armorId).thickness; }) .filter(Boolean), ); @@ -160,8 +153,7 @@ export function ArmorHighlighting({ duel }: ArmorHighlightingProps) { return ( (({ duel }) => { const maxThickness = Math.max( tankModelDefinition.trackThickness, gunModelDefinition.barrelThickness, + ...armorNodes + .map((node) => { + const armorId = nameToArmorId(node.name); + return resolveArmor(tankModelDefinition.armor, armorId).thickness; + }) + .filter(Boolean), ); const turretOrigin = new Vector3( tankModelDefinition.turretOrigin[0], diff --git a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx index 9c38430a8..d776e7eab 100644 --- a/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx +++ b/src/app/tools/tankopedia/[id]/components/Model/components/TankArmor/components/SpacedArmorDepth.tsx @@ -130,15 +130,12 @@ export const SpacedArmorDepth = memo(({ duel }) => { const gunModelDefinition = turretModelDefinition.guns[duel.protagonist.gun.id]; const maxThickness = Math.max( + tankModelDefinition.trackThickness, + gunModelDefinition.barrelThickness, ...armorNodes .map((node) => { const armorId = nameToArmorId(node.name); - const { spaced, thickness } = resolveArmor( - tankModelDefinition.armor, - armorId, - ); - - return spaced ? thickness : null; + return resolveArmor(tankModelDefinition.armor, armorId).thickness; }) .filter(Boolean), ); diff --git a/src/components/ArmorMesh/components/Armor/index.tsx b/src/components/ArmorMesh/components/Armor/index.tsx index cbb785f4e..142a47613 100644 --- a/src/components/ArmorMesh/components/Armor/index.tsx +++ b/src/components/ArmorMesh/components/Armor/index.tsx @@ -17,15 +17,13 @@ interface ArmorMeshProps extends MeshProps { duel: Duel; isExternalModule?: boolean; thickness: number; - maxExternalModuleThickness: number; - maxSpacedArmorThickness: number; + maxThickness: number; } export function ArmorMesh({ isExternalModule = false, thickness, - maxExternalModuleThickness, - maxSpacedArmorThickness, + maxThickness, duel, ...props }: ArmorMeshProps) { @@ -78,8 +76,7 @@ export function ArmorMesh({ zNear: { value: camera.near }, zFar: { value: camera.far }, greenPenetration: { value: greenPenetration }, - maxExternalModuleThickness: { value: maxExternalModuleThickness }, - maxSpacedArmorThickness: { value: maxSpacedArmorThickness }, + maxThickness: { value: maxThickness }, isExplosive: { value: isExplosive(shell.type) }, canSplash: { value: canSplash(shell.type) }, isExternalModule: { value: isExternalModule }, diff --git a/src/components/ArmorMesh/components/Armor/shaders/fragment.glsl b/src/components/ArmorMesh/components/Armor/shaders/fragment.glsl index c250a8223..4f3c07e2a 100644 --- a/src/components/ArmorMesh/components/Armor/shaders/fragment.glsl +++ b/src/components/ArmorMesh/components/Armor/shaders/fragment.glsl @@ -12,8 +12,7 @@ uniform sampler2D spacedArmorDepth; uniform sampler2D spacedArmorMask; uniform vec2 resolution; varying mat4 vProjectionMatrix; -uniform float maxExternalModuleThickness; -uniform float maxSpacedArmorThickness; +uniform float maxThickness; uniform bool greenPenetration; float depthToDistance(float depth) { @@ -46,7 +45,7 @@ void main() { float splashChance = -1.0; bool threeCalibersRule = caliber > 3.0 * thickness; float normalizedSpacedArmorThickness = spacedArmorMaskColor.g; - float spacedArmorNominalThickness = normalizedSpacedArmorThickness * maxSpacedArmorThickness; + float spacedArmorNominalThickness = normalizedSpacedArmorThickness * maxThickness; bool spadedArmorThreeCalibersRule = isUnderSpacedArmor && caliber > 3.0 * spacedArmorNominalThickness; bool ricochetSpacedArmor = isUnderSpacedArmor && !spadedArmorThreeCalibersRule && spacedArmorAngle >= ricochet; bool ricochetCoreArmor = !ricochetSpacedArmor && !isUnderExternalModule && !isExternalModule && !isExplosive && !threeCalibersRule && angle >= ricochet; @@ -59,7 +58,7 @@ void main() { if (isUnderExternalModule) { float normalizedExternalModuleThickness = externalModuleMaskColor.g; - float externalModuleThickness = normalizedExternalModuleThickness * maxExternalModuleThickness; + float externalModuleThickness = normalizedExternalModuleThickness * maxThickness; piercedPenetration -= externalModuleThickness; } diff --git a/src/components/ArmorMesh/components/SpacedArmorDepth/shaders/fragment.glsl b/src/components/ArmorMesh/components/SpacedArmorDepth/shaders/fragment.glsl index 4591101bd..f1ee53a9f 100644 --- a/src/components/ArmorMesh/components/SpacedArmorDepth/shaders/fragment.glsl +++ b/src/components/ArmorMesh/components/SpacedArmorDepth/shaders/fragment.glsl @@ -8,5 +8,5 @@ void main() { float dotProduct = dot(normalizedNormal, -normalizedViewPosition); float angle = acos(dotProduct); - csm_FragColor = vec4(angle / PI, thickness / maxThickness, 0.0, 1.0); + csm_FragColor = vec4(angle / (PI / 2.0), thickness / maxThickness, 0.0, 1.0); } \ No newline at end of file