From ed1815eddcc92b3830debdc7a06b919bf051499d Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Mon, 29 Jan 2024 12:50:36 +0100 Subject: [PATCH] Properly change volume --- game/main.c | 5 +++++ game/sounds.c | 14 ++++++++++++++ game/sounds.h | 6 ++++++ game/systems/s_ui.c | 2 ++ game/ui_widgets.c | 4 +++- settings.ini | Bin 16 -> 16 bytes 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/game/main.c b/game/main.c index 2b86069..ff8c959 100644 --- a/game/main.c +++ b/game/main.c @@ -202,6 +202,9 @@ bool init(void *userData) { ECS_COMPONENT_DEFINE(ECS, SoundState); ecs_singleton_set(ECS, SoundState, {}); SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState); + sounds->masterVolume = 0.5f; + sounds->musicVolume = 0.5f; + sounds->soundVolume = 0.5f; soundsLoad(sounds, SOUND_WOOD_PUNCH, 0.1f, "assets/sounds/wood hit 17.wav"); } setScreen(game, SCREEN_MAIN_MENU); @@ -392,6 +395,8 @@ void update(float dt, void *userData) { } else { game->options = getDefaultOptions(); } + SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState); + soundsApplyVolume(sounds, opts.master, opts.music, opts.sound); optsLoaded = true; } diff --git a/game/sounds.c b/game/sounds.c index b779ea1..cd27653 100644 --- a/game/sounds.c +++ b/game/sounds.c @@ -1,5 +1,17 @@ #include "sounds.h" +void soundsApplyVolume(SoundState *sounds, f32 master, f32 music, f32 sound) { + SetMasterVolume(master); + if (sounds->musicLoaded) + SetMusicVolume(sounds->music, music); + if (IsSoundPlaying(sounds->playing)) + SetSoundVolume(sounds->playing, sound); + + sounds->masterVolume = master; + sounds->musicVolume = music; + sounds->soundVolume = sound; +} + void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path) { Sound newSound = LoadSound(path); sounds->sounds[type] = newSound; @@ -8,6 +20,7 @@ void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *pa } void soundsPlay(SoundState *sounds, SoundType type) { PlaySound(sounds->playing); + SetSoundVolume(sounds->playing, sounds->soundVolume); } void soundsUnloadAll(SoundState *sounds) { @@ -29,6 +42,7 @@ void soundsLoadMusicStream(SoundState *sounds, const char *path) { void soundsPlayMusicStream(SoundState *sounds) { if (sounds->musicLoaded == false) return; PlayMusicStream(sounds->music); + SetMusicVolume(sounds->music, sounds->musicVolume); } void soundsPauseMusicStream(SoundState *sounds) { if (sounds->musicLoaded == false) return; diff --git a/game/sounds.h b/game/sounds.h index efd2ea3..11534a7 100644 --- a/game/sounds.h +++ b/game/sounds.h @@ -19,8 +19,14 @@ typedef struct SoundState { bool musicLoaded; Music music; + + f32 masterVolume; + f32 musicVolume; + f32 soundVolume; } SoundState; +void soundsApplyVolume(SoundState *sounds, f32 master, f32 music, f32 sound); + void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path); void soundsPlay(SoundState *sounds, SoundType type); diff --git a/game/systems/s_ui.c b/game/systems/s_ui.c index 96f1ee2..4d5a43d 100644 --- a/game/systems/s_ui.c +++ b/game/systems/s_ui.c @@ -307,6 +307,8 @@ void drawSettingsUI(Game *game, f32 dt) { if (uiSettingsButton("Apply")) { serializeOptions(SETTINGS_PATH, &opts); game->options = opts; + SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState); + soundsApplyVolume(sounds, opts.master, opts.music, opts.sound); setScreen(game, SCREEN_MAIN_MENU); } diff --git a/game/ui_widgets.c b/game/ui_widgets.c index 47d55c5..151cc46 100644 --- a/game/ui_widgets.c +++ b/game/ui_widgets.c @@ -202,7 +202,9 @@ void uiSettingsCheckbox(const char *txt, bool *check) { uiBaseCheckbox(txt, getFont(), 1.0f, check); } void uiSettingsSlider(const char *txt, f32 *value) { - uiBaseSlider(txt, getFont(), 1.0f, value, 0, 10); + f32 val = *value * 10.0f; + uiBaseSlider(txt, getFont(), 1.0f, &val, 0, 10); + *value = val / 10.0f; } void uiGameResCount(i32 amount, i32 capacity, Rectangle icon, Texture2D texture) { diff --git a/settings.ini b/settings.ini index 5e0c6206e4f6c2f19b0f5e170240002040d564a5..4c05921b6b2ff15ad48f5ddd325953a6d0b9a880 100644 GIT binary patch literal 16 TcmZQzU|=|V=8PSXvIk)R9uNZ} literal 16 QcmZQz0D%P#5d6Ra01uD?;Q#;t