From 1656242563d14fa564bab8d4bc40054ab8998553 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 27 Feb 2021 12:05:45 -0500 Subject: Added background music (defined on a per-map basis) --- src/mixer.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'src/mixer.cpp') diff --git a/src/mixer.cpp b/src/mixer.cpp index bdcb7ce..37c2177 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -23,6 +23,49 @@ void Mixer::stopChannel(int channel) { Mix_HaltChannel(channel); } +void Mixer::playMusic(std::string_view name, int ms) { + Mix_Music* song = getMusicByName(name); + int ret; + + if (ms == 0) { + ret = Mix_PlayMusic(song, -1); + } else { + ret = Mix_FadeInMusic(song, -1, ms); + } + + if (ret == -1) { + throw mix_error(); + } + + playingTrack_ = name; +} + +void Mixer::fadeoutMusic(int ms) { + if (Mix_FadeOutMusic(ms) == 0) { + throw mix_error(); + } + + playingTrack_ = ""; +} + +void Mixer::muteMusic() { + Mix_VolumeMusic(0); + musicMuted_ = true; +} + +void Mixer::unmuteMusic() { + Mix_VolumeMusic(musicVolume_); + musicMuted_ = false; +} + +void Mixer::pauseMusic() { + Mix_PauseMusic(); +} + +void Mixer::unpauseMusic() { + Mix_ResumeMusic(); +} + Mix_Chunk* Mixer::getChunkByFilename(std::string filename) { if (!sounds_.count(filename)) { Mix_Chunk* sample = Mix_LoadWAV(filename.c_str()); @@ -35,3 +78,18 @@ Mix_Chunk* Mixer::getChunkByFilename(std::string filename) { return sounds_[filename].get(); } + +Mix_Music* Mixer::getMusicByName(std::string_view name) { + std::string filename = "../res/music/" + std::string(name) + ".wav"; + + if (!music_.count(filename)) { + Mix_Music* song = Mix_LoadMUS(filename.c_str()); + if (!song) { + throw mix_error(); + } + + music_[filename] = music_ptr(song); + } + + return music_[filename].get(); +} -- cgit 1.4.1