Skip to content

Commit

Permalink
Pause music when pressing ESC during a level and resume it when exiti…
Browse files Browse the repository at this point in the history
…ng the pause menu
  • Loading branch information
tobbi committed Feb 1, 2015
1 parent e760999 commit 73cb1e1
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/audio/openal_sound_source.cpp
Expand Up @@ -55,6 +55,32 @@ OpenALSoundSource::playing()
return state != AL_STOPPED;
}

void
OpenALSoundSource::pause()
{
alSourcePause(source);
SoundManager::check_al_error("Couldn't pause audio source: ");
}

void
OpenALSoundSource::resume()
{
if( !this->paused() )
{
return;
}

this->play();
}

bool
OpenALSoundSource::paused()
{
ALint state = AL_PAUSED;
alGetSourcei(source, AL_SOURCE_STATE, &state);
return state == AL_PAUSED;
}

void
OpenALSoundSource::update()
{
Expand Down
3 changes: 3 additions & 0 deletions src/audio/openal_sound_source.hpp
Expand Up @@ -29,7 +29,10 @@ class OpenALSoundSource : public SoundSource

virtual void play();
virtual void stop();
virtual void pause();
virtual void resume();
virtual bool playing();
virtual bool paused();

virtual void update();

Expand Down
18 changes: 18 additions & 0 deletions src/audio/sound_manager.cpp
Expand Up @@ -300,6 +300,24 @@ SoundManager::play_music(const std::string& filename, bool fade)
}
}

void
SoundManager::pause_music()
{
if(music_source)
{
music_source->pause();
}
}

void
SoundManager::resume_music()
{
if(music_source)
{
music_source->resume();
}
}

void
SoundManager::set_listener_position(const Vector& pos)
{
Expand Down
2 changes: 2 additions & 0 deletions src/audio/sound_manager.hpp
Expand Up @@ -64,6 +64,8 @@ class SoundManager : public Currenton<SoundManager>

void enable_music(bool music_enabled);
void play_music(const std::string& filename, bool fade = false);
void pause_music();
void resume_music();
void stop_music(float fadetime = 0);

bool is_music_enabled() { return music_enabled; }
Expand Down
2 changes: 2 additions & 0 deletions src/supertux/game_session.cpp
Expand Up @@ -249,6 +249,7 @@ GameSession::toggle_pause()
speed_before_pause = ScreenManager::current()->get_speed();
ScreenManager::current()->set_speed(0);
MenuManager::instance().set_menu(MenuStorage::GAME_MENU);
SoundManager::current()->pause_music();
game_pause = true;
}

Expand Down Expand Up @@ -440,6 +441,7 @@ GameSession::update(float elapsed_time)
// Unpause the game if the menu has been closed
if (game_pause && !MenuManager::instance().is_active()) {
ScreenManager::current()->set_speed(speed_before_pause);
SoundManager::current()->resume_music();
game_pause = false;
}

Expand Down

0 comments on commit 73cb1e1

Please sign in to comment.