summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/menu_system.cpp7
-rw-r--r--src/mixer.cpp12
-rw-r--r--src/mixer.h5
3 files changed, 21 insertions, 3 deletions
diff --git a/src/menu_system.cpp b/src/menu_system.cpp index c099afe..a430009 100644 --- a/src/menu_system.cpp +++ b/src/menu_system.cpp
@@ -65,8 +65,11 @@ void MenuSystem::openPauseMenu() {
65 game_.getMixer().setMusicVolume(menuItem.value); 65 game_.getMixer().setMusicVolume(menuItem.value);
66 }), 66 }),
67 MenuBuilder().Slider("Sound Volume: ") 67 MenuBuilder().Slider("Sound Volume: ")
68 .InitialValue(10) 68 .InitialValue(game_.getMixer().getSoundVolume())
69 .MaxValue(10), 69 .MaxValue(10)
70 .SelectionChangedFunction([this] (MenuItem& menuItem) {
71 game_.getMixer().setSoundVolume(menuItem.value);
72 }),
70 MenuBuilder().Command("Back") 73 MenuBuilder().Command("Back")
71 .ActivationFunction([this] (Game& game) { 74 .ActivationFunction([this] (Game& game) {
72 closePauseMenu(); 75 closePauseMenu();
diff --git a/src/mixer.cpp b/src/mixer.cpp index 74a870a..6071fca 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp
@@ -4,9 +4,12 @@
4void Mixer::playSound(std::string_view filename) { 4void Mixer::playSound(std::string_view filename) {
5 Mix_Chunk* chunk = getChunkByFilename(std::string(filename)); 5 Mix_Chunk* chunk = getChunkByFilename(std::string(filename));
6 6
7 if (Mix_PlayChannel(-1, chunk, 0) == -1) { 7 int ret = Mix_PlayChannel(-1, chunk, 0);
8 if (ret == -1) {
8 throw mix_error(); 9 throw mix_error();
9 } 10 }
11
12 Mix_Volume(ret, soundVolume_);
10} 13}
11 14
12int Mixer::loopSound(std::string_view filename) { 15int Mixer::loopSound(std::string_view filename) {
@@ -17,6 +20,8 @@ int Mixer::loopSound(std::string_view filename) {
17 throw mix_error(); 20 throw mix_error();
18 } 21 }
19 22
23 Mix_Volume(ret, soundVolume_);
24
20 return ret; 25 return ret;
21} 26}
22 27
@@ -32,6 +37,11 @@ void Mixer::unpauseSounds() {
32 Mix_Resume(-1); 37 Mix_Resume(-1);
33} 38}
34 39
40void Mixer::setSoundVolume(int vol) {
41 soundVolume_ = MIX_MAX_VOLUME / 10.0 * vol;
42 Mix_Volume(-1, soundVolume_);
43}
44
35void Mixer::playMusic(std::string_view name, int ms) { 45void Mixer::playMusic(std::string_view name, int ms) {
36 Mix_Music* song = getMusicByName(name); 46 Mix_Music* song = getMusicByName(name);
37 int ret; 47 int ret;
diff --git a/src/mixer.h b/src/mixer.h index c2a0681..f9c958a 100644 --- a/src/mixer.h +++ b/src/mixer.h
@@ -77,6 +77,10 @@ public:
77 77
78 void unpauseSounds(); 78 void unpauseSounds();
79 79
80 int getSoundVolume() const { return std::round(static_cast<double>(soundVolume_) / MIX_MAX_VOLUME * 10); }
81
82 void setSoundVolume(int vol);
83
80 // name is the name of the file, not containing the extension 84 // name is the name of the file, not containing the extension
81 // ms is the time in milliseconds to fade in 85 // ms is the time in milliseconds to fade in
82 void playMusic(std::string_view name, int ms = 0); 86 void playMusic(std::string_view name, int ms = 0);
@@ -113,6 +117,7 @@ private:
113 std::string playingTrack_; 117 std::string playingTrack_;
114 int musicVolume_ = MIX_MAX_VOLUME; 118 int musicVolume_ = MIX_MAX_VOLUME;
115 bool musicMuted_ = false; 119 bool musicMuted_ = false;
120 int soundVolume_ = MIX_MAX_VOLUME;
116}; 121};
117 122
118#endif /* end of include guard: MIXER_H_6DF82000 */ 123#endif /* end of include guard: MIXER_H_6DF82000 */