}
void
-SoundManager::pause_music()
+SoundManager::pause_music(float fadetime)
{
- if(music_source)
- {
+ if(fadetime > 0) {
+ if(music_source
+ && music_source->get_fade_state() != StreamSoundSource::FadingPause)
+ music_source->set_fading(StreamSoundSource::FadingPause, fadetime);
+ } else {
music_source->pause();
}
}
void
-SoundManager::resume_music()
+SoundManager::resume_music(float fadetime)
{
- if(music_source)
- {
+ if(fadetime > 0) {
+ if(music_source
+ && music_source->get_fade_state() != StreamSoundSource::FadingResume)
+ music_source->set_fading(StreamSoundSource::FadingResume, fadetime);
+ } else {
music_source->resume();
}
}
void enable_music(bool music_enabled);
void play_music(const std::string& filename, bool fade = false);
- void pause_music();
- void resume_music();
+ void pause_music(float fadetime = 0);
+ void resume_music(float fadetime = 0);
void stop_music(float fadetime = 0);
bool is_music_enabled() { return music_enabled; }
play();
}
- if(fade_state == FadingOn) {
+ if(fade_state == FadingOn || fade_state == FadingResume) {
float time = real_time - fade_start_time;
if(time >= fade_time) {
set_gain(1.0);
} else {
set_gain(time / fade_time);
}
- } else if(fade_state == FadingOff) {
+ } else if(fade_state == FadingOff || fade_state == FadingPause) {
float time = real_time - fade_start_time;
if(time >= fade_time) {
- stop();
+ if(fade_state == FadingOff)
+ stop();
+ else
+ pause();
fade_state = NoFading;
} else {
set_gain( (fade_time-time) / fade_time);
void set_sound_file(std::unique_ptr<SoundFile> newfile);
- enum FadeState { NoFading, FadingOn, FadingOff };
+ enum FadeState { NoFading, FadingOn, FadingOff, FadingPause, FadingResume };
void set_fading(FadeState state, float fadetime);
FadeState get_fade_state() const
// TODO: need nice way to handle players dying in co-op mode
Sector::current()->effect->fade_out(3.0);
- SoundManager::current()->stop_music(3.0);
+ SoundManager::current()->pause_music(3.0);
}
}
}
int
-GameSession::restart_level()
+GameSession::restart_level(bool after_death)
{
PlayerStatus* currentStatus = m_savegame.get_player_status();
coins_at_start = currentStatus->coins;
ScreenManager::current()->pop_screen();
return (-1);
}
-
- SoundManager::current()->stop_music();
- currentsector->play_music(LEVEL_MUSIC);
+ if(after_death == true) {
+ currentsector->resume_music();
+ }
+ else {
+ SoundManager::current()->stop_music();
+ currentsector->play_music(LEVEL_MUSIC);
+ }
if(capture_file != "") {
int newSeed=0; // next run uses a new seed
if(end_sequence && end_sequence->is_done()) {
finish(true);
} else if (!end_sequence && tux->is_dead()) {
- restart_level();
+ restart_level(true);
}
}
* resources for the current level/world
*/
std::string get_working_directory();
- int restart_level();
+ int restart_level(bool after_death = false);
void toggle_pause();
void abort_level();
}
}
+void
+Sector::resume_music()
+{
+ SoundManager::current()->resume_music(1.5f);
+}
+
MusicType
Sector::get_music_type()
{
bool inside(const Rectf& rectangle) const;
void play_music(MusicType musictype);
+ void resume_music();
MusicType get_music_type();
int get_active_bullets()