dragonbones-runtime
Version:
the tools to build dragonbones file for diffrent framework
1,353 lines • 54.7 kB
JavaScript
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var sys;
(function (sys) {
var usingChannel = [];
/**
* @private
* @param channel
*/
function $pushSoundChannel(channel) {
if (usingChannel.indexOf(channel) < 0) {
usingChannel.push(channel);
}
}
sys.$pushSoundChannel = $pushSoundChannel;
/**
* @private
* @param channel
*/
function $popSoundChannel(channel) {
var index = usingChannel.indexOf(channel);
if (index >= 0) {
usingChannel.splice(index, 1);
return true;
}
return false;
}
sys.$popSoundChannel = $popSoundChannel;
})(sys = egret.sys || (egret.sys = {}));
})(egret || (egret = {}));
(function (egret) {
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var web;
(function (web) {
/**
* @private
* @inheritDoc
*/
var HtmlSound = (function (_super) {
__extends(HtmlSound, _super);
/**
* @private
* @inheritDoc
*/
function HtmlSound() {
var _this = _super.call(this) || this;
/**
* @private
*/
_this.loaded = false;
return _this;
}
Object.defineProperty(HtmlSound.prototype, "length", {
get: function () {
if (this.originAudio) {
return this.originAudio.duration;
}
throw new Error("sound not loaded!");
//return 0;
},
enumerable: true,
configurable: true
});
/**
* @inheritDoc
*/
HtmlSound.prototype.load = function (url) {
var self = this;
this.url = url;
if (true && !url) {
egret.$error(3002);
}
var audio = new Audio(url);
audio.addEventListener("canplaythrough", onAudioLoaded);
audio.addEventListener("error", onAudioError);
var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf("firefox") >= 0) {
audio.autoplay = !0;
audio.muted = true;
}
audio.load();
this.originAudio = audio;
if (HtmlSound.clearAudios[this.url]) {
delete HtmlSound.clearAudios[this.url];
}
HtmlSound.$recycle(this.url, audio);
function onAudioLoaded() {
removeListeners();
if (ua.indexOf("firefox") >= 0) {
audio.pause();
audio.muted = false;
}
self.loaded = true;
self.dispatchEventWith(egret.Event.COMPLETE);
}
function onAudioError() {
removeListeners();
self.dispatchEventWith(egret.IOErrorEvent.IO_ERROR);
}
function removeListeners() {
audio.removeEventListener("canplaythrough", onAudioLoaded);
audio.removeEventListener("error", onAudioError);
}
};
/**
* @inheritDoc
*/
HtmlSound.prototype.play = function (startTime, loops) {
startTime = +startTime || 0;
loops = +loops || 0;
if (true && this.loaded == false) {
egret.$error(1049);
}
var audio = HtmlSound.$pop(this.url);
if (audio == null) {
audio = this.originAudio.cloneNode();
}
else {
}
audio.autoplay = true;
var channel = new web.HtmlSoundChannel(audio);
channel.$url = this.url;
channel.$loops = loops;
channel.$startTime = startTime;
channel.$play();
egret.sys.$pushSoundChannel(channel);
return channel;
};
/**
* @inheritDoc
*/
HtmlSound.prototype.close = function () {
if (this.loaded == false && this.originAudio)
this.originAudio.src = "";
if (this.originAudio)
this.originAudio = null;
HtmlSound.$clear(this.url);
};
HtmlSound.$clear = function (url) {
HtmlSound.clearAudios[url] = true;
var array = HtmlSound.audios[url];
if (array) {
array.length = 0;
}
};
HtmlSound.$pop = function (url) {
var array = HtmlSound.audios[url];
if (array && array.length > 0) {
return array.pop();
}
return null;
};
HtmlSound.$recycle = function (url, audio) {
if (HtmlSound.clearAudios[url]) {
return;
}
var array = HtmlSound.audios[url];
if (HtmlSound.audios[url] == null) {
array = HtmlSound.audios[url] = [];
}
array.push(audio);
};
return HtmlSound;
}(egret.EventDispatcher));
/**
* Background music
* @version Egret 2.4
* @platform Web,Native
* @language en_US
*/
/**
* 背景音乐
* @version Egret 2.4
* @platform Web,Native
* @language zh_CN
*/
HtmlSound.MUSIC = "music";
/**
* EFFECT
* @version Egret 2.4
* @platform Web,Native
* @language en_US
*/
/**
* 音效
* @version Egret 2.4
* @platform Web,Native
* @language zh_CN
*/
HtmlSound.EFFECT = "effect";
/**
* @private
*/
HtmlSound.audios = {};
HtmlSound.clearAudios = {};
web.HtmlSound = HtmlSound;
egret.Sound = HtmlSound;
})(web = egret.web || (egret.web = {}));
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var web;
(function (web) {
/**
* @private
* @inheritDoc
*/
var HtmlSoundChannel = (function (_super) {
__extends(HtmlSoundChannel, _super);
/**
* @private
*/
function HtmlSoundChannel(audio) {
var _this = _super.call(this) || this;
/**
* @private
*/
_this.$startTime = 0;
/**
* @private
*/
_this.audio = null;
//声音是否已经播放完成
_this.isStopped = false;
_this.canPlay = function () {
_this.audio.removeEventListener("canplay", _this.canPlay);
try {
_this.audio.currentTime = _this.$startTime;
}
catch (e) {
}
finally {
_this.audio.play();
}
};
/**
* @private
*/
_this.onPlayEnd = function () {
if (_this.$loops == 1) {
_this.stop();
_this.dispatchEventWith(egret.Event.SOUND_COMPLETE);
return;
}
if (_this.$loops > 0) {
_this.$loops--;
}
/////////////
//this.audio.load();
_this.$play();
};
/**
* @private
*/
_this._volume = 1;
audio.addEventListener("ended", _this.onPlayEnd);
_this.audio = audio;
return _this;
}
HtmlSoundChannel.prototype.$play = function () {
if (this.isStopped) {
egret.$error(1036);
return;
}
try {
//this.audio.pause();
this.audio.volume = this._volume;
this.audio.currentTime = this.$startTime;
}
catch (e) {
this.audio.addEventListener("canplay", this.canPlay);
return;
}
this.audio.play();
};
/**
* @private
* @inheritDoc
*/
HtmlSoundChannel.prototype.stop = function () {
if (!this.audio)
return;
if (!this.isStopped) {
egret.sys.$popSoundChannel(this);
}
this.isStopped = true;
var audio = this.audio;
audio.removeEventListener("ended", this.onPlayEnd);
audio.volume = 0;
this._volume = 0;
this.audio = null;
var url = this.$url;
//延迟一定时间再停止,规避chrome报错
window.setTimeout(function () {
audio.pause();
web.HtmlSound.$recycle(url, audio);
}, 200);
};
Object.defineProperty(HtmlSoundChannel.prototype, "volume", {
/**
* @private
* @inheritDoc
*/
get: function () {
return this._volume;
},
/**
* @inheritDoc
*/
set: function (value) {
if (this.isStopped) {
egret.$error(1036);
return;
}
this._volume = value;
if (!this.audio)
return;
this.audio.volume = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(HtmlSoundChannel.prototype, "position", {
/**
* @private
* @inheritDoc
*/
get: function () {
if (!this.audio)
return 0;
return this.audio.currentTime;
},
enumerable: true,
configurable: true
});
return HtmlSoundChannel;
}(egret.EventDispatcher));
web.HtmlSoundChannel = HtmlSoundChannel;
})(web = egret.web || (egret.web = {}));
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var web;
(function (web) {
/**
* @private
*/
var WebAudioDecode = (function () {
function WebAudioDecode() {
}
/**
* @private
*
*/
WebAudioDecode.decodeAudios = function () {
if (WebAudioDecode.decodeArr.length <= 0) {
return;
}
if (WebAudioDecode.isDecoding) {
return;
}
WebAudioDecode.isDecoding = true;
var decodeInfo = WebAudioDecode.decodeArr.shift();
WebAudioDecode.ctx.decodeAudioData(decodeInfo["buffer"], function (audioBuffer) {
decodeInfo["self"].audioBuffer = audioBuffer;
if (decodeInfo["success"]) {
decodeInfo["success"]();
}
WebAudioDecode.isDecoding = false;
WebAudioDecode.decodeAudios();
}, function () {
alert("sound decode error: " + decodeInfo["url"] + "!\nsee http://edn.egret.com/cn/docs/page/156");
if (decodeInfo["fail"]) {
decodeInfo["fail"]();
}
WebAudioDecode.isDecoding = false;
WebAudioDecode.decodeAudios();
});
};
return WebAudioDecode;
}());
/**
* @private
*/
WebAudioDecode.canUseWebAudio = window["AudioContext"] || window["webkitAudioContext"] || window["mozAudioContext"];
/**
* @private
*/
WebAudioDecode.ctx = WebAudioDecode.canUseWebAudio ? new (window["AudioContext"] || window["webkitAudioContext"] || window["mozAudioContext"])() : undefined;
/**
* @private
*/
WebAudioDecode.decodeArr = [];
/**
* @private
*/
WebAudioDecode.isDecoding = false;
web.WebAudioDecode = WebAudioDecode;
/**
* @private
* @inheritDoc
*/
var WebAudioSound = (function (_super) {
__extends(WebAudioSound, _super);
/**
* @private
* @inheritDoc
*/
function WebAudioSound() {
var _this = _super.call(this) || this;
/**
* @private
*/
_this.loaded = false;
return _this;
}
Object.defineProperty(WebAudioSound.prototype, "length", {
get: function () {
if (this.audioBuffer) {
return this.audioBuffer.duration;
}
throw new Error("sound not loaded!");
//return 0;
},
enumerable: true,
configurable: true
});
/**
* @inheritDoc
*/
WebAudioSound.prototype.load = function (url) {
var self = this;
this.url = url;
if (true && !url) {
egret.$error(3002);
}
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onreadystatechange = function () {
if (request.readyState == 4) {
var ioError = (request.status >= 400 || request.status == 0);
if (ioError) {
self.dispatchEventWith(egret.IOErrorEvent.IO_ERROR);
}
else {
WebAudioDecode.decodeArr.push({
"buffer": request.response,
"success": onAudioLoaded,
"fail": onAudioError,
"self": self,
"url": self.url
});
WebAudioDecode.decodeAudios();
}
}
};
request.send();
function onAudioLoaded() {
self.loaded = true;
self.dispatchEventWith(egret.Event.COMPLETE);
}
function onAudioError() {
self.dispatchEventWith(egret.IOErrorEvent.IO_ERROR);
}
};
/**
* @inheritDoc
*/
WebAudioSound.prototype.play = function (startTime, loops) {
startTime = +startTime || 0;
loops = +loops || 0;
if (true && this.loaded == false) {
egret.$error(1049);
}
var channel = new web.WebAudioSoundChannel();
channel.$url = this.url;
channel.$loops = loops;
channel.$audioBuffer = this.audioBuffer;
channel.$startTime = startTime;
channel.$play();
egret.sys.$pushSoundChannel(channel);
return channel;
};
/**
* @inheritDoc
*/
WebAudioSound.prototype.close = function () {
};
return WebAudioSound;
}(egret.EventDispatcher));
/**
* Background music
* @version Egret 2.4
* @platform Web,Native
* @language en_US
*/
/**
* 背景音乐
* @version Egret 2.4
* @platform Web,Native
* @language zh_CN
*/
WebAudioSound.MUSIC = "music";
/**
* EFFECT
* @version Egret 2.4
* @platform Web,Native
* @language en_US
*/
/**
* 音效
* @version Egret 2.4
* @platform Web,Native
* @language zh_CN
*/
WebAudioSound.EFFECT = "effect";
web.WebAudioSound = WebAudioSound;
})(web = egret.web || (egret.web = {}));
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var web;
(function (web) {
/**
* @private
* @inheritDoc
*/
var WebAudioSoundChannel = (function (_super) {
__extends(WebAudioSoundChannel, _super);
/**
* @private
*/
function WebAudioSoundChannel() {
var _this = _super.call(this) || this;
/**
* @private
*/
_this.$startTime = 0;
/**
* @private
*/
_this.bufferSource = null;
/**
* @private
*/
_this.context = web.WebAudioDecode.ctx;
//声音是否已经播放完成
_this.isStopped = false;
/**
* @private
*/
_this._currentTime = 0;
/**
* @private
*/
_this._volume = 1;
/**
* @private
*/
_this.onPlayEnd = function () {
if (_this.$loops == 1) {
_this.stop();
_this.dispatchEventWith(egret.Event.SOUND_COMPLETE);
return;
}
if (_this.$loops > 0) {
_this.$loops--;
}
/////////////
_this.$play();
};
/**
* @private
*/
_this._startTime = 0;
if (_this.context["createGain"]) {
_this.gain = _this.context["createGain"]();
}
else {
_this.gain = _this.context["createGainNode"]();
}
return _this;
}
WebAudioSoundChannel.prototype.$play = function () {
if (this.isStopped) {
egret.$error(1036);
return;
}
if (this.bufferSource) {
this.bufferSource.onended = null;
this.bufferSource = null;
}
var context = this.context;
var gain = this.gain;
var bufferSource = context.createBufferSource();
this.bufferSource = bufferSource;
bufferSource.buffer = this.$audioBuffer;
bufferSource.connect(gain);
gain.connect(context.destination);
bufferSource.onended = this.onPlayEnd;
this._startTime = Date.now();
this.gain.gain.value = this._volume;
bufferSource.start(0, this.$startTime);
this._currentTime = 0;
};
WebAudioSoundChannel.prototype.stop = function () {
if (this.bufferSource) {
var sourceNode = this.bufferSource;
if (sourceNode.stop) {
sourceNode.stop(0);
}
else {
sourceNode.noteOff(0);
}
sourceNode.onended = null;
sourceNode.disconnect();
this.bufferSource = null;
this.$audioBuffer = null;
}
if (!this.isStopped) {
egret.sys.$popSoundChannel(this);
}
this.isStopped = true;
};
Object.defineProperty(WebAudioSoundChannel.prototype, "volume", {
/**
* @private
* @inheritDoc
*/
get: function () {
return this._volume;
},
/**
* @inheritDoc
*/
set: function (value) {
if (this.isStopped) {
egret.$error(1036);
return;
}
this._volume = value;
this.gain.gain.value = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebAudioSoundChannel.prototype, "position", {
/**
* @private
* @inheritDoc
*/
get: function () {
if (this.bufferSource) {
return (Date.now() - this._startTime) / 1000 + this.$startTime;
}
return 0;
},
enumerable: true,
configurable: true
});
return WebAudioSoundChannel;
}(egret.EventDispatcher));
web.WebAudioSoundChannel = WebAudioSoundChannel;
})(web = egret.web || (egret.web = {}));
})(egret || (egret = {}));
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
var egret;
(function (egret) {
var web;
(function (web) {
/**
* @private
* @inheritDoc
*/
var WebVideo = (function (_super) {
__extends(WebVideo, _super);
/**
* @inheritDoc
*/
function WebVideo(url, cache) {
if (cache === void 0) { cache = true; }
var _this = _super.call(this) || this;
/**
* @private
*/
_this.loaded = false;
/**
* @private
*/
_this.closed = false;
/**
* @private
*/
_this.heightSet = NaN;
/**
* @private
*/
_this.widthSet = NaN;
_this.isPlayed = false;
_this.screenChanged = function (e) {
var isfullscreen = !!_this.video['webkitDisplayingFullscreen'];
if (!isfullscreen) {
_this.checkFullScreen(false);
if (!egret.Capabilities.isMobile) {
_this._fullscreen = isfullscreen;
}
}
};
_this._fullscreen = true;
/**
* @private
*
*/
_this.onVideoLoaded = function () {
_this.video.removeEventListener("canplay", _this.onVideoLoaded);
var video = _this.video;
_this.loaded = true;
//video.pause();
if (_this.posterData) {
_this.posterData.width = _this.getPlayWidth();
_this.posterData.height = _this.getPlayHeight();
}
video.width = video.videoWidth;
video.height = video.videoHeight;
_this.$renderDirty = true;
window.setTimeout(function () {
_this.dispatchEventWith(egret.Event.COMPLETE);
}, 200);
};
_this.src = url;
_this.once(egret.Event.ADDED_TO_STAGE, _this.loadPoster, _this);
if (url) {
_this.load();
}
return _this;
}
/**
* @inheritDoc
*/
WebVideo.prototype.load = function (url, cache) {
var _this = this;
if (cache === void 0) { cache = true; }
url = url || this.src;
this.src = url;
if (true && !url) {
egret.$error(3002);
}
if (this.video && this.video.src == url) {
return;
}
var video;
if (!this.video || egret.Capabilities.isMobile) {
video = document.createElement("video");
this.video = video;
video.controls = null;
}
else {
video = this.video;
}
video.src = url;
video.setAttribute("autoplay", "autoplay");
video.setAttribute("webkit-playsinline", "true");
video.addEventListener("canplay", this.onVideoLoaded);
video.addEventListener("error", function () { return _this.onVideoError(); });
video.addEventListener("ended", function () { return _this.onVideoEnded(); });
video.load();
video.play();
video.style.position = "absolute";
video.style.top = "0px";
video.style.zIndex = "-88888";
video.style.left = "0px";
video.height = 1;
video.width = 1;
window.setTimeout(function () { return video.pause(); }, 170);
};
/**
* @inheritDoc
*/
WebVideo.prototype.play = function (startTime, loop) {
var _this = this;
if (loop === void 0) { loop = false; }
if (this.loaded == false) {
this.load(this.src);
this.once(egret.Event.COMPLETE, function (e) { return _this.play(startTime, loop); }, this);
return;
}
this.isPlayed = true;
var video = this.video;
if (startTime != undefined)
video.currentTime = +startTime || 0;
video.loop = !!loop;
if (egret.Capabilities.isMobile) {
video.style.zIndex = "-88888"; //移动端,就算设置成最小,只要全屏,都会在最上层,而且在自动退出去后,不担心挡住canvas
}
else {
video.style.zIndex = "9999";
}
video.style.position = "absolute";
video.style.top = "0px";
video.style.left = "0px";
video.height = video.videoHeight;
video.width = video.videoWidth;
if (egret.Capabilities.os != "Windows PC" && egret.Capabilities.os != "Mac OS") {
window.setTimeout(function () {
video.width = 0;
}, 1000);
}
this.checkFullScreen(this._fullscreen);
};
WebVideo.prototype.checkFullScreen = function (playFullScreen) {
var video = this.video;
if (playFullScreen) {
if (video.parentElement == null) {
video.removeAttribute("webkit-playsinline");
document.body.appendChild(video);
}
egret.stopTick(this.markDirty, this);
this.goFullscreen();
}
else {
if (video.parentElement != null) {
video.parentElement.removeChild(video);
}
video.setAttribute("webkit-playsinline", "true");
this.setFullScreenMonitor(false);
egret.startTick(this.markDirty, this);
if (egret.Capabilities.isMobile) {
this.video.currentTime = 0;
this.onVideoEnded();
return;
}
}
video.play();
};
WebVideo.prototype.goFullscreen = function () {
var video = this.video;
var fullscreenType;
fullscreenType = egret.web.getPrefixStyleName('requestFullscreen', video);
if (!video[fullscreenType]) {
fullscreenType = egret.web.getPrefixStyleName('requestFullScreen', video);
if (!video[fullscreenType]) {
return true;
}
}
video.removeAttribute("webkit-playsinline");
video[fullscreenType]();
this.setFullScreenMonitor(true);
return true;
};
WebVideo.prototype.setFullScreenMonitor = function (use) {
var video = this.video;
if (use) {
video.addEventListener("mozfullscreenchange", this.screenChanged);
video.addEventListener("webkitfullscreenchange", this.screenChanged);
video.addEventListener("mozfullscreenerror", this.screenError);
video.addEventListener("webkitfullscreenerror", this.screenError);
}
else {
video.removeEventListener("mozfullscreenchange", this.screenChanged);
video.removeEventListener("webkitfullscreenchange", this.screenChanged);
video.removeEventListener("mozfullscreenerror", this.screenError);
video.removeEventListener("webkitfullscreenerror", this.screenError);
}
};
WebVideo.prototype.screenError = function () {
egret.$error(3014);
};
WebVideo.prototype.exitFullscreen = function () {
//退出全屏
if (document['exitFullscreen']) {
document['exitFullscreen']();
}
else if (document['msExitFullscreen']) {
document['msExitFullscreen']();
}
else if (document['mozCancelFullScreen']) {
document['mozCancelFullScreen']();
}
else if (document['oCancelFullScreen']) {
document['oCancelFullScreen']();
}
else if (document['webkitExitFullscreen']) {
document['webkitExitFullscreen']();
}
else {
}
};
/**
* @private
*
*/
WebVideo.prototype.onVideoEnded = function () {
this.pause();
this.isPlayed = false;
this.$renderDirty = true;
this.dispatchEventWith(egret.Event.ENDED);
};
/**
* @private
*
*/
WebVideo.prototype.onVideoError = function () {
this.dispatchEventWith(egret.IOErrorEvent.IO_ERROR);
};
/**
* @inheritDoc
*/
WebVideo.prototype.close = function () {
var _this = this;
this.closed = true;
this.video.removeEventListener("canplay", this.onVideoLoaded);
this.video.removeEventListener("error", function () { return _this.onVideoError(); });
this.video.removeEventListener("ended", function () { return _this.onVideoEnded(); });
this.pause();
if (this.loaded == false && this.video)
this.video.src = "";
if (this.video && this.video.parentElement) {
this.video.parentElement.removeChild(this.video);
this.video = null;
}
this.loaded = false;
};
/**
* @inheritDoc
*/
WebVideo.prototype.pause = function () {
if (this.video) {
this.video.pause();
}
egret.stopTick(this.markDirty, this);
this.$renderDirty = true;
};
Object.defineProperty(WebVideo.prototype, "volume", {
/**
* @inheritDoc
*/
get: function () {
if (!this.video)
return 1;
return this.video.volume;
},
/**
* @inheritDoc
*/
set: function (value) {
if (!this.video)
return;
this.video.volume = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebVideo.prototype, "position", {
/**
* @inheritDoc
*/
get: function () {
if (!this.video)
return 0;
return this.video.currentTime;
},
/**
* @inheritDoc
*/
set: function (value) {
if (!this.video)
return;
this.video.currentTime = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebVideo.prototype, "fullscreen", {
/**
* @inheritDoc
*/
get: function () {
return this._fullscreen;
},
/**
* @inheritDoc
*/
set: function (value) {
if (egret.Capabilities.isMobile) {
return;
}
this._fullscreen = !!value;
if (this.video && this.video.paused == false) {
this.checkFullScreen(this._fullscreen);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebVideo.prototype, "bitmapData", {
/**
* @inheritDoc
*/
get: function () {
if (!this.video || !this.loaded)
return null;
if (!this._bitmapData) {
this.video.width = this.video.videoWidth;
this.video.height = this.video.videoHeight;
this._bitmapData = new egret.BitmapData(this.video);
this._bitmapData.$deleteSource = false;
}
return this._bitmapData;
},
enumerable: true,
configurable: true
});
WebVideo.prototype.loadPoster = function () {
var _this = this;
var poster = this.poster;
if (!poster)
return;
var imageLoader = new egret.ImageLoader();
imageLoader.once(egret.Event.COMPLETE, function (e) {
var posterData = imageLoader.data;
_this.posterData = imageLoader.data;
_this.posterData.width = _this.getPlayWidth();
_this.posterData.height = _this.getPlayHeight();
_this.$renderDirty = true;
}, this);
imageLoader.load(poster);
};
/**
* @private
*/
WebVideo.prototype.$measureContentBounds = function (bounds) {
var bitmapData = this.bitmapData;
var posterData = this.posterData;
if (bitmapData) {
bounds.setTo(0, 0, this.getPlayWidth(), this.getPlayHeight());
}
else if (posterData) {
bounds.setTo(0, 0, this.getPlayWidth(), this.getPlayHeight());
}
else {
bounds.setEmpty();
}
};
WebVideo.prototype.getPlayWidth = function () {
if (!isNaN(this.widthSet)) {
return this.widthSet;
}
if (this.bitmapData) {
return this.bitmapData.width;
}
if (this.posterData) {
return this.posterData.width;
}
return NaN;
};
WebVideo.prototype.getPlayHeight = function () {
if (!isNaN(this.heightSet)) {
return this.heightSet;
}
if (this.bitmapData) {
return this.bitmapData.height;
}
if (this.posterData) {
return this.posterData.height;
}
return NaN;
};
WebVideo.prototype.markDirty = function () {
this.$renderDirty = true;
return true;
};
/**
* @private
* 设置显示高度
*/
WebVideo.prototype.$setHeight = function (value) {
this.heightSet = +value || 0;
this.$renderDirty = true;
_super.prototype.$setHeight.call(this, value);
};
/**
* @private
* 设置显示宽度
*/
WebVideo.prototype.$setWidth = function (value) {
this.widthSet = +value || 0;
this.$renderDirty = true;
_super.prototype.$setWidth.call(this, value);
};
Object.defineProperty(WebVideo.prototype, "paused", {
get: function () {
if (this.video) {
return this.video.paused;
}
return true;
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebVideo.prototype, "length", {
/**
* @inheritDoc
*/
get: function () {
if (this.video) {
return this.video.duration;
}
throw new Error("Video not loaded!");
},
enumerable: true,
configurable: true
});
return WebVideo;
}(egret.DisplayObject));
web.WebVideo = WebVideo;
egret.Video = WebVideo;
})(web = egret.web || (egret.web = {}));
})(egret || (egret = {}));