diff --git a/src/components/Armor/components/CoreArmorSceneComponent/index.tsx b/src/components/Armor/components/CoreArmorSceneComponent/index.tsx index 2f83c6036..de5c27e95 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/index.tsx +++ b/src/components/Armor/components/CoreArmorSceneComponent/index.tsx @@ -57,7 +57,7 @@ export function CoreArmorSceneComponent({ }); useEffect(() => { - function handleShellChange(shell: ShellDefinition) { + async function handleShellChange(shell: ShellDefinition) { material.uniforms.caliber.value = shell.caliber; material.uniforms.ricochet.value = degToRad(shell.ricochet ?? 90); material.uniforms.normalization.value = degToRad( @@ -68,10 +68,9 @@ export function CoreArmorSceneComponent({ material.uniforms.damage.value = shell.damage.armor; material.uniforms.explosionRadius.value = shell.explosionRadius; - handleProtagonistEquipmentChange( - useDuel.getState().protagonist!.equipment, - ); - handleAntagonistEquipmentChange(useDuel.getState().antagonist!.equipment); + const duel = useDuel.getState(); + await handleProtagonistEquipmentChange(duel.protagonist!.equipment); + await handleAntagonistEquipmentChange(duel.antagonist!.equipment); } function handleVisualChange( visual: TankopediaPersistent['model']['visual'], @@ -93,6 +92,7 @@ export function CoreArmorSceneComponent({ const shell = useDuel.getState().antagonist!.shell; const penetration = resolveNearPenetration(shell.penetration); const hasCalibratedShells = await hasEquipment(103, true, equipment); + material.uniforms.penetration.value = hasCalibratedShells ? penetration * (isExplosive(shell.type) ? 1.1 : 1.05) : penetration; diff --git a/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl b/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl index 0e18651f8..195bbf966 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl +++ b/src/components/Armor/components/CoreArmorSceneComponent/shaders/fragment.glsl @@ -1,6 +1,5 @@ varying vec3 vNormal; varying vec3 vViewPosition; -varying mat4 vProjectionMatrix; uniform float thickness; uniform float penetration; @@ -15,14 +14,13 @@ uniform float explosionRadius; uniform bool greenPenetration; uniform bool opaque; uniform bool useSpacedArmor; -uniform mat4 inverseViewProjectionMatrix; uniform highp sampler2D spacedArmorBuffer; uniform highp sampler2D spacedArmorDepth; float depthToDistance(float depth) { vec4 clipPosition = vec4(gl_FragCoord.xy / resolution * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); - vec4 eyePosition = inverseViewProjectionMatrix * clipPosition; + vec4 eyePosition = viewMatrix * clipPosition; return length(eyePosition.xyz / eyePosition.w); } diff --git a/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl b/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl index 0e4d1407f..82f94e255 100644 --- a/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl +++ b/src/components/Armor/components/CoreArmorSceneComponent/shaders/vertex.glsl @@ -1,12 +1,10 @@ varying vec3 vNormal; varying vec3 vViewPosition; -varying mat4 vProjectionMatrix; void main() { vec4 vViewPosition4 = modelViewMatrix * vec4(position, 1.0); vViewPosition = vViewPosition4.xyz; - vProjectionMatrix = projectionMatrix; vNormal = normalMatrix * normal; gl_Position = projectionMatrix * vViewPosition4;