mirror of
https://github.com/photonstorm/phaser
synced 2024-12-22 19:13:37 +00:00
105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
var Class = require('../../utils/Class');
|
|
var BaseSoundManager = require('../BaseSoundManager');
|
|
var HTML5AudioSound = require('./HTML5AudioSound');
|
|
var HTML5AudioSoundManager = new Class({
|
|
Extends: BaseSoundManager,
|
|
initialize: function HTML5AudioSoundManager(game) {
|
|
/**
|
|
* Flag indicating whether if there are no idle instances of HTML5 Audio tag,
|
|
* for any particular sound, if one of the used tags should be stopped and used
|
|
* for succeeding playback or if succeeding Phaser.Sound.HTML5AudioSound#play
|
|
* call should be ignored.
|
|
*
|
|
* @property {boolean} override
|
|
* @default true
|
|
*/
|
|
this.override = true;
|
|
/**
|
|
* An array for keeping track of all the sounds
|
|
* that were paused when game lost focus.
|
|
*
|
|
* @private
|
|
* @property {Phaser.Sound.HTML5AudioSound[]} onBlurPausedSounds
|
|
* @default []
|
|
*/
|
|
this.onBlurPausedSounds = [];
|
|
/**
|
|
* Property that actually holds the value of global mute
|
|
* for HTML5 Audio sound manager implementation.
|
|
*
|
|
* @private
|
|
* @property {boolean} _mute
|
|
* @default false
|
|
*/
|
|
this._mute = false;
|
|
/**
|
|
* Property that actually holds the value of global volume
|
|
* for HTML5 Audio sound manager implementation.
|
|
*
|
|
* @private
|
|
* @property {boolean} _volume
|
|
* @default 1
|
|
*/
|
|
this._volume = 1;
|
|
BaseSoundManager.call(this, game);
|
|
},
|
|
add: function (key, config) {
|
|
var sound = new HTML5AudioSound(this, key, config);
|
|
this.sounds.push(sound);
|
|
return sound;
|
|
},
|
|
onBlur: function () {
|
|
this.forEachActiveSound(function (sound) {
|
|
if (sound.isPlaying) {
|
|
this.onBlurPausedSounds.push(sound);
|
|
sound.pause();
|
|
}
|
|
});
|
|
},
|
|
onFocus: function () {
|
|
this.onBlurPausedSounds.forEach(function (sound) {
|
|
sound.resume();
|
|
});
|
|
this.onBlurPausedSounds.length = 0;
|
|
},
|
|
destroy: function () {
|
|
BaseSoundManager.prototype.destroy.call(this);
|
|
this.onBlurPausedSounds.length = 0;
|
|
this.onBlurPausedSounds = null;
|
|
}
|
|
});
|
|
/**
|
|
* Global mute setting.
|
|
*
|
|
* @name Phaser.Sound.HTML5AudioSoundManager#mute
|
|
* @property {boolean} mute
|
|
*/
|
|
Object.defineProperty(HTML5AudioSoundManager.prototype, 'mute', {
|
|
get: function () {
|
|
return this._mute;
|
|
},
|
|
set: function (value) {
|
|
this._mute = value;
|
|
this.forEachActiveSound(function (sound) {
|
|
sound.setMute();
|
|
});
|
|
}
|
|
});
|
|
/**
|
|
* Global volume setting.
|
|
*
|
|
* @name Phaser.Sound.HTML5AudioSoundManager#volume
|
|
* @property {number} volume
|
|
*/
|
|
Object.defineProperty(HTML5AudioSoundManager.prototype, 'volume', {
|
|
get: function () {
|
|
return this._volume;
|
|
},
|
|
set: function (value) {
|
|
this._volume = value;
|
|
this.forEachActiveSound(function (sound) {
|
|
sound.setVolume();
|
|
});
|
|
}
|
|
});
|
|
module.exports = HTML5AudioSoundManager;
|