Files
assassin-bug/src/engine/sound.js

65 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-11-05 14:28:01 +01:00
import Resonator from '../framework/resonator';
export default class Sound {
constructor() {
this.res = new Resonator();
this.ambience = null;
this.music = null;
2021-11-05 20:02:20 +01:00
this.ambienceVolume = 1;
this.musicVolume = 1;
this.sfxVolume = 1;
2021-11-05 14:28:01 +01:00
}
play(file) {
const sound = this.res.loadImmediate(file);
2021-11-05 20:02:20 +01:00
sound.setVolume(this.sfxVolume);
2021-11-05 14:28:01 +01:00
sound.play();
}
2021-11-05 18:15:07 +01:00
async setAmbience(file) {
if (this.ambience) {
2021-11-05 22:26:13 +01:00
const previousAmbience = this.ambience;
2021-11-05 18:15:07 +01:00
this.ambience = null;
2021-11-05 22:26:13 +01:00
setTimeout(() => previousAmbience.fadeOut(6), 1500);
setTimeout(() => previousAmbience.destroy(), 6000);
2021-11-05 18:15:07 +01:00
}
if (!file) return;
this.ambience = this.res.stream(file, 0);
2021-11-05 20:02:20 +01:00
this.ambience.setVolume(this.ambienceVolume);
2021-11-05 18:15:07 +01:00
this.ambience.play();
this.ambience.loop(true);
this.ambience.fadeIn(3);
}
setMusic(file) {
if (this.music) {
2021-11-05 22:26:13 +01:00
const previousMusic = this.music;
setTimeout(() => previousMusic.fadeOut(2), 500);
setTimeout(() => previousMusic.destroy(), 2000);
2021-11-05 18:15:07 +01:00
}
if (!file) return;
this.music = this.res.stream(file, 1);
2021-11-05 20:02:20 +01:00
this.music.setVolume(this.musicVolume);
2021-11-05 18:15:07 +01:00
this.music.play();
this.music.fadeIn(2);
}
setImpulse(file) {
this.res.setEnvironmentImpulse(file);
}
2021-11-05 20:02:20 +01:00
setMusicVolume(volume) {
this.musicVolume = volume;
if (this.music) this.music.setVolume(volume);
}
setAmbienceVolume(volume) {
this.ambienceVolume = volume;
if (this.ambience) this.ambience.setVolume(volume);
}
setSFXVolume(volume) {
this.sfxVolume = volume;
}
2021-11-05 14:28:01 +01:00
}