var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var dragonBones; (function (dragonBones) { /** * @language zh_CN * Pixi 贴图集数据。 * @version DragonBones 3.0 */ var PixiTextureAtlasData = (function (_super) { __extends(PixiTextureAtlasData, _super); /** * @private */ function PixiTextureAtlasData() { return _super.call(this) || this; } /** * @private */ PixiTextureAtlasData.toString = function () { return "[class dragonBones.PixiTextureAtlasData]"; }; /** * @private */ PixiTextureAtlasData.prototype._onClear = function () { _super.prototype._onClear.call(this); if (this.texture) { //this.texture.dispose(); } this.texture = null; }; /** * @private */ PixiTextureAtlasData.prototype.generateTexture = function () { return dragonBones.BaseObject.borrowObject(PixiTextureData); }; return PixiTextureAtlasData; }(dragonBones.TextureAtlasData)); dragonBones.PixiTextureAtlasData = PixiTextureAtlasData; /** * @private */ var PixiTextureData = (function (_super) { __extends(PixiTextureData, _super); function PixiTextureData() { return _super.call(this) || this; } PixiTextureData.toString = function () { return "[class dragonBones.PixiTextureData]"; }; PixiTextureData.prototype._onClear = function () { _super.prototype._onClear.call(this); if (this.texture) { this.texture.destroy(); } this.texture = null; }; return PixiTextureData; }(dragonBones.TextureData)); dragonBones.PixiTextureData = PixiTextureData; })(dragonBones || (dragonBones = {})); var dragonBones; (function (dragonBones) { /** * @inheritDoc */ var PixiArmatureDisplay = (function (_super) { __extends(PixiArmatureDisplay, _super); /** * @internal * @private */ function PixiArmatureDisplay() { return _super.call(this) || this; } /** * @private */ PixiArmatureDisplay.prototype._onClear = function () { if (this._debugDrawer) { this._debugDrawer.destroy(true); } this._armature = null; this._debugDrawer = null; this.destroy(); }; /** * @private */ PixiArmatureDisplay.prototype._dispatchEvent = function (type, eventObject) { this.emit(type, eventObject); }; /** * @private */ PixiArmatureDisplay.prototype._debugDraw = function (isEnabled) { if (!this._debugDrawer) { this._debugDrawer = new PIXI.Sprite(); var boneDrawer = new PIXI.Graphics(); this._debugDrawer.addChild(boneDrawer); } if (isEnabled) { this.addChild(this._debugDrawer); var boneDrawer = this._debugDrawer.getChildAt(0); boneDrawer.clear(); var bones = this._armature.getBones(); for (var i = 0, l = bones.length; i < l; ++i) { var bone = bones[i]; var boneLength = bone.boneData.length; var startX = bone.globalTransformMatrix.tx; var startY = bone.globalTransformMatrix.ty; var endX = startX + bone.globalTransformMatrix.a * boneLength; var endY = startY + bone.globalTransformMatrix.b * boneLength; boneDrawer.lineStyle(2, bone.ik ? 0xFF0000 : 0x00FFFF, 0.7); boneDrawer.moveTo(startX, startY); boneDrawer.lineTo(endX, endY); boneDrawer.lineStyle(0, 0, 0); boneDrawer.beginFill(0x00FFFF, 0.7); boneDrawer.drawCircle(startX, startY, 3); boneDrawer.endFill(); } var slots = this._armature.getSlots(); for (var i = 0, l = slots.length; i < l; ++i) { var slot = slots[i]; var boundingBoxData = slot.boundingBoxData; if (boundingBoxData) { var child = this._debugDrawer.getChildByName(slot.name); if (!child) { child = new PIXI.Graphics(); child.name = slot.name; this._debugDrawer.addChild(child); } child.clear(); child.beginFill(0xFF00FF, 0.3); switch (boundingBoxData.type) { case 0 /* Rectangle */: child.drawRect(-boundingBoxData.width * 0.5, -boundingBoxData.height * 0.5, boundingBoxData.width, boundingBoxData.height); break; case 1 /* Ellipse */: child.drawEllipse(-boundingBoxData.width * 0.5, -boundingBoxData.height * 0.5, boundingBoxData.width, boundingBoxData.height); break; case 2 /* Polygon */: var vertices = boundingBoxData.vertices; for (var i_1 = 0, l_1 = boundingBoxData.vertices.length; i_1 < l_1; i_1 += 2) { if (i_1 === 0) { child.moveTo(vertices[i_1], vertices[i_1 + 1]); } else { child.lineTo(vertices[i_1], vertices[i_1 + 1]); } } break; default: break; } child.endFill(); slot._updateTransformAndMatrix(); slot.updateGlobalTransform(); var transform = slot.global; child.setTransform(transform.x, transform.y, transform.scaleX, transform.scaleY, transform.skewX, 0.0, transform.skewY - transform.skewX, slot._pivotX, slot._pivotY); } else { var child = this._debugDrawer.getChildByName(slot.name); if (child) { this._debugDrawer.removeChild(child); } } } } else if (this._debugDrawer && this._debugDrawer.parent === this) { this.removeChild(this._debugDrawer); } }; /** * @inheritDoc */ PixiArmatureDisplay.prototype.hasEvent = function (type) { return this.listeners(type, true); // .d.ts bug }; /** * @inheritDoc */ PixiArmatureDisplay.prototype.addEvent = function (type, listener, target) { this.addListener(type, listener, target); }; /** * @inheritDoc */ PixiArmatureDisplay.prototype.removeEvent = function (type, listener, target) { this.removeListener(type, listener, target); }; /** * @inheritDoc */ PixiArmatureDisplay.prototype.dispose = function (disposeProxy) { if (disposeProxy === void 0) { disposeProxy = true; } if (this._armature) { this._armature.dispose(); this._armature = null; } }; Object.defineProperty(PixiArmatureDisplay.prototype, "armature", { /** * @inheritDoc */ get: function () { return this._armature; }, enumerable: true, configurable: true }); Object.defineProperty(PixiArmatureDisplay.prototype, "animation", { /** * @inheritDoc */ get: function () { return this._armature.animation; }, enumerable: true, configurable: true }); /** * @deprecated * @see dragonBones.Armature#clock * @see dragonBones.PixiFactory#clock * @see dragonBones.Animation#timescale * @see dragonBones.Animation#stop() */ PixiArmatureDisplay.prototype.advanceTimeBySelf = function (on) { if (on) { this._armature.clock = dragonBones.PixiFactory.clock; } else { this._armature.clock = null; } }; return PixiArmatureDisplay; }(PIXI.Container)); dragonBones.PixiArmatureDisplay = PixiArmatureDisplay; })(dragonBones || (dragonBones = {})); var dragonBones; (function (dragonBones) { /** * @language zh_CN * Pixi 插槽。 * @version DragonBones 3.0 */ var PixiSlot = (function (_super) { __extends(PixiSlot, _super); /** * @internal * @private */ function PixiSlot() { var _this = _super.call(this) || this; _this._updateTransform = PIXI.VERSION[0] === "3" ? _this._updateTransformV3 : _this._updateTransformV4; return _this; } /** * @private */ PixiSlot.toString = function () { return "[class dragonBones.PixiSlot]"; }; /** * @private */ PixiSlot.prototype._onClear = function () { _super.prototype._onClear.call(this); this._renderDisplay = null; }; /** * @private */ PixiSlot.prototype._initDisplay = function (value) { }; /** * @private */ PixiSlot.prototype._disposeDisplay = function (value) { value.destroy(); }; /** * @private */ PixiSlot.prototype._onUpdateDisplay = function () { this._renderDisplay = (this._display ? this._display : this._rawDisplay); }; /** * @private */ PixiSlot.prototype._addDisplay = function () { var container = this._armature.display; container.addChild(this._renderDisplay); }; /** * @private */ PixiSlot.prototype._replaceDisplay = function (value) { var container = this._armature.display; var prevDisplay = value; container.addChild(this._renderDisplay); container.swapChildren(this._renderDisplay, prevDisplay); container.removeChild(prevDisplay); }; /** * @private */ PixiSlot.prototype._removeDisplay = function () { this._renderDisplay.parent.removeChild(this._renderDisplay); }; /** * @private */ PixiSlot.prototype._updateZOrder = function () { var container = this._armature.display; var index = container.getChildIndex(this._renderDisplay); if (index === this._zOrder) { return; } container.addChildAt(this._renderDisplay, this._zOrder); }; /** * @internal * @private */ PixiSlot.prototype._updateVisible = function () { this._renderDisplay.visible = this._parent.visible; }; /** * @private */ PixiSlot.prototype._updateBlendMode = function () { switch (this._blendMode) { case 0 /* Normal */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.NORMAL; break; case 1 /* Add */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.ADD; break; case 3 /* Darken */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.DARKEN; break; case 4 /* Difference */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.DIFFERENCE; break; case 6 /* HardLight */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.HARD_LIGHT; break; case 9 /* Lighten */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.LIGHTEN; break; case 10 /* Multiply */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.MULTIPLY; break; case 11 /* Overlay */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.OVERLAY; break; case 12 /* Screen */: this._renderDisplay.blendMode = PIXI.BLEND_MODES.SCREEN; break; default: break; } }; /** * @private */ PixiSlot.prototype._updateColor = function () { this._renderDisplay.alpha = this._colorTransform.alphaMultiplier; }; /** * @private */ PixiSlot.prototype._updateFrame = function () { var isMeshDisplay = this._meshData && this._display === this._meshDisplay; var currentTextureData = this._textureData; if (this._displayIndex >= 0 && this._display && currentTextureData) { var currentTextureAtlasData = currentTextureData.parent; // Update replaced texture atlas. if (this._armature.replacedTexture && this._displayData && currentTextureAtlasData === this._displayData.texture.parent) { currentTextureAtlasData = this._armature._replaceTextureAtlasData; if (!currentTextureAtlasData) { currentTextureAtlasData = dragonBones.BaseObject.borrowObject(dragonBones.PixiTextureAtlasData); currentTextureAtlasData.copyFrom(currentTextureData.parent); currentTextureAtlasData.texture = this._armature.replacedTexture; this._armature._replaceTextureAtlasData = currentTextureAtlasData; } currentTextureData = currentTextureAtlasData.getTexture(currentTextureData.name); } var currentTextureAtlas = currentTextureAtlasData.texture; if (currentTextureAtlas) { if (!currentTextureData.texture) { currentTextureData.texture = new PIXI.Texture(currentTextureAtlas, currentTextureData.region, // No need to set frame. currentTextureData.region, new PIXI.Rectangle(0, 0, currentTextureData.region.width, currentTextureData.region.height), currentTextureData.rotated // .d.ts bug ); } if (isMeshDisplay) { var meshDisplay = this._renderDisplay; var textureAtlasWidth = currentTextureAtlasData.width > 0.0 ? currentTextureAtlasData.width : currentTextureAtlas.width; var textureAtlasHeight = currentTextureAtlasData.height > 0.0 ? currentTextureAtlasData.height : currentTextureAtlas.height; meshDisplay.uvs = new Float32Array(this._meshData.uvs); meshDisplay.vertices = new Float32Array(this._meshData.vertices); meshDisplay.indices = new Uint16Array(this._meshData.vertexIndices); for (var i = 0, l = meshDisplay.uvs.length; i < l; i += 2) { var u = meshDisplay.uvs[i]; var v = meshDisplay.uvs[i + 1]; meshDisplay.uvs[i] = (currentTextureData.region.x + u * currentTextureData.region.width) / textureAtlasWidth; meshDisplay.uvs[i + 1] = (currentTextureData.region.y + v * currentTextureData.region.height) / textureAtlasHeight; } meshDisplay.texture = currentTextureData.texture; //meshDisplay.dirty = true; // Pixi 3.x meshDisplay.dirty++; // Pixi 4.x Can not support change mesh vertice count. } else { var normalDisplay = this._renderDisplay; normalDisplay.texture = currentTextureData.texture; } this._updateVisible(); return; } } if (isMeshDisplay) { var meshDisplay = this._renderDisplay; meshDisplay.texture = null; meshDisplay.x = 0.0; meshDisplay.y = 0.0; meshDisplay.visible = false; } else { var normalDisplay = this._renderDisplay; normalDisplay.texture = null; normalDisplay.x = 0.0; normalDisplay.y = 0.0; normalDisplay.visible = false; } }; /** * @private */ PixiSlot.prototype._updateMesh = function () { var meshDisplay = this._renderDisplay; var hasFFD = this._ffdVertices.length > 0; if (this._meshData.skinned) { for (var i = 0, iF = 0, l = this._meshData.vertices.length; i < l; i += 2) { var iH = i / 2; var boneIndices = this._meshData.boneIndices[iH]; var boneVertices = this._meshData.boneVertices[iH]; var weights = this._meshData.weights[iH]; var xG = 0.0, yG = 0.0; for (var iB = 0, lB = boneIndices.length; iB < lB; ++iB) { var bone = this._meshBones[boneIndices[iB]]; var matrix = bone.globalTransformMatrix; var weight = weights[iB]; var xL = 0.0, yL = 0.0; if (hasFFD) { xL = boneVertices[iB * 2] + this._ffdVertices[iF]; yL = boneVertices[iB * 2 + 1] + this._ffdVertices[iF + 1]; } else { xL = boneVertices[iB * 2]; yL = boneVertices[iB * 2 + 1]; } xG += (matrix.a * xL + matrix.c * yL + matrix.tx) * weight; yG += (matrix.b * xL + matrix.d * yL + matrix.ty) * weight; iF += 2; } meshDisplay.vertices[i] = xG; meshDisplay.vertices[i + 1] = yG; } } else if (hasFFD) { var vertices = this._meshData.vertices; for (var i = 0, l = this._meshData.vertices.length; i < l; i += 2) { var xG = vertices[i] + this._ffdVertices[i]; var yG = vertices[i + 1] + this._ffdVertices[i + 1]; meshDisplay.vertices[i] = xG; meshDisplay.vertices[i + 1] = yG; } } }; /** * @private */ PixiSlot.prototype._updateTransform = function (isSkinnedMesh) { throw new Error(); }; /** * @private */ PixiSlot.prototype._updateTransformV3 = function (isSkinnedMesh) { if (isSkinnedMesh) { this._renderDisplay.setTransform(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0); } else { this.updateGlobalTransform(); // Update transform. var x = this.globalTransformMatrix.tx - (this.globalTransformMatrix.a * this._pivotX + this.globalTransformMatrix.c * this._pivotY); // Pixi pivot do not work. var y = this.globalTransformMatrix.ty - (this.globalTransformMatrix.b * this._pivotX + this.globalTransformMatrix.d * this._pivotY); // Pixi pivot do not work. var transform = this.global; this._renderDisplay.setTransform(x, y, transform.scaleX, transform.scaleY, transform.skewX, 0.0, transform.skewY - transform.skewX); } }; /** * @private */ PixiSlot.prototype._updateTransformV4 = function (isSkinnedMesh) { if (isSkinnedMesh) { this._renderDisplay.setTransform(0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0); } else { this.updateGlobalTransform(); // Update transform. var transform = this.global; this._renderDisplay.setTransform(transform.x, transform.y, transform.scaleX, transform.scaleY, transform.skewX, 0.0, transform.skewY - transform.skewX, this._pivotX, this._pivotY); } }; return PixiSlot; }(dragonBones.Slot)); dragonBones.PixiSlot = PixiSlot; })(dragonBones || (dragonBones = {})); var dragonBones; (function (dragonBones) { /** * @language zh_CN * Pixi 工厂。 * @version DragonBones 3.0 */ var PixiFactory = (function (_super) { __extends(PixiFactory, _super); /** * @language zh_CN * 创建一个工厂。 (通常只需要一个全局工厂实例) * @param dataParser 龙骨数据解析器,如果不设置,则使用默认解析器。 * @version DragonBones 3.0 */ function PixiFactory(dataParser) { if (dataParser === void 0) { dataParser = null; } var _this = _super.call(this, dataParser) || this; if (!PixiFactory._eventManager) { PixiFactory._eventManager = new dragonBones.PixiArmatureDisplay(); PixiFactory._clock = new dragonBones.WorldClock(); PIXI.ticker.shared.add(PixiFactory._clockHandler, PixiFactory); } return _this; } PixiFactory._clockHandler = function (passedTime) { PixiFactory._clock.advanceTime(-1); // passedTime !? //console.log("Dragonbones' clock ticking"); }; Object.defineProperty(PixiFactory, "factory", { /** * @language zh_CN * 一个可以直接使用的全局工厂实例。 * @version DragonBones 4.7 */ get: function () { if (!PixiFactory._factory) { PixiFactory._factory = new PixiFactory(); } return PixiFactory._factory; }, enumerable: true, configurable: true }); Object.defineProperty(PixiFactory, "clock", { /** * @language zh_CN * 一个可以直接使用的全局 WorldClock 实例. * @version DragonBones 5.0 */ get: function () { return PixiFactory._clock; }, enumerable: true, configurable: true }); /** * @private */ PixiFactory.prototype._generateTextureAtlasData = function (textureAtlasData, textureAtlas) { if (textureAtlasData) { textureAtlasData.texture = textureAtlas; } else { textureAtlasData = dragonBones.BaseObject.borrowObject(dragonBones.PixiTextureAtlasData); } return textureAtlasData; }; /** * @private */ PixiFactory.prototype._generateArmature = function (dataPackage) { var armature = dragonBones.BaseObject.borrowObject(dragonBones.Armature); var armatureDisplay = new dragonBones.PixiArmatureDisplay(); armatureDisplay._armature = armature; armature._init(dataPackage.armature, dataPackage.skin, armatureDisplay, armatureDisplay, PixiFactory._eventManager); return armature; }; /** * @private */ PixiFactory.prototype._generateSlot = function (dataPackage, skinSlotData, armature) { var slotData = skinSlotData.slot; var slot = dragonBones.BaseObject.borrowObject(dragonBones.PixiSlot); var displayList = []; slot._init(skinSlotData, new PIXI.Sprite(), new PIXI.mesh.Mesh(null, null, null, null, PIXI.mesh.Mesh.DRAW_MODES.TRIANGLES)); for (var i = 0, l = skinSlotData.displays.length; i < l; ++i) { var displayData = skinSlotData.displays[i]; switch (displayData.type) { case 0 /* Image */: if (!displayData.texture) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.path); } if (dataPackage.textureAtlasName) { slot._textureDatas[i] = this._getTextureData(dataPackage.textureAtlasName, displayData.path); } displayList[i] = slot.rawDisplay; break; case 2 /* Mesh */: if (!displayData.texture) { displayData.texture = this._getTextureData(dataPackage.dataName, displayData.path); } if (dataPackage.textureAtlasName) { slot._textureDatas[i] = this._getTextureData(dataPackage.textureAtlasName, displayData.path); } if (!displayData.mesh && displayData.share) { displayData.mesh = skinSlotData.getMesh(displayData.share); } displayList[i] = slot.meshDisplay; break; case 1 /* Armature */: var childArmature = this.buildArmature(displayData.path, dataPackage.dataName, null, dataPackage.textureAtlasName); if (childArmature) { childArmature.inheritAnimation = displayData.inheritAnimation; if (!childArmature.inheritAnimation) { var actions = slotData.actions.length > 0 ? slotData.actions : childArmature.armatureData.actions; if (actions.length > 0) { for (var i_2 = 0, l_2 = actions.length; i_2 < l_2; ++i_2) { childArmature._bufferAction(actions[i_2]); } } else { childArmature.animation.play(); } } displayData.armature = childArmature.armatureData; // } displayList[i] = childArmature; break; default: displayList[i] = null; break; } } slot._setDisplayList(displayList); return slot; }; /** * @language zh_CN * 创建一个指定名称的骨架,并使用骨架的显示容器来更新骨架动画。 * @param armatureName 骨架名称。 * @param dragonBonesName 龙骨数据名称,如果未设置,将检索所有的龙骨数据,如果多个数据中包含同名的骨架数据,可能无法创建出准确的骨架。 * @param skinName 皮肤名称,如果未设置,则使用默认皮肤。 * @param textureAtlasName 贴图集数据名称,如果未设置,则使用龙骨数据。 * @returns 骨架的显示容器。 * @see dragonBones.PixiArmatureDisplay * @version DragonBones 4.5 */ PixiFactory.prototype.buildArmatureDisplay = function (armatureName, dragonBonesName, skinName, textureAtlasName) { if (dragonBonesName === void 0) { dragonBonesName = null; } if (skinName === void 0) { skinName = null; } if (textureAtlasName === void 0) { textureAtlasName = null; } var armature = this.buildArmature(armatureName, dragonBonesName, skinName, textureAtlasName); if (armature) { var armatureDisplay = armature.display; PixiFactory._clock.add(armature); return armatureDisplay; } return null; }; /** * @language zh_CN * 获取带有指定贴图的显示对象。 * @param textureName 指定的贴图名称。 * @param dragonBonesName 指定的龙骨数据名称,如果未设置,将检索所有的龙骨数据。 * @version DragonBones 3.0 */ PixiFactory.prototype.getTextureDisplay = function (textureName, dragonBonesName) { if (dragonBonesName === void 0) { dragonBonesName = null; } var textureData = this._getTextureData(dragonBonesName, textureName); if (textureData) { if (!textureData.texture) { var textureAtlasTexture = textureData.parent.texture; var originSize = new PIXI.Rectangle(0, 0, textureData.region.width, textureData.region.height); textureData.texture = new PIXI.Texture(textureAtlasTexture, textureData.region, textureData.region, originSize, textureData.rotated // .d.ts bug ); } return new PIXI.Sprite(textureData.texture); } return null; }; Object.defineProperty(PixiFactory.prototype, "soundEventManater", { /** * @language zh_CN * 获取全局声音事件管理器。 * @version DragonBones 4.5 */ get: function () { return PixiFactory._eventManager; }, enumerable: true, configurable: true }); return PixiFactory; }(dragonBones.BaseFactory)); PixiFactory._factory = null; PixiFactory._eventManager = null; PixiFactory._clock = null; dragonBones.PixiFactory = PixiFactory; })(dragonBones || (dragonBones = {}));