void music_thinker::process(events::pump_info &info) { if(preferences::music_on()) { if(!music_start_time && !current_track_list.empty() && !Mix_PlayingMusic()) { // Pick next track, add ending time to its start time. current_track = choose_track(); music_start_time = info.ticks(); no_fading=true; fadingout_time=0; } if(music_start_time && info.ticks(&music_refresh, music_refresh_rate) >= music_start_time - fadingout_time) { want_new_music=true; } if(want_new_music) { if(Mix_PlayingMusic()) { Mix_FadeOutMusic(fadingout_time); } unload_music = false; play_new_music(); } } if (unload_music) { for (auto track : music_cache) { Mix_FreeMusic(track.second); } music_cache.clear(); Mix_HookMusicFinished(nullptr); unload_music = false; } }
void commit_music_changes() { played_before.clear(); // Play-once is OK if still playing. if (current_track.play_once()) return; // If current track no longer on playlist, change it. BOOST_FOREACH (const music_track &m, current_track_list) { if (current_track == m) return; } // Victory empties playlist: if next scenario doesn't specify one... if (current_track_list.empty()) return; // FIXME: we don't pause ms_before on this first track. Should we? current_track = choose_track(); play_music(); }
void music_thinker::process(events::pump_info &info) { if(preferences::music_on()) { if(!music_start_time && !current_track_list.empty() && !Mix_PlayingMusic()) { // Pick next track, add ending time to its start time. current_track = choose_track(); music_start_time = info.ticks(); no_fading=true; fadingout_time=0; } if(music_start_time && info.ticks(&music_refresh, music_refresh_rate) >= music_start_time - fadingout_time) { want_new_music=true; } if(want_new_music) { if(Mix_PlayingMusic()) { Mix_FadeOutMusic(fadingout_time); } play_new_music(); } } }