From 2ddf10f3f0c89000f0a583e5be01f3eac70add73 Mon Sep 17 00:00:00 2001 From: Aymeric Rabot Date: Sat, 28 Feb 2026 01:39:35 -0500 Subject: [PATCH] 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. --- apps/editor/components/tools/door/door-tool.tsx | 2 ++ apps/editor/components/tools/window/window-tool.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/apps/editor/components/tools/door/door-tool.tsx b/apps/editor/components/tools/door/door-tool.tsx index 18a88925..6e424f32 100644 --- a/apps/editor/components/tools/door/door-tool.tsx +++ b/apps/editor/components/tools/door/door-tool.tsx @@ -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() } diff --git a/apps/editor/components/tools/window/window-tool.tsx b/apps/editor/components/tools/window/window-tool.tsx index 67949f21..8676c2cd 100644 --- a/apps/editor/components/tools/window/window-tool.tsx +++ b/apps/editor/components/tools/window/window-tool.tsx @@ -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() }