From 5ec9099a0209b828b11ef2396e2715b09032a478 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 7 Apr 2026 06:55:29 +0200 Subject: [PATCH] Extract and use runtime water foam contact limit calculation in multiple methods --- src/runtime-three/runtime-host.js | 9 ++++++--- src/viewport-three/viewport-host.ts | 6 +++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/runtime-three/runtime-host.js b/src/runtime-three/runtime-host.js index 8b86ac88..56395ded 100644 --- a/src/runtime-three/runtime-host.js +++ b/src/runtime-three/runtime-host.js @@ -752,7 +752,7 @@ export class RuntimeHost { center: brush.center, rotationDegrees: brush.rotationDegrees, size: brush.size - }, contactBounds, brush.volume.water.foamContactLimit); + }, contactBounds, this.getRuntimeWaterFoamContactLimit(brush)); } collectRuntimePlayerWaterContactPatches(brush) { const playerBounds = this.createPlayerWaterContactBounds(); @@ -763,10 +763,13 @@ export class RuntimeHost { center: brush.center, rotationDegrees: brush.rotationDegrees, size: brush.size - }, [playerBounds], brush.volume.water.foamContactLimit); + }, [playerBounds], this.getRuntimeWaterFoamContactLimit(brush)); + } + getRuntimeWaterFoamContactLimit(brush) { + return brush.volume.mode === "water" ? brush.volume.water.foamContactLimit : 0; } mergeRuntimeWaterContactPatches(brush, staticContactPatches, dynamicContactPatches) { - return [...dynamicContactPatches, ...staticContactPatches].slice(0, brush.volume.water.foamContactLimit); + return [...dynamicContactPatches, ...staticContactPatches].slice(0, this.getRuntimeWaterFoamContactLimit(brush)); } updateRuntimeWaterContactUniforms() { for (const binding of this.runtimeWaterContactUniforms) { diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index fc97fecf..22e9fecc 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -3227,10 +3227,14 @@ export class ViewportHost { size: waterBrush.size }, contactBounds, - waterBrush.volume.water.foamContactLimit + this.getViewportWaterFoamContactLimit(waterBrush) ); } + private getViewportWaterFoamContactLimit(brush: BoxBrush) { + return brush.volume.mode === "water" ? brush.volume.water.foamContactLimit : 0; + } + private createEdgeHelper(brush: BoxBrush, edgeId: BoxEdgeId): { id: BoxEdgeId; line: Line } { const segment = getBoxBrushEdgeWorldSegment(brush, edgeId); const geometry = new BufferGeometry().setFromPoints([