Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
Sound@ theme;
|
||||
|
||||
bool played = false;
|
||||
const double themeVolume = 1.5;
|
||||
double volume = 0.0;
|
||||
double restartDelay = 0.5;
|
||||
|
||||
double musicVolume = 1.0;
|
||||
double prevMusicVol = 1.0, prevMasterVol = 1.0, prevSFXVol = 1.0;
|
||||
void tick(double time) {
|
||||
if(!soundEnabled)
|
||||
return;
|
||||
|
||||
if(prevMusicVol != settings::dMusicVolume || prevSFXVol != settings::dSFXVolume || prevMasterVol != settings::dMasterVolume) {
|
||||
if(settings::dSFXVolume < 0.01)
|
||||
{
|
||||
musicVolume = settings::dMusicVolume;
|
||||
soundVolume = settings::dMasterVolume;
|
||||
}
|
||||
else {
|
||||
musicVolume = settings::dMusicVolume / settings::dSFXVolume;
|
||||
soundVolume = settings::dMasterVolume * settings::dSFXVolume;
|
||||
}
|
||||
|
||||
prevMusicVol = settings::dMusicVolume;
|
||||
prevMasterVol = settings::dMasterVolume;
|
||||
prevSFXVol = settings::dSFXVolume;
|
||||
}
|
||||
|
||||
if(game_running) {
|
||||
played = false;
|
||||
restartDelay = 5.0;
|
||||
if(theme !is null) {
|
||||
volume = max(0.0, volume - (time / 4.0));
|
||||
theme.volume = settings::dMusicVolume * settings::dMasterVolume * volume * themeVolume;
|
||||
if(volume <= 0.0) {
|
||||
theme.stop();
|
||||
@theme = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(theme is null) {
|
||||
if(!played) {
|
||||
restartDelay -= time;
|
||||
if(restartDelay <= 0.0) {
|
||||
restartDelay = 5.0;
|
||||
|
||||
@theme = playTrack("data/music/title.ogg", loop = false, pause = true);
|
||||
if(theme !is null) {
|
||||
theme.volume = 0;
|
||||
volume = 0;
|
||||
theme.paused = false;
|
||||
played = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(theme.playing) {
|
||||
volume = min(1.0, volume + time);
|
||||
theme.volume = musicVolume * volume * themeVolume;
|
||||
}
|
||||
else {
|
||||
@theme = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user