From 891dde40b6ebad3fbf00e9ad2f5022c326742927 Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Thu, 11 Sep 2025 13:10:30 +0200 Subject: [PATCH] added sound setting --- shared/user-settings.ts | 1 + src/hooks/useAudio.ts | 9 ++++++++- src/views/settings/Settings.tsx | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/shared/user-settings.ts b/shared/user-settings.ts index c80086d..f6dfa10 100644 --- a/shared/user-settings.ts +++ b/shared/user-settings.ts @@ -4,6 +4,7 @@ export const userSettings = z.object({ placeQuestionMark: z.boolean().default(false), longPressOnDesktop: z.boolean().default(false), showRevealAnimation: z.boolean().default(true), + soundEnabled: z.boolean().default(true), }); export type UserSettings = z.infer; diff --git a/src/hooks/useAudio.ts b/src/hooks/useAudio.ts index f9b2b6c..5408117 100644 --- a/src/hooks/useAudio.ts +++ b/src/hooks/useAudio.ts @@ -1,4 +1,5 @@ import { useCallback, useRef } from 'react'; +import { useWSQuery } from '../hooks'; interface AudioOptions { volume?: number; @@ -7,8 +8,14 @@ interface AudioOptions { export const useAudio = (src: string, options: AudioOptions = {}) => { const audioRef = useRef(null); + const { data: settings } = useWSQuery("user.getSettings", null); const play = useCallback(() => { + // Check if sound is disabled in settings + if (settings && settings.soundEnabled === false) { + return; + } + if (!audioRef.current) { audioRef.current = new Audio(src); audioRef.current.volume = options.volume ?? 1; @@ -20,7 +27,7 @@ export const useAudio = (src: string, options: AudioOptions = {}) => { audioRef.current.play().catch((error) => { console.warn('Audio play failed:', error); }); - }, [src, options.volume, options.loop]); + }, [src, options.volume, options.loop, settings]); const pause = useCallback(() => { audioRef.current?.pause(); diff --git a/src/views/settings/Settings.tsx b/src/views/settings/Settings.tsx index 5b8d1da..b1c001d 100644 --- a/src/views/settings/Settings.tsx +++ b/src/views/settings/Settings.tsx @@ -71,6 +71,15 @@ const Settings = () => { refetch(); }} /> + Enable or disable sound effects in the game.} + value={settings?.soundEnabled ?? true} + onChange={async (value) => { + await updateSettings.mutateAsync({ soundEnabled: value }); + refetch(); + }} + />