Properly change volume

This commit is contained in:
2024-01-29 12:50:36 +01:00
parent 6e848cf239
commit ed1815eddc
6 changed files with 30 additions and 1 deletions

View File

@@ -202,6 +202,9 @@ bool init(void *userData) {
ECS_COMPONENT_DEFINE(ECS, SoundState); ECS_COMPONENT_DEFINE(ECS, SoundState);
ecs_singleton_set(ECS, SoundState, {}); ecs_singleton_set(ECS, SoundState, {});
SoundState *sounds = ecs_singleton_get_mut(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"); soundsLoad(sounds, SOUND_WOOD_PUNCH, 0.1f, "assets/sounds/wood hit 17.wav");
} }
setScreen(game, SCREEN_MAIN_MENU); setScreen(game, SCREEN_MAIN_MENU);
@@ -392,6 +395,8 @@ void update(float dt, void *userData) {
} else { } else {
game->options = getDefaultOptions(); game->options = getDefaultOptions();
} }
SoundState *sounds = ecs_singleton_get_mut(ECS, SoundState);
soundsApplyVolume(sounds, opts.master, opts.music, opts.sound);
optsLoaded = true; optsLoaded = true;
} }

View File

@@ -1,5 +1,17 @@
#include "sounds.h" #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) { void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path) {
Sound newSound = LoadSound(path); Sound newSound = LoadSound(path);
sounds->sounds[type] = newSound; 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) { void soundsPlay(SoundState *sounds, SoundType type) {
PlaySound(sounds->playing); PlaySound(sounds->playing);
SetSoundVolume(sounds->playing, sounds->soundVolume);
} }
void soundsUnloadAll(SoundState *sounds) { void soundsUnloadAll(SoundState *sounds) {
@@ -29,6 +42,7 @@ void soundsLoadMusicStream(SoundState *sounds, const char *path) {
void soundsPlayMusicStream(SoundState *sounds) { void soundsPlayMusicStream(SoundState *sounds) {
if (sounds->musicLoaded == false) return; if (sounds->musicLoaded == false) return;
PlayMusicStream(sounds->music); PlayMusicStream(sounds->music);
SetMusicVolume(sounds->music, sounds->musicVolume);
} }
void soundsPauseMusicStream(SoundState *sounds) { void soundsPauseMusicStream(SoundState *sounds) {
if (sounds->musicLoaded == false) return; if (sounds->musicLoaded == false) return;

View File

@@ -19,8 +19,14 @@ typedef struct SoundState {
bool musicLoaded; bool musicLoaded;
Music music; Music music;
f32 masterVolume;
f32 musicVolume;
f32 soundVolume;
} SoundState; } SoundState;
void soundsApplyVolume(SoundState *sounds, f32 master, f32 music, f32 sound);
void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path); void soundsLoad(SoundState *sounds, SoundType type, f32 interval, const char *path);
void soundsPlay(SoundState *sounds, SoundType type); void soundsPlay(SoundState *sounds, SoundType type);

View File

@@ -307,6 +307,8 @@ void drawSettingsUI(Game *game, f32 dt) {
if (uiSettingsButton("Apply")) { if (uiSettingsButton("Apply")) {
serializeOptions(SETTINGS_PATH, &opts); serializeOptions(SETTINGS_PATH, &opts);
game->options = 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); setScreen(game, SCREEN_MAIN_MENU);
} }

View File

@@ -202,7 +202,9 @@ void uiSettingsCheckbox(const char *txt, bool *check) {
uiBaseCheckbox(txt, getFont(), 1.0f, check); uiBaseCheckbox(txt, getFont(), 1.0f, check);
} }
void uiSettingsSlider(const char *txt, f32 *value) { 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) { void uiGameResCount(i32 amount, i32 capacity, Rectangle icon, Texture2D texture) {

Binary file not shown.