From 099e878c552409eddec0be82df2744bc0bc7f281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:39:56 -0500 Subject: [PATCH] fix: invalidate frame on uniform change --- .../components/PrimaryArmorSceneComponent/index.tsx | 11 ++++++++++- .../components/SpacedArmorSubExternal/index.tsx | 6 ++++++ .../components/SpacedArmorSubSpaced/index.tsx | 7 +++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx index 34e63e1f9..5fb0e17f2 100644 --- a/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx @@ -4,7 +4,7 @@ import { isExplosive, resolvePenetrationCoefficient, } from '@blitzkit/core'; -import { useFrame } from '@react-three/fiber'; +import { invalidate, useFrame } from '@react-three/fiber'; import { useEffect } from 'react'; import { MeshBasicMaterial, Object3D, ShaderMaterial, Vector2 } from 'three'; import { degToRad } from 'three/src/math/MathUtils.js'; @@ -74,12 +74,15 @@ export function PrimaryArmorSceneComponent({ const duel = duelStore.getState(); await handleProtagonistEquipmentChange(duel.protagonist.equipmentMatrix); await handleAntagonistEquipmentChange(duel.antagonist.equipmentMatrix); + invalidate(); } function handleGreenPenetrationChange(greenPenetration: boolean) { material.uniforms.greenPenetration.value = greenPenetration; + invalidate(); } function handleOpaqueChange(opaque: boolean) { material.uniforms.opaque.value = opaque; + invalidate(); } function handleWireframeChange(wireframe: boolean) { material.wireframe = wireframe; @@ -96,6 +99,8 @@ export function PrimaryArmorSceneComponent({ material.uniforms.thickness.value = hasEnhancedArmor ? thickness * 1.03 : thickness; + + invalidate(); } async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) { const duel = duelStore.getState(); @@ -110,6 +115,8 @@ export function PrimaryArmorSceneComponent({ material.uniforms.penetration.value = penetration * resolvePenetrationCoefficient(hasCalibratedShells, shell.type); + + invalidate(); } handleShellChange(duelStore.getState().antagonist.shell); @@ -156,6 +163,8 @@ export function PrimaryArmorSceneComponent({ spacedArmorRenderTarget.depthTexture; material.uniforms.inverseProjectionMatrix.value = camera.projectionMatrixInverse; + + invalidate(); }); return ( diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx index a93b700c5..aafd08e77 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx @@ -2,6 +2,7 @@ import { resolvePenetrationCoefficient, type ShellDefinition, } from '@blitzkit/core'; +import { invalidate } from '@react-three/fiber'; import { useEffect } from 'react'; import { AdditiveBlending, @@ -51,6 +52,7 @@ export function SpacedArmorSubExternal({ useEffect(() => { function handleShellChange(shell: ShellDefinition) { material.uniforms.penetration.value = shell.penetration.near; + invalidate(); } async function handleProtagonistEquipmentChange( equipment: EquipmentMatrix, @@ -64,6 +66,8 @@ export function SpacedArmorSubExternal({ material.uniforms.thickness.value = hasEnhancedArmor ? thickness * 1.03 : thickness; + + invalidate(); } async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) { const duel = duelStore.getState(); @@ -78,6 +82,8 @@ export function SpacedArmorSubExternal({ material.uniforms.penetration.value = penetration * resolvePenetrationCoefficient(hasCalibratedShells, shell.type); + + invalidate(); } handleShellChange(duelStore.getState().antagonist.shell); diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx index 11ce8baa7..dcf4afb79 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx @@ -3,6 +3,7 @@ import { resolvePenetrationCoefficient, type ShellDefinition, } from '@blitzkit/core'; +import { invalidate } from '@react-three/fiber'; import { useEffect } from 'react'; import { AdditiveBlending, @@ -61,6 +62,8 @@ export function SpacedArmorSubSpaced({ material.uniforms.normalization.value = degToRad( shell.normalization ?? 0, ); + + invalidate(); } async function handleProtagonistEquipmentChange( equipment: EquipmentMatrix, @@ -74,6 +77,8 @@ export function SpacedArmorSubSpaced({ material.uniforms.thickness.value = hasEnhancedArmor ? thickness * 1.03 : thickness; + + invalidate(); } async function handleAntagonistEquipmentChange(equipment: EquipmentMatrix) { const duel = duelStore.getState(); @@ -88,6 +93,8 @@ export function SpacedArmorSubSpaced({ material.uniforms.penetration.value = penetration * resolvePenetrationCoefficient(hasCalibratedShells, shell.type); + + invalidate(); } handleShellChange(duelStore.getState().antagonist.shell);