67 lines
1.5 KiB
ActionScript 3
67 lines
1.5 KiB
ActionScript 3
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;
|
|
}
|
|
}
|
|
} |