var BaseSoundManager = require('../BaseSoundManager'); var Class = require('../../utils/Class'); var HTML5AudioSound = require('./HTML5AudioSound'); var HTML5AudioSoundManager = new Class({ Extends: BaseSoundManager, initialize: function HTML5AudioSoundManager(game){ this.override = true ; this.audioPlayDelay = 0.1; this.loopEndOffset = 0.05; this.onBlurPausedSounds = [] ; this.locked = 'ontouchstart' in window; this.lockedActionsQueue = this.locked? [] : null ; this._mute = false ; this._volume = 1; BaseSoundManager.call(this, game); } , add: function (key, config){ var sound = new HTML5AudioSound(this, key, config); this.sounds.push(sound); return sound; } , unlock: function (){ var _this = this; var moved = false ; var detectMove = function (){ moved = true ; } ; var unlock = function (){ if (!_this.game.cache.audio.entries.size) { return ; } if (moved) { moved = false ; return ; } document.body.removeEventListener('touchmove', detectMove); document.body.removeEventListener('touchend', unlock); var allTags = [] ; _this.game.cache.audio.entries.each(function (key, tags){ for (var i = 0; i < _AN_Read_length('length', tags); i++ ){ allTags.push(tags[i]); } return true ; } ); var lastTag = allTags[_AN_Read_length('length', allTags) - 1]; lastTag.oncanplaythrough = function (){ lastTag.oncanplaythrough = null ; _this.unlocked = true ; } ; allTags.forEach(function (tag){ _AN_Call_load('load', tag); } ); } ; this.once('unlocked', function (){ this.forEachActiveSound(function (sound){ sound.duration = sound.tags[0].duration; sound.totalDuration = sound.tags[0].duration; } ); this.lockedActionsQueue.forEach(function (lockedAction){ if (lockedAction.sound[lockedAction.prop].apply) { lockedAction.sound[lockedAction.prop].apply(lockedAction.sound, lockedAction.value || [] ); } else { lockedAction.sound[lockedAction.prop] = lockedAction.value; } } ); this.lockedActionsQueue.length = 0; this.lockedActionsQueue = null ; } , this); document.body.addEventListener('touchmove', detectMove, false ); document.body.addEventListener('touchend', unlock, false ); } , onBlur: function (){ this.forEachActiveSound(function (sound){ if (sound.isPlaying) { this.onBlurPausedSounds.push(sound); sound.onBlur(); } } ); } , onFocus: function (){ this.onBlurPausedSounds.forEach(function (sound){ sound.onFocus(); } ); this.onBlurPausedSounds.length = 0; } , destroy: function (){ BaseSoundManager.prototype.destroy.call(this); this.onBlurPausedSounds.length = 0; this.onBlurPausedSounds = null ; } , isLocked: function (sound, prop, value){ if (this.locked) { this.lockedActionsQueue.push({ sound: sound, prop: prop, value: value} ); return true ; } return false ; } , mute: { get: function (){ return this._mute; } , set: function (value){ this._mute = value; this.forEachActiveSound(function (sound){ sound.setMute(); } ); this.emit('mute', this, value); } } , volume: { get: function (){ return this._volume; } , set: function (value){ this._volume = value; this.forEachActiveSound(function (sound){ sound.setVolume(); } ); this.emit('volume', this, value); } } } ); module.exports = HTML5AudioSoundManager;