goog.module('gep.provider.SoundProvider');
const {HowlerSoundProvider} = goog.require('nbsrc.provider.HowlerSoundProvider');
const {randomInt} = goog.require('goog.math');
/**
* This provider (singleton) takes care of loading and controlling sounds
* @extends {HowlerSoundProvider}
*/
class SoundProvider extends HowlerSoundProvider
{
constructor()
{
super();
/**
* Timeout ID for the delayed playback of the generic platform sound.
* @type {number}
* @private
*/
this.backgroundSoundTimeout_ = 0;
/**
* Is the playback of background sound enabled
* @type {boolean}
* @private
*/
this.enableBackgroundSound_ = false;
/**
* Was started the first generic platform background sound
* @type {boolean}
* @private
*/
this.firstBackgroundPlayback_ = true;
}
/**
* Starts the random delayed playback of the generic platform background sound.
* Sound is played the first time after 3 seconds and then again after a pause of 30 - 60 seconds
* @private
*/
playBackgroundSound_()
{
const delay = this.firstBackgroundPlayback_ === true ? 3000 : (randomInt(30)) + 30 * 1000;
this.backgroundSoundTimeout_ = setTimeout(() => {
this.playSound('background', .2).then(() => { this.playBackgroundSound_(); }, (error) => { console.warn(error); });
}, delay);
}
/**
* Setter
* For playing a loop sound instead of a random delayed generic platform sound change the variable SOUND_MODE to loop in `app/views/index.php`
* // var SOUND_MODE = 'loop';
* @param {boolean} value
*/
set enableBackgroundSound(value)
{
clearTimeout(this.backgroundSoundTimeout_);
if(this.enableBackgroundSound_ != value)
{
if(value === true) {
if(window['SOUND_MODE'] == 'generic-platform') this.playBackgroundSound_();
else this.playSound('background', 1, true);
this.firstBackgroundPlayback_ = false;
}
else {
this.stopSound('background').catch((error) => { console.warn(error); });
}
}
this.enableBackgroundSound_ = value;
}
/**
* Getter
* @return {boolean}
*/
get enableBackgroundSound()
{
return this.enableBackgroundSound_;
}
}
goog.addSingletonGetter(SoundProvider);
exports = SoundProvider;