feat(sfx): play paint_apply sound when a material is painted
Registers a paintApply SFX (with rate/volume jitter + a 60ms gap so rapid multi-face painting doesn't machine-gun), wires the sfx:paint-apply bus event, and emits it from the material-paint click chokepoint in the selection manager (fires on apply, not hover/preview). Adds the audio asset to the editor app's public resources. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ee4d6de206
commit
bf9246cd36
Binary file not shown.
@@ -1157,6 +1157,7 @@ export const SelectionManager = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interaction.apply()
|
interaction.apply()
|
||||||
|
sfxEmitter.emit('sfx:paint-apply')
|
||||||
if (activePreview?.key === interaction.key) {
|
if (activePreview?.key === interaction.key) {
|
||||||
activePreview = null
|
activePreview = null
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ type SFXEvents = {
|
|||||||
'sfx:snapshot-capture': undefined
|
'sfx:snapshot-capture': undefined
|
||||||
'sfx:menu-hover': undefined
|
'sfx:menu-hover': undefined
|
||||||
'sfx:menu-click': undefined
|
'sfx:menu-click': undefined
|
||||||
|
'sfx:paint-apply': undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,6 +46,7 @@ export function initSFXBus() {
|
|||||||
sfxEmitter.on('sfx:snapshot-capture', () => playSFX('snapshotCapture'))
|
sfxEmitter.on('sfx:snapshot-capture', () => playSFX('snapshotCapture'))
|
||||||
sfxEmitter.on('sfx:menu-hover', () => playSFX('menuHover'))
|
sfxEmitter.on('sfx:menu-hover', () => playSFX('menuHover'))
|
||||||
sfxEmitter.on('sfx:menu-click', () => playSFX('menuClick'))
|
sfxEmitter.on('sfx:menu-click', () => playSFX('menuClick'))
|
||||||
|
sfxEmitter.on('sfx:paint-apply', () => playSFX('paintApply'))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -100,6 +100,15 @@ export const SFX: Record<string, SFXConfig> = {
|
|||||||
volumeRange: [0.5, 0.6],
|
volumeRange: [0.5, 0.6],
|
||||||
panJitter: 0.1,
|
panJitter: 0.1,
|
||||||
},
|
},
|
||||||
|
// Fired when a material is applied to a surface in paint mode. Painting can
|
||||||
|
// fire in quick succession across faces, so keep variation + a small gap.
|
||||||
|
paintApply: {
|
||||||
|
src: '/audios/sfx/paint_apply.mp3',
|
||||||
|
rateRange: [0.95, 1.05],
|
||||||
|
volumeRange: [0.85, 1.0],
|
||||||
|
panJitter: 0.12,
|
||||||
|
minIntervalMs: 60,
|
||||||
|
},
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export type SFXName = keyof typeof SFX
|
export type SFXName = keyof typeof SFX
|
||||||
|
|||||||
Reference in New Issue
Block a user