Play SFX when placing doors and windows

Add audio feedback for item placement by importing sfxEmitter and emitting 'sfx:item-place' in DoorTool and WindowTool. This change triggers a placement sound when a door or window node is created, improving UX by confirming successful placement.
This commit is contained in:
Aymeric Rabot
2026-02-28 01:39:35 -05:00
parent 7dde5dc578
commit 2ddf10f3f0
2 changed files with 4 additions and 0 deletions
@@ -19,6 +19,7 @@ import {
snapToHalf,
} from '../item/placement-math'
import { clampToWall, hasWallChildOverlap, wallLocalToWorld } from './door-math'
import { sfxEmitter } from '../../../lib/sfx-bus'
const edgeMaterial = new LineBasicNodeMaterial({
color: 0xef4444,
@@ -219,6 +220,7 @@ export const DoorTool: React.FC = () => {
useScene.getState().createNode(node, event.node.id as AnyNodeId)
useViewer.getState().setSelection({ selectedIds: [node.id] })
useScene.temporal.getState().pause()
sfxEmitter.emit('sfx:item-place')
event.stopPropagation()
}
@@ -19,6 +19,7 @@ import {
snapToHalf,
} from '../item/placement-math'
import { clampToWall, hasWallChildOverlap, wallLocalToWorld } from './window-math'
import { sfxEmitter } from '../../../lib/sfx-bus'
// Shared edge material — reuse across renders, just toggle color
const edgeMaterial = new LineBasicNodeMaterial({
@@ -228,6 +229,7 @@ export const WindowTool: React.FC = () => {
useScene.getState().createNode(node, event.node.id as AnyNodeId)
useViewer.getState().setSelection({ selectedIds: [node.id] })
useScene.temporal.getState().pause()
sfxEmitter.emit('sfx:item-place')
event.stopPropagation()
}