mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-17 19:11:30 +00:00
Add Music_LevelVolume, Music_ResetLevelVolume: change music volume from gameplay contexts
- Tunes opt into using this volume by setting Tune::use_level_volume to true
This commit is contained in:
parent
14d6477aad
commit
1a0b927cf2
6 changed files with 57 additions and 1 deletions
|
|
@ -31,6 +31,7 @@ void Music_Init(void)
|
|||
tune.fade_out = 1500;
|
||||
tune.fade_out_inclusive = false;
|
||||
tune.resume_fade_in = 750;
|
||||
tune.use_level_volume = true;
|
||||
tune.sync = true;
|
||||
tune.credit = true;
|
||||
tune.vapes = true;
|
||||
|
|
@ -417,3 +418,13 @@ void Music_BatchExempt(const char* id)
|
|||
tune->resist_once = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Music_LevelVolume(int volume)
|
||||
{
|
||||
g_tunes.level_volume(volume, false);
|
||||
}
|
||||
|
||||
void Music_ResetLevelVolume(void)
|
||||
{
|
||||
g_tunes.level_volume(100, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,6 +103,14 @@ void Music_Loop(const char *id, boolean loop);
|
|||
// as Music_StopAll.
|
||||
void Music_BatchExempt(const char *id);
|
||||
|
||||
// Set the volume for level context. TODO: this should be
|
||||
// done on a more selective basis, rather than globally.
|
||||
void Music_LevelVolume(int volume);
|
||||
|
||||
// Reset volume back to normal. This will fade it as if the
|
||||
// music is resuming after another tune ended.
|
||||
void Music_ResetLevelVolume(void);
|
||||
|
||||
|
||||
//
|
||||
// Query properties.
|
||||
|
|
|
|||
|
|
@ -79,7 +79,13 @@ void TuneManager::tick()
|
|||
{
|
||||
if (load())
|
||||
{
|
||||
I_FadeInPlaySong(tune->resume ? tune->resume_fade_in : tune->fade_in, tune->loop);
|
||||
I_PlaySong(tune->loop);
|
||||
I_FadeSongFromVolume(
|
||||
tune->use_level_volume ? level_volume_ : 100,
|
||||
0,
|
||||
tune->resume ? tune->resume_fade_in : tune->fade_in,
|
||||
nullptr
|
||||
);
|
||||
seek(tune);
|
||||
|
||||
adjust_volume();
|
||||
|
|
@ -116,6 +122,19 @@ void TuneManager::tick()
|
|||
tune->ending = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (level_volume_ != old_level_volume_ && tune->use_level_volume && tune->can_fade_out)
|
||||
{
|
||||
if (volume_fade_)
|
||||
{
|
||||
I_FadeSong(level_volume_, tune->resume_fade_in, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
I_SetInternalMusicVolume(level_volume_);
|
||||
}
|
||||
old_level_volume_ = level_volume_;
|
||||
}
|
||||
}
|
||||
|
||||
void TuneManager::pause_unpause() const
|
||||
|
|
|
|||
|
|
@ -88,6 +88,15 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void level_volume(int vol, bool fade)
|
||||
{
|
||||
if (vol != old_level_volume_)
|
||||
{
|
||||
level_volume_ = vol;
|
||||
volume_fade_ = fade;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::unordered_map<std::string, Tune> map_;
|
||||
std::string current_song_;
|
||||
|
|
@ -99,6 +108,10 @@ private:
|
|||
|
||||
bool gme_; // hack
|
||||
|
||||
int level_volume_ = 100;
|
||||
int old_level_volume_ = 100;
|
||||
bool volume_fade_ = false;
|
||||
|
||||
decltype(map_)::const_iterator current_iterator() const
|
||||
{
|
||||
return std::max_element(
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ public:
|
|||
// resumes.
|
||||
int resume_fade_in = 0;
|
||||
|
||||
// Adjust volume based on level context.
|
||||
bool use_level_volume = false;
|
||||
|
||||
// Sync this tune to game logic.
|
||||
bool sync = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -8205,6 +8205,8 @@ void P_LoadLevelMusic(void)
|
|||
tic_t level_music_start = starttime + (TICRATE/2);
|
||||
Music_Seek("level", (std::max(leveltime, level_music_start) - level_music_start) * 1000UL / TICRATE);
|
||||
}
|
||||
|
||||
Music_ResetLevelVolume();
|
||||
}
|
||||
|
||||
/** Loads a level from a lump or external wad.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue