diff --git a/apps/editor/components/build-tab.tsx b/apps/editor/components/build-tab.tsx index 175f3c8a..32af88e0 100644 --- a/apps/editor/components/build-tab.tsx +++ b/apps/editor/components/build-tab.tsx @@ -1,6 +1,6 @@ 'use client' -import { MaterialPaintPanel, useEditor } from '@pascal-app/editor' +import { MaterialPaintPanel, triggerSFX, useEditor } from '@pascal-app/editor' import Image from 'next/image' import { useCallback, useEffect, useRef } from 'react' import { @@ -131,7 +131,11 @@ export function BuildTab() { ? 'bg-primary/10 ring-1 ring-primary/50' : 'bg-muted/40 opacity-70 grayscale hover:bg-muted hover:opacity-100 hover:grayscale-0', )} - onClick={() => handleTypeClick(type)} + onClick={() => { + triggerSFX('sfx:menu-click') + handleTypeClick(type) + }} + onMouseEnter={() => triggerSFX('sfx:menu-hover')} type="button" > [...currentPoints, point]) setCursorPoint(point) }, diff --git a/packages/editor/src/components/tools/roof/roof-tool.tsx b/packages/editor/src/components/tools/roof/roof-tool.tsx index 2290a7f5..773aa396 100644 --- a/packages/editor/src/components/tools/roof/roof-tool.tsx +++ b/packages/editor/src/components/tools/roof/roof-tool.tsx @@ -295,6 +295,7 @@ export const RoofTool: React.FC = () => { useAlignmentGuides.getState().clear() } else { corner1Ref.current = [gridX, y, gridZ] + sfxEmitter.emit('sfx:structure-build-start') setPreview((prev) => ({ ...prev, corner1: corner1Ref.current, diff --git a/packages/editor/src/components/tools/zone/zone-tool.tsx b/packages/editor/src/components/tools/zone/zone-tool.tsx index 0f0ae0e1..73006499 100644 --- a/packages/editor/src/components/tools/zone/zone-tool.tsx +++ b/packages/editor/src/components/tools/zone/zone-tool.tsx @@ -236,7 +236,9 @@ export const ZoneTool: React.FC = () => { mainLineRef.current.visible = false closingLineRef.current.visible = false } else { - // Add point to polygon + // Add point to polygon. Every non-closing vertex is a "start" tick; + // closing the polygon above fires the structure-build (end) cue. + sfxEmitter.emit('sfx:structure-build-start') pointsRef.current = [...pointsRef.current, clickPoint] updatePreview() } diff --git a/packages/editor/src/components/ui/action-menu/action-button.tsx b/packages/editor/src/components/ui/action-menu/action-button.tsx index cb48c309..6f4c4eb3 100644 --- a/packages/editor/src/components/ui/action-menu/action-button.tsx +++ b/packages/editor/src/components/ui/action-menu/action-button.tsx @@ -5,6 +5,7 @@ import { TooltipContent, TooltipTrigger, } from './../../../components/ui/primitives/tooltip' +import { triggerSFX } from './../../../lib/sfx-bus' import { cn } from './../../../lib/utils' interface ActionButtonProps extends React.ComponentProps { @@ -17,7 +18,18 @@ interface ActionButtonProps extends React.ComponentProps { export const ActionButton = React.forwardRef( ( - { className, children, label, shortcut, isActive, tooltipContent, tooltipSide, ...props }, + { + className, + children, + label, + shortcut, + isActive, + tooltipContent, + tooltipSide, + onClick, + onMouseEnter, + ...props + }, ref, ) => { return ( @@ -25,6 +37,14 @@ export const ActionButton = React.forwardRef