9766 lines
395 KiB
JavaScript
9766 lines
395 KiB
JavaScript
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) {
|
||
/**
|
||
* DragonBones
|
||
*/
|
||
var DragonBones = (function () {
|
||
function DragonBones() {
|
||
}
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones.hasArmature = function (value) {
|
||
return DragonBones._armatures.indexOf(value) >= 0;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones.addArmature = function (value) {
|
||
if (value && DragonBones._armatures.indexOf(value) < 0) {
|
||
DragonBones._armatures.push(value);
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones.removeArmature = function (value) {
|
||
if (value) {
|
||
var index = DragonBones._armatures.indexOf(value);
|
||
if (index >= 0) {
|
||
DragonBones._armatures.splice(index, 1);
|
||
}
|
||
}
|
||
};
|
||
return DragonBones;
|
||
}());
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.PI_D = Math.PI * 2.0;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.PI_H = Math.PI / 2.0;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.PI_Q = Math.PI / 4.0;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.ANGLE_TO_RADIAN = Math.PI / 180.0;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.RADIAN_TO_ANGLE = 180.0 / Math.PI;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.SECOND_TO_MILLISECOND = 1000.0;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones.NO_TWEEN = 100;
|
||
DragonBones.VERSION = "5.0.0";
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones.ARGUMENT_ERROR = "Argument error.";
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.yDown = true;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.debug = false;
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBones.debugDraw = false;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
DragonBones._armatures = [];
|
||
dragonBones.DragonBones = DragonBones;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 基础对象。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
var BaseObject = (function () {
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function BaseObject() {
|
||
/**
|
||
* @language zh_CN
|
||
* 对象的唯一标识。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
this.hashCode = BaseObject._hashCode++;
|
||
this._isInPool = false;
|
||
}
|
||
BaseObject._returnObject = function (object) {
|
||
var classType = String(object.constructor);
|
||
var maxCount = BaseObject._maxCountMap[classType] == null ? BaseObject._defaultMaxCount : BaseObject._maxCountMap[classType];
|
||
var pool = BaseObject._poolsMap[classType] = BaseObject._poolsMap[classType] || [];
|
||
if (pool.length < maxCount) {
|
||
if (!object._isInPool) {
|
||
pool.push(object);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 设置每种对象池的最大缓存数量。
|
||
* @param objectConstructor 对象类。
|
||
* @param maxCount 最大缓存数量。 (设置为 0 则不缓存)
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseObject.setMaxCount = function (objectConstructor, maxCount) {
|
||
if (maxCount < 0 || maxCount !== maxCount) {
|
||
maxCount = 0;
|
||
}
|
||
if (objectConstructor) {
|
||
var classType = String(objectConstructor);
|
||
BaseObject._maxCountMap[classType] = maxCount;
|
||
var pool = BaseObject._poolsMap[classType];
|
||
if (pool && pool.length > maxCount) {
|
||
pool.length = maxCount;
|
||
}
|
||
}
|
||
else {
|
||
BaseObject._defaultMaxCount = maxCount;
|
||
for (var classType in BaseObject._poolsMap) {
|
||
if (BaseObject._maxCountMap[classType] == null) {
|
||
continue;
|
||
}
|
||
BaseObject._maxCountMap[classType] = maxCount;
|
||
var pool = BaseObject._poolsMap[classType];
|
||
if (pool.length > maxCount) {
|
||
pool.length = maxCount;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 清除对象池缓存的对象。
|
||
* @param objectConstructor 对象类。 (不设置则清除所有缓存)
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseObject.clearPool = function (objectConstructor) {
|
||
if (objectConstructor === void 0) { objectConstructor = null; }
|
||
if (objectConstructor) {
|
||
var pool = BaseObject._poolsMap[String(objectConstructor)];
|
||
if (pool && pool.length) {
|
||
pool.length = 0;
|
||
}
|
||
}
|
||
else {
|
||
for (var k in BaseObject._poolsMap) {
|
||
var pool = BaseObject._poolsMap[k];
|
||
pool.length = 0;
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 从对象池中创建指定对象。
|
||
* @param objectConstructor 对象类。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseObject.borrowObject = function (objectConstructor) {
|
||
var pool = BaseObject._poolsMap[String(objectConstructor)];
|
||
if (pool && pool.length > 0) {
|
||
var object = pool.pop();
|
||
object._isInPool = false;
|
||
return object;
|
||
}
|
||
else {
|
||
var object = new objectConstructor();
|
||
object._onClear();
|
||
return object;
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 清除数据并返还对象池。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseObject.prototype.returnToPool = function () {
|
||
this._onClear();
|
||
BaseObject._returnObject(this);
|
||
};
|
||
return BaseObject;
|
||
}());
|
||
BaseObject._hashCode = 0;
|
||
BaseObject._defaultMaxCount = 5000;
|
||
BaseObject._maxCountMap = {};
|
||
BaseObject._poolsMap = {};
|
||
dragonBones.BaseObject = BaseObject;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
var Point = (function () {
|
||
function Point(x, y) {
|
||
if (x === void 0) { x = 0.0; }
|
||
if (y === void 0) { y = 0.0; }
|
||
this.x = x;
|
||
this.y = y;
|
||
}
|
||
Point.prototype.copyFrom = function (value) {
|
||
this.x = value.x;
|
||
this.y = value.y;
|
||
};
|
||
Point.prototype.clear = function () {
|
||
this.x = this.y = 0.0;
|
||
};
|
||
return Point;
|
||
}());
|
||
dragonBones.Point = Point;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
var Rectangle = (function () {
|
||
function Rectangle(x, y, width, height) {
|
||
if (x === void 0) { x = 0.0; }
|
||
if (y === void 0) { y = 0.0; }
|
||
if (width === void 0) { width = 0.0; }
|
||
if (height === void 0) { height = 0.0; }
|
||
this.x = x;
|
||
this.y = y;
|
||
this.width = width;
|
||
this.height = height;
|
||
}
|
||
Rectangle.prototype.copyFrom = function (value) {
|
||
this.x = value.x;
|
||
this.y = value.y;
|
||
this.width = value.width;
|
||
this.height = value.height;
|
||
};
|
||
Rectangle.prototype.clear = function () {
|
||
this.x = this.y = 0.0;
|
||
this.width = this.height = 0.0;
|
||
};
|
||
return Rectangle;
|
||
}());
|
||
dragonBones.Rectangle = Rectangle;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 2D 变换。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Transform = (function () {
|
||
function Transform(
|
||
/**
|
||
* @language zh_CN
|
||
* 水平位移。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
x,
|
||
/**
|
||
* @language zh_CN
|
||
* 垂直位移。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
y,
|
||
/**
|
||
* @language zh_CN
|
||
* 水平倾斜。 (以弧度为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
skewX,
|
||
/**
|
||
* @language zh_CN
|
||
* 垂直倾斜。 (以弧度为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
skewY,
|
||
/**
|
||
* @language zh_CN
|
||
* 水平缩放。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
scaleX,
|
||
/**
|
||
* @language zh_CN
|
||
* 垂直缩放。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
scaleY) {
|
||
if (x === void 0) { x = 0.0; }
|
||
if (y === void 0) { y = 0.0; }
|
||
if (skewX === void 0) { skewX = 0.0; }
|
||
if (skewY === void 0) { skewY = 0.0; }
|
||
if (scaleX === void 0) { scaleX = 1.0; }
|
||
if (scaleY === void 0) { scaleY = 1.0; }
|
||
this.x = x;
|
||
this.y = y;
|
||
this.skewX = skewX;
|
||
this.skewY = skewY;
|
||
this.scaleX = scaleX;
|
||
this.scaleY = scaleY;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.normalizeRadian = function (value) {
|
||
value = (value + Math.PI) % (Math.PI * 2.0);
|
||
value += value > 0.0 ? -Math.PI : Math.PI;
|
||
return value;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.prototype.toString = function () {
|
||
return "[object dragonBones.Transform] x:" + this.x + " y:" + this.y + " skewX:" + this.skewX * 180.0 / Math.PI + " skewY:" + this.skewY * 180.0 / Math.PI + " scaleX:" + this.scaleX + " scaleY:" + this.scaleY;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.prototype.copyFrom = function (value) {
|
||
this.x = value.x;
|
||
this.y = value.y;
|
||
this.skewX = value.skewX;
|
||
this.skewY = value.skewY;
|
||
this.scaleX = value.scaleX;
|
||
this.scaleY = value.scaleY;
|
||
return this;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.prototype.identity = function () {
|
||
this.x = this.y = this.skewX = this.skewY = 0.0;
|
||
this.scaleX = this.scaleY = 1.0;
|
||
return this;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.prototype.add = function (value) {
|
||
this.x += value.x;
|
||
this.y += value.y;
|
||
this.skewX += value.skewX;
|
||
this.skewY += value.skewY;
|
||
this.scaleX *= value.scaleX;
|
||
this.scaleY *= value.scaleY;
|
||
return this;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Transform.prototype.minus = function (value) {
|
||
this.x -= value.x;
|
||
this.y -= value.y;
|
||
this.skewX = Transform.normalizeRadian(this.skewX - value.skewX);
|
||
this.skewY = Transform.normalizeRadian(this.skewY - value.skewY);
|
||
this.scaleX /= value.scaleX;
|
||
this.scaleY /= value.scaleY;
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 矩阵转换为变换。
|
||
* @param 矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Transform.prototype.fromMatrix = function (matrix) {
|
||
this.x = matrix.tx;
|
||
this.y = matrix.ty;
|
||
this.skewX = Math.atan(-matrix.c / matrix.d);
|
||
this.skewY = Math.atan(matrix.b / matrix.a);
|
||
var backupScaleX = this.scaleX, backupScaleY = this.scaleY;
|
||
var PI_Q = dragonBones.DragonBones.PI_Q;
|
||
var dSkew = this.skewX - this.skewY;
|
||
var cos = Math.cos(this.skewX);
|
||
var sin = Math.sin(this.skewX);
|
||
if (-0.01 < dSkew && dSkew < 0.01) {
|
||
this.scaleX = (this.skewY > -PI_Q && this.skewY < PI_Q) ? matrix.a / cos : matrix.b / sin;
|
||
}
|
||
else {
|
||
this.scaleX = (this.skewY > -PI_Q && this.skewY < PI_Q) ? matrix.a / Math.cos(this.skewY) : matrix.b / Math.sin(this.skewY);
|
||
}
|
||
this.scaleY = (this.skewX > -PI_Q && this.skewX < PI_Q) ? matrix.d / cos : -matrix.c / sin;
|
||
if (backupScaleX >= 0.0 && this.scaleX < 0.0) {
|
||
this.scaleX = -this.scaleX;
|
||
this.skewY = Transform.normalizeRadian(this.skewY - Math.PI);
|
||
}
|
||
if (backupScaleY >= 0.0 && this.scaleY < 0.0) {
|
||
this.scaleY = -this.scaleY;
|
||
this.skewX = Transform.normalizeRadian(this.skewX - Math.PI);
|
||
}
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 转换为矩阵。
|
||
* @param 矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Transform.prototype.toMatrix = function (matrix) {
|
||
if (this.skewX !== 0.0 || this.skewY !== 0.0) {
|
||
matrix.a = Math.cos(this.skewY);
|
||
matrix.b = Math.sin(this.skewY);
|
||
var dSkew = this.skewX - this.skewY;
|
||
if (-0.01 < dSkew && dSkew < 0.01) {
|
||
matrix.c = -matrix.b;
|
||
matrix.d = matrix.a;
|
||
}
|
||
else {
|
||
matrix.c = -Math.sin(this.skewX);
|
||
matrix.d = Math.cos(this.skewX);
|
||
}
|
||
if (this.scaleX !== 1.0) {
|
||
matrix.a *= this.scaleX;
|
||
matrix.b *= this.scaleX;
|
||
}
|
||
if (this.scaleY !== 1.0) {
|
||
matrix.c *= this.scaleY;
|
||
matrix.d *= this.scaleY;
|
||
}
|
||
}
|
||
else {
|
||
matrix.a = this.scaleX;
|
||
matrix.b = 0.0;
|
||
matrix.c = 0.0;
|
||
matrix.d = this.scaleY;
|
||
}
|
||
matrix.tx = this.x;
|
||
matrix.ty = this.y;
|
||
return this;
|
||
};
|
||
Object.defineProperty(Transform.prototype, "rotation", {
|
||
/**
|
||
* @language zh_CN
|
||
* 旋转。 (以弧度为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this.scaleX >= 0.0 ? this.skewY : this.skewY + Math.PI;
|
||
},
|
||
set: function (value) {
|
||
var dValue = this.scaleX >= 0.0 ? (value - this.skewY) : (value - this.skewY - Math.PI);
|
||
this.skewX += dValue;
|
||
this.skewY += dValue;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return Transform;
|
||
}());
|
||
dragonBones.Transform = Transform;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 2D 矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Matrix = (function () {
|
||
function Matrix(a, b, c, d, tx, ty) {
|
||
if (a === void 0) { a = 1.0; }
|
||
if (b === void 0) { b = 0.0; }
|
||
if (c === void 0) { c = 0.0; }
|
||
if (d === void 0) { d = 1.0; }
|
||
if (tx === void 0) { tx = 0.0; }
|
||
if (ty === void 0) { ty = 0.0; }
|
||
this.a = a;
|
||
this.b = b;
|
||
this.c = c;
|
||
this.d = d;
|
||
this.tx = tx;
|
||
this.ty = ty;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
Matrix.prototype.toString = function () {
|
||
return "[object dragonBones.Matrix] a:" + this.a + " b:" + this.b + " c:" + this.c + " d:" + this.d + " tx:" + this.tx + " ty:" + this.ty;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 复制矩阵。
|
||
* @param value 需要复制的矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Matrix.prototype.copyFrom = function (value) {
|
||
this.a = value.a;
|
||
this.b = value.b;
|
||
this.c = value.c;
|
||
this.d = value.d;
|
||
this.tx = value.tx;
|
||
this.ty = value.ty;
|
||
return this;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Matrix.prototype.copyFromArray = function (value, offset) {
|
||
if (offset === void 0) { offset = 0; }
|
||
this.a = value[offset];
|
||
this.b = value[offset + 1];
|
||
this.c = value[offset + 2];
|
||
this.d = value[offset + 3];
|
||
this.tx = value[offset + 4];
|
||
this.ty = value[offset + 5];
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 转换为恒等矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Matrix.prototype.identity = function () {
|
||
this.a = this.d = 1.0;
|
||
this.b = this.c = 0.0;
|
||
this.tx = this.ty = 0.0;
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将当前矩阵与另一个矩阵相乘。
|
||
* @param value 需要相乘的矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Matrix.prototype.concat = function (value) {
|
||
var aA = this.a * value.a;
|
||
var bA = 0.0;
|
||
var cA = 0.0;
|
||
var dA = this.d * value.d;
|
||
var txA = this.tx * value.a + value.tx;
|
||
var tyA = this.ty * value.d + value.ty;
|
||
if (this.b !== 0.0 || this.c !== 0.0) {
|
||
aA += this.b * value.c;
|
||
bA += this.b * value.d;
|
||
cA += this.c * value.a;
|
||
dA += this.c * value.b;
|
||
}
|
||
if (value.b !== 0.0 || value.c !== 0.0) {
|
||
bA += this.a * value.b;
|
||
cA += this.d * value.c;
|
||
txA += this.ty * value.c;
|
||
tyA += this.tx * value.b;
|
||
}
|
||
this.a = aA;
|
||
this.b = bA;
|
||
this.c = cA;
|
||
this.d = dA;
|
||
this.tx = txA;
|
||
this.ty = tyA;
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 转换为逆矩阵。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Matrix.prototype.invert = function () {
|
||
var aA = this.a;
|
||
var bA = this.b;
|
||
var cA = this.c;
|
||
var dA = this.d;
|
||
var txA = this.tx;
|
||
var tyA = this.ty;
|
||
if (bA === 0.0 && cA === 0.0) {
|
||
this.b = this.c = 0.0;
|
||
if (aA === 0.0 || dA === 0.0) {
|
||
this.a = this.b = this.tx = this.ty = 0.0;
|
||
}
|
||
else {
|
||
aA = this.a = 1.0 / aA;
|
||
dA = this.d = 1.0 / dA;
|
||
this.tx = -aA * txA;
|
||
this.ty = -dA * tyA;
|
||
}
|
||
return this;
|
||
}
|
||
var determinant = aA * dA - bA * cA;
|
||
if (determinant === 0.0) {
|
||
this.a = this.d = 1.0;
|
||
this.b = this.c = 0.0;
|
||
this.tx = this.ty = 0.0;
|
||
return this;
|
||
}
|
||
determinant = 1.0 / determinant;
|
||
var k = this.a = dA * determinant;
|
||
bA = this.b = -bA * determinant;
|
||
cA = this.c = -cA * determinant;
|
||
dA = this.d = aA * determinant;
|
||
this.tx = -(k * txA + cA * tyA);
|
||
this.ty = -(bA * txA + dA * tyA);
|
||
return this;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将矩阵转换应用于指定点。
|
||
* @param x 横坐标。
|
||
* @param y 纵坐标。
|
||
* @param result 应用转换之后的坐标。
|
||
* @params delta 是否忽略 tx,ty 对坐标的转换。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Matrix.prototype.transformPoint = function (x, y, result, delta) {
|
||
if (delta === void 0) { delta = false; }
|
||
result.x = this.a * x + this.c * y;
|
||
result.y = this.b * x + this.d * y;
|
||
if (!delta) {
|
||
result.x += this.tx;
|
||
result.y += this.ty;
|
||
}
|
||
};
|
||
return Matrix;
|
||
}());
|
||
dragonBones.Matrix = Matrix;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @private
|
||
*/
|
||
var ColorTransform = (function () {
|
||
function ColorTransform(alphaMultiplier, redMultiplier, greenMultiplier, blueMultiplier, alphaOffset, redOffset, greenOffset, blueOffset) {
|
||
if (alphaMultiplier === void 0) { alphaMultiplier = 1.0; }
|
||
if (redMultiplier === void 0) { redMultiplier = 1.0; }
|
||
if (greenMultiplier === void 0) { greenMultiplier = 1.0; }
|
||
if (blueMultiplier === void 0) { blueMultiplier = 1.0; }
|
||
if (alphaOffset === void 0) { alphaOffset = 0; }
|
||
if (redOffset === void 0) { redOffset = 0; }
|
||
if (greenOffset === void 0) { greenOffset = 0; }
|
||
if (blueOffset === void 0) { blueOffset = 0; }
|
||
this.alphaMultiplier = alphaMultiplier;
|
||
this.redMultiplier = redMultiplier;
|
||
this.greenMultiplier = greenMultiplier;
|
||
this.blueMultiplier = blueMultiplier;
|
||
this.alphaOffset = alphaOffset;
|
||
this.redOffset = redOffset;
|
||
this.greenOffset = greenOffset;
|
||
this.blueOffset = blueOffset;
|
||
}
|
||
ColorTransform.prototype.copyFrom = function (value) {
|
||
this.alphaMultiplier = value.alphaMultiplier;
|
||
this.redMultiplier = value.redMultiplier;
|
||
this.greenMultiplier = value.greenMultiplier;
|
||
this.blueMultiplier = value.blueMultiplier;
|
||
this.alphaOffset = value.alphaOffset;
|
||
this.redOffset = value.redOffset;
|
||
this.redOffset = value.redOffset;
|
||
this.greenOffset = value.blueOffset;
|
||
};
|
||
ColorTransform.prototype.identity = function () {
|
||
this.alphaMultiplier = this.redMultiplier = this.greenMultiplier = this.blueMultiplier = 1.0;
|
||
this.alphaOffset = this.redOffset = this.greenOffset = this.blueOffset = 0;
|
||
};
|
||
return ColorTransform;
|
||
}());
|
||
dragonBones.ColorTransform = ColorTransform;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* @beta
|
||
* 动画配置,描述播放一个动画所需要的全部信息。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 5.0
|
||
*/
|
||
var AnimationConfig = (function (_super) {
|
||
__extends(AnimationConfig, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function AnimationConfig() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @language zh_CN
|
||
* 骨骼遮罩。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.boneMask = [];
|
||
/**
|
||
* @language zh_CN
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.animationNames = [];
|
||
return _this;
|
||
}
|
||
AnimationConfig.toString = function () {
|
||
return "[class dragonBones.AnimationConfig]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationConfig.prototype._onClear = function () {
|
||
this.pauseFadeOut = true;
|
||
this.fadeOutMode = 4 /* All */;
|
||
this.fadeOutTime = -1.0;
|
||
this.fadeOutEasing = 0.0;
|
||
this.additiveBlending = false;
|
||
this.displayControl = true;
|
||
this.pauseFadeIn = true;
|
||
this.actionEnabled = true;
|
||
this.playTimes = -1;
|
||
this.layer = 0;
|
||
this.position = 0.0;
|
||
this.duration = -1.0;
|
||
this.timeScale = -100.0;
|
||
this.fadeInTime = -1.0;
|
||
this.autoFadeOutTime = -1.0;
|
||
this.fadeInEasing = 0.0;
|
||
this.weight = 1.0;
|
||
this.name = null;
|
||
this.animation = null;
|
||
this.group = null;
|
||
this.boneMask.length = 0;
|
||
this.animationNames.length = 0;
|
||
};
|
||
AnimationConfig.prototype.clear = function () {
|
||
this._onClear();
|
||
};
|
||
AnimationConfig.prototype.copyFrom = function (value) {
|
||
this.pauseFadeOut = value.pauseFadeOut;
|
||
this.fadeOutMode = value.fadeOutMode;
|
||
this.autoFadeOutTime = value.autoFadeOutTime;
|
||
this.fadeOutEasing = value.fadeOutEasing;
|
||
this.additiveBlending = value.additiveBlending;
|
||
this.displayControl = value.displayControl;
|
||
this.pauseFadeIn = value.pauseFadeIn;
|
||
this.actionEnabled = value.actionEnabled;
|
||
this.playTimes = value.playTimes;
|
||
this.layer = value.layer;
|
||
this.position = value.position;
|
||
this.duration = value.duration;
|
||
this.timeScale = value.timeScale;
|
||
this.fadeInTime = value.fadeInTime;
|
||
this.fadeOutTime = value.fadeOutTime;
|
||
this.fadeInEasing = value.fadeInEasing;
|
||
this.weight = value.weight;
|
||
this.name = value.name;
|
||
this.animation = value.animation;
|
||
this.group = value.group;
|
||
this.boneMask.length = value.boneMask.length;
|
||
for (var i = 0, l = this.boneMask.length; i < l; ++i) {
|
||
this.boneMask[i] = value.boneMask[i];
|
||
}
|
||
this.animationNames.length = value.animationNames.length;
|
||
for (var i = 0, l = this.animationNames.length; i < l; ++i) {
|
||
this.animationNames[i] = value.animationNames[i];
|
||
}
|
||
};
|
||
AnimationConfig.prototype.containsBoneMask = function (name) {
|
||
return this.boneMask.length === 0 || this.boneMask.indexOf(name) >= 0;
|
||
};
|
||
AnimationConfig.prototype.addBoneMask = function (armature, name, recursive) {
|
||
if (recursive === void 0) { recursive = true; }
|
||
var currentBone = armature.getBone(name);
|
||
if (!currentBone) {
|
||
return;
|
||
}
|
||
if (this.boneMask.indexOf(name) < 0) {
|
||
this.boneMask.push(name);
|
||
}
|
||
if (recursive) {
|
||
var bones = armature.getBones();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (this.boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone)) {
|
||
this.boneMask.push(bone.name);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
AnimationConfig.prototype.removeBoneMask = function (armature, name, recursive) {
|
||
if (recursive === void 0) { recursive = true; }
|
||
var index = this.boneMask.indexOf(name);
|
||
if (index >= 0) {
|
||
this.boneMask.splice(index, 1);
|
||
}
|
||
if (recursive) {
|
||
var currentBone = armature.getBone(name);
|
||
if (currentBone) {
|
||
var bones = armature.getBones();
|
||
if (this.boneMask.length > 0) {
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
var index_1 = this.boneMask.indexOf(bone.name);
|
||
if (index_1 >= 0 && currentBone.contains(bone)) {
|
||
this.boneMask.splice(index_1, 1);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (!currentBone.contains(bone)) {
|
||
this.boneMask.push(bone.name);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
return AnimationConfig;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.AnimationConfig = AnimationConfig;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @private
|
||
*/
|
||
var FrameData = (function (_super) {
|
||
__extends(FrameData, _super);
|
||
function FrameData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
FrameData.prototype._onClear = function () {
|
||
this.position = 0.0;
|
||
this.duration = 0.0;
|
||
this.prev = null;
|
||
this.next = null;
|
||
};
|
||
return FrameData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.FrameData = FrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var TweenFrameData = (function (_super) {
|
||
__extends(TweenFrameData, _super);
|
||
function TweenFrameData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
TweenFrameData._getCurvePoint = function (x1, y1, x2, y2, x3, y3, x4, y4, t, result) {
|
||
var l_t = 1 - t;
|
||
var powA = l_t * l_t;
|
||
var powB = t * t;
|
||
var kA = l_t * powA;
|
||
var kB = 3.0 * t * powA;
|
||
var kC = 3.0 * l_t * powB;
|
||
var kD = t * powB;
|
||
result.x = kA * x1 + kB * x2 + kC * x3 + kD * x4;
|
||
result.y = kA * y1 + kB * y2 + kC * y3 + kD * y4;
|
||
};
|
||
TweenFrameData.samplingEasingCurve = function (curve, samples) {
|
||
var curveCount = curve.length;
|
||
var result = new dragonBones.Point();
|
||
var stepIndex = -2;
|
||
for (var i = 0, l = samples.length; i < l; ++i) {
|
||
var t = (i + 1) / (l + 1);
|
||
while ((stepIndex + 6 < curveCount ? curve[stepIndex + 6] : 1) < t) {
|
||
stepIndex += 6;
|
||
}
|
||
var isInCurve = stepIndex >= 0 && stepIndex + 6 < curveCount;
|
||
var x1 = isInCurve ? curve[stepIndex] : 0.0;
|
||
var y1 = isInCurve ? curve[stepIndex + 1] : 0.0;
|
||
var x2 = curve[stepIndex + 2];
|
||
var y2 = curve[stepIndex + 3];
|
||
var x3 = curve[stepIndex + 4];
|
||
var y3 = curve[stepIndex + 5];
|
||
var x4 = isInCurve ? curve[stepIndex + 6] : 1.0;
|
||
var y4 = isInCurve ? curve[stepIndex + 7] : 1.0;
|
||
var lower = 0.0;
|
||
var higher = 1.0;
|
||
while (higher - lower > 0.01) {
|
||
var percentage = (higher + lower) / 2.0;
|
||
TweenFrameData._getCurvePoint(x1, y1, x2, y2, x3, y3, x4, y4, percentage, result);
|
||
if (t - result.x > 0.0) {
|
||
lower = percentage;
|
||
}
|
||
else {
|
||
higher = percentage;
|
||
}
|
||
}
|
||
samples[i] = result.y;
|
||
}
|
||
};
|
||
TweenFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.tweenEasing = 0.0;
|
||
this.curve = null;
|
||
};
|
||
return TweenFrameData;
|
||
}(FrameData));
|
||
dragonBones.TweenFrameData = TweenFrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var AnimationFrameData = (function (_super) {
|
||
__extends(AnimationFrameData, _super);
|
||
function AnimationFrameData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.actions = [];
|
||
_this.events = [];
|
||
return _this;
|
||
}
|
||
AnimationFrameData.toString = function () {
|
||
return "[class dragonBones.AnimationFrameData]";
|
||
};
|
||
AnimationFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
for (var i = 0, l = this.actions.length; i < l; ++i) {
|
||
this.actions[i].returnToPool();
|
||
}
|
||
for (var i = 0, l = this.events.length; i < l; ++i) {
|
||
this.events[i].returnToPool();
|
||
}
|
||
this.actions.length = 0;
|
||
this.events.length = 0;
|
||
};
|
||
return AnimationFrameData;
|
||
}(FrameData));
|
||
dragonBones.AnimationFrameData = AnimationFrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var ZOrderFrameData = (function (_super) {
|
||
__extends(ZOrderFrameData, _super);
|
||
function ZOrderFrameData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.zOrder = [];
|
||
return _this;
|
||
}
|
||
ZOrderFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.zOrder.length = 0;
|
||
};
|
||
return ZOrderFrameData;
|
||
}(FrameData));
|
||
dragonBones.ZOrderFrameData = ZOrderFrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var BoneFrameData = (function (_super) {
|
||
__extends(BoneFrameData, _super);
|
||
function BoneFrameData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.transform = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
BoneFrameData.toString = function () {
|
||
return "[class dragonBones.BoneFrameData]";
|
||
};
|
||
BoneFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.tweenScale = false;
|
||
this.tweenRotate = 0.0;
|
||
this.transform.identity();
|
||
};
|
||
return BoneFrameData;
|
||
}(TweenFrameData));
|
||
dragonBones.BoneFrameData = BoneFrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var SlotFrameData = (function (_super) {
|
||
__extends(SlotFrameData, _super);
|
||
function SlotFrameData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
SlotFrameData.generateColor = function () {
|
||
return new dragonBones.ColorTransform();
|
||
};
|
||
SlotFrameData.toString = function () {
|
||
return "[class dragonBones.SlotFrameData]";
|
||
};
|
||
SlotFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.displayIndex = 0;
|
||
this.color = null;
|
||
};
|
||
return SlotFrameData;
|
||
}(TweenFrameData));
|
||
SlotFrameData.DEFAULT_COLOR = new dragonBones.ColorTransform();
|
||
dragonBones.SlotFrameData = SlotFrameData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var ExtensionFrameData = (function (_super) {
|
||
__extends(ExtensionFrameData, _super);
|
||
function ExtensionFrameData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.tweens = [];
|
||
return _this;
|
||
}
|
||
ExtensionFrameData.toString = function () {
|
||
return "[class dragonBones.ExtensionFrameData]";
|
||
};
|
||
ExtensionFrameData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.tweens.length = 0;
|
||
};
|
||
return ExtensionFrameData;
|
||
}(TweenFrameData));
|
||
dragonBones.ExtensionFrameData = ExtensionFrameData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @private
|
||
*/
|
||
var TimelineData = (function (_super) {
|
||
__extends(TimelineData, _super);
|
||
/**
|
||
* @private
|
||
*/
|
||
function TimelineData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.frames = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
TimelineData.toString = function () {
|
||
return "[class dragonBones.TimelineData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
TimelineData.prototype._onClear = function () {
|
||
var prevFrame = null;
|
||
for (var i = 0, l = this.frames.length; i < l; ++i) {
|
||
var frame = this.frames[i];
|
||
if (prevFrame && frame !== prevFrame) {
|
||
prevFrame.returnToPool();
|
||
}
|
||
prevFrame = frame;
|
||
}
|
||
this.scale = 1;
|
||
this.offset = 0;
|
||
this.frames.length = 0;
|
||
};
|
||
return TimelineData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.TimelineData = TimelineData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var ZOrderTimelineData = (function (_super) {
|
||
__extends(ZOrderTimelineData, _super);
|
||
function ZOrderTimelineData() {
|
||
return _super !== null && _super.apply(this, arguments) || this;
|
||
}
|
||
ZOrderTimelineData.toString = function () {
|
||
return "[class dragonBones.ZOrderTimelineData]";
|
||
};
|
||
return ZOrderTimelineData;
|
||
}(TimelineData));
|
||
dragonBones.ZOrderTimelineData = ZOrderTimelineData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var BoneTimelineData = (function (_super) {
|
||
__extends(BoneTimelineData, _super);
|
||
function BoneTimelineData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.originalTransform = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
BoneTimelineData.toString = function () {
|
||
return "[class dragonBones.BoneTimelineData]";
|
||
};
|
||
BoneTimelineData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.originalTransform.identity();
|
||
this.bone = null;
|
||
};
|
||
return BoneTimelineData;
|
||
}(TimelineData));
|
||
dragonBones.BoneTimelineData = BoneTimelineData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var SlotTimelineData = (function (_super) {
|
||
__extends(SlotTimelineData, _super);
|
||
function SlotTimelineData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
SlotTimelineData.toString = function () {
|
||
return "[class dragonBones.SlotTimelineData]";
|
||
};
|
||
SlotTimelineData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.slot = null;
|
||
};
|
||
return SlotTimelineData;
|
||
}(TimelineData));
|
||
dragonBones.SlotTimelineData = SlotTimelineData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var FFDTimelineData = (function (_super) {
|
||
__extends(FFDTimelineData, _super);
|
||
function FFDTimelineData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
FFDTimelineData.toString = function () {
|
||
return "[class dragonBones.FFDTimelineData]";
|
||
};
|
||
FFDTimelineData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.skin = null;
|
||
this.slot = null;
|
||
this.display = null;
|
||
};
|
||
return FFDTimelineData;
|
||
}(TimelineData));
|
||
dragonBones.FFDTimelineData = FFDTimelineData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画数据。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var AnimationData = (function (_super) {
|
||
__extends(AnimationData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function AnimationData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.boneTimelines = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.slotTimelines = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.ffdTimelines = {}; // skin slot mesh
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.cachedFrames = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.boneCachedFrameIndices = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.slotCachedFrameIndices = {};
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.toString = function () {
|
||
return "[class dragonBones.AnimationData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
for (var k in this.boneTimelines) {
|
||
this.boneTimelines[k].returnToPool();
|
||
delete this.boneTimelines[k];
|
||
}
|
||
for (var k in this.slotTimelines) {
|
||
this.slotTimelines[k].returnToPool();
|
||
delete this.slotTimelines[k];
|
||
}
|
||
for (var k in this.ffdTimelines) {
|
||
for (var kA in this.ffdTimelines[k]) {
|
||
for (var kB in this.ffdTimelines[k][kA]) {
|
||
this.ffdTimelines[k][kA][kB].returnToPool();
|
||
}
|
||
}
|
||
delete this.ffdTimelines[k];
|
||
}
|
||
for (var k in this.boneCachedFrameIndices) {
|
||
// this.boneCachedFrameIndices[i].length = 0;
|
||
delete this.boneCachedFrameIndices[k];
|
||
}
|
||
for (var k in this.slotCachedFrameIndices) {
|
||
// this.slotCachedFrameIndices[i].length = 0;
|
||
delete this.slotCachedFrameIndices[k];
|
||
}
|
||
if (this.zOrderTimeline) {
|
||
this.zOrderTimeline.returnToPool();
|
||
}
|
||
this.frameCount = 0;
|
||
this.playTimes = 0;
|
||
this.duration = 0.0;
|
||
this.fadeInTime = 0.0;
|
||
this.cacheFrameRate = 0.0;
|
||
this.name = null;
|
||
//this.boneTimelines.clear();
|
||
//this.slotTimelines.clear();
|
||
//this.ffdTimelines.clear();
|
||
this.cachedFrames.length = 0;
|
||
//this.boneCachedFrameIndices.clear();
|
||
//this.boneCachedFrameIndices.clear();
|
||
this.zOrderTimeline = null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.cacheFrames = function (frameRate) {
|
||
if (this.cacheFrameRate > 0.0) {
|
||
return;
|
||
}
|
||
this.cacheFrameRate = Math.max(Math.ceil(frameRate * this.scale), 1.0);
|
||
var cacheFrameCount = Math.ceil(this.cacheFrameRate * this.duration) + 1; // uint
|
||
this.cachedFrames.length = 0;
|
||
this.cachedFrames.length = cacheFrameCount;
|
||
for (var k in this.boneTimelines) {
|
||
var indices = new Array(cacheFrameCount);
|
||
for (var i = 0, l = indices.length; i < l; ++i) {
|
||
indices[i] = -1;
|
||
}
|
||
this.boneCachedFrameIndices[k] = indices;
|
||
}
|
||
for (var k in this.slotTimelines) {
|
||
var indices = new Array(cacheFrameCount);
|
||
for (var i = 0, l = indices.length; i < l; ++i) {
|
||
indices[i] = -1;
|
||
}
|
||
this.slotCachedFrameIndices[k] = indices;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.addBoneTimeline = function (value) {
|
||
if (value && value.bone && !this.boneTimelines[value.bone.name]) {
|
||
this.boneTimelines[value.bone.name] = value;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.addSlotTimeline = function (value) {
|
||
if (value && value.slot && !this.slotTimelines[value.slot.name]) {
|
||
this.slotTimelines[value.slot.name] = value;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.addFFDTimeline = function (value) {
|
||
if (value && value.skin && value.slot && value.display) {
|
||
var skin = this.ffdTimelines[value.skin.name] = this.ffdTimelines[value.skin.name] || {};
|
||
var slot = skin[value.slot.slot.name] = skin[value.slot.slot.name] || {};
|
||
if (!slot[value.display.name]) {
|
||
slot[value.display.name] = value;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.getBoneTimeline = function (name) {
|
||
return this.boneTimelines[name];
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.getSlotTimeline = function (name) {
|
||
return this.slotTimelines[name];
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.getFFDTimeline = function (skinName, slotName) {
|
||
var skin = this.ffdTimelines[skinName];
|
||
if (skin) {
|
||
return skin[slotName];
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.getBoneCachedFrameIndices = function (name) {
|
||
return this.boneCachedFrameIndices[name];
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationData.prototype.getSlotCachedFrameIndices = function (name) {
|
||
return this.slotCachedFrameIndices[name];
|
||
};
|
||
return AnimationData;
|
||
}(dragonBones.TimelineData));
|
||
dragonBones.AnimationData = AnimationData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 骨架数据。
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var ArmatureData = (function (_super) {
|
||
__extends(ArmatureData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function ArmatureData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.aabb = new dragonBones.Rectangle();
|
||
/**
|
||
* @language zh_CN
|
||
* 所有骨骼数据。
|
||
* @see dragonBones.BoneData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.bones = {};
|
||
/**
|
||
* @language zh_CN
|
||
* 所有插槽数据。
|
||
* @see dragonBones.SlotData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.slots = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.skins = {};
|
||
/**
|
||
* @language zh_CN
|
||
* 所有动画数据。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.animations = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.actions = [];
|
||
_this._animationNames = [];
|
||
_this._sortedBones = [];
|
||
_this._sortedSlots = [];
|
||
_this._bonesChildren = {};
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.toString = function () {
|
||
return "[class dragonBones.ArmatureData]";
|
||
};
|
||
ArmatureData._onSortSlots = function (a, b) {
|
||
return a.zOrder > b.zOrder ? 1 : -1;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype._onClear = function () {
|
||
for (var k in this.bones) {
|
||
this.bones[k].returnToPool();
|
||
delete this.bones[k];
|
||
}
|
||
for (var k in this.slots) {
|
||
this.slots[k].returnToPool();
|
||
delete this.slots[k];
|
||
}
|
||
for (var k in this.skins) {
|
||
this.skins[k].returnToPool();
|
||
delete this.skins[k];
|
||
}
|
||
for (var k in this.animations) {
|
||
this.animations[k].returnToPool();
|
||
delete this.animations[k];
|
||
}
|
||
for (var i = 0, l = this.actions.length; i < l; ++i) {
|
||
this.actions[i].returnToPool();
|
||
}
|
||
for (var k in this._bonesChildren) {
|
||
delete this._bonesChildren[k];
|
||
}
|
||
if (this.userData) {
|
||
this.userData.returnToPool();
|
||
}
|
||
this.isRightTransform = false;
|
||
this.frameRate = 0;
|
||
this.type = -1 /* None */;
|
||
this.cacheFrameRate = 0;
|
||
this.scale = 1.0;
|
||
this.name = null;
|
||
this.aabb.clear();
|
||
//this.bones.clear();
|
||
//this.slots.clear();
|
||
//this.skins.clear();
|
||
//this.animations.clear();
|
||
this.actions.length = 0;
|
||
this.parent = null;
|
||
this.userData = null;
|
||
this._boneDirty = false;
|
||
this._slotDirty = false;
|
||
this._animationNames.length = 0;
|
||
this._sortedBones.length = 0;
|
||
this._sortedSlots.length = 0;
|
||
this._defaultSkin = null;
|
||
this._defaultAnimation = null;
|
||
};
|
||
ArmatureData.prototype._sortBones = function () {
|
||
var total = this._sortedBones.length;
|
||
if (total < 1) {
|
||
return;
|
||
}
|
||
var sortHelper = this._sortedBones.concat();
|
||
var index = 0;
|
||
var count = 0;
|
||
this._sortedBones.length = 0;
|
||
while (count < total) {
|
||
var bone = sortHelper[index++];
|
||
if (index >= total) {
|
||
index = 0;
|
||
}
|
||
if (this._sortedBones.indexOf(bone) >= 0) {
|
||
continue;
|
||
}
|
||
if (bone.parent && this._sortedBones.indexOf(bone.parent) < 0) {
|
||
continue;
|
||
}
|
||
if (bone.ik && this._sortedBones.indexOf(bone.ik) < 0) {
|
||
continue;
|
||
}
|
||
if (bone.ik && bone.chain > 0 && bone.chainIndex === bone.chain) {
|
||
this._sortedBones.splice(this._sortedBones.indexOf(bone.parent) + 1, 0, bone);
|
||
}
|
||
else {
|
||
this._sortedBones.push(bone);
|
||
}
|
||
count++;
|
||
}
|
||
};
|
||
ArmatureData.prototype._sortSlots = function () {
|
||
this._sortedSlots.sort(ArmatureData._onSortSlots);
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.cacheFrames = function (frameRate) {
|
||
if (this.cacheFrameRate > 0) {
|
||
return;
|
||
}
|
||
this.cacheFrameRate = frameRate;
|
||
for (var k in this.animations) {
|
||
this.animations[k].cacheFrames(this.cacheFrameRate);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.setCacheFrame = function (globalTransformMatrix, transform, arrayOffset) {
|
||
if (arrayOffset === void 0) { arrayOffset = -1; }
|
||
var dataArray = this.parent.cachedFrames;
|
||
if (arrayOffset < 0) {
|
||
arrayOffset = dataArray.length;
|
||
}
|
||
dataArray.length += 10;
|
||
dataArray[arrayOffset] = globalTransformMatrix.a;
|
||
dataArray[arrayOffset + 1] = globalTransformMatrix.b;
|
||
dataArray[arrayOffset + 2] = globalTransformMatrix.c;
|
||
dataArray[arrayOffset + 3] = globalTransformMatrix.d;
|
||
dataArray[arrayOffset + 4] = globalTransformMatrix.tx;
|
||
dataArray[arrayOffset + 5] = globalTransformMatrix.ty;
|
||
dataArray[arrayOffset + 6] = transform.skewX;
|
||
dataArray[arrayOffset + 7] = transform.skewY;
|
||
dataArray[arrayOffset + 8] = transform.scaleX;
|
||
dataArray[arrayOffset + 9] = transform.scaleY;
|
||
return arrayOffset;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.getCacheFrame = function (globalTransformMatrix, transform, arrayOffset) {
|
||
var dataArray = this.parent.cachedFrames;
|
||
globalTransformMatrix.a = dataArray[arrayOffset];
|
||
globalTransformMatrix.b = dataArray[arrayOffset + 1];
|
||
globalTransformMatrix.c = dataArray[arrayOffset + 2];
|
||
globalTransformMatrix.d = dataArray[arrayOffset + 3];
|
||
globalTransformMatrix.tx = dataArray[arrayOffset + 4];
|
||
globalTransformMatrix.ty = dataArray[arrayOffset + 5];
|
||
transform.skewX = dataArray[arrayOffset + 6];
|
||
transform.skewY = dataArray[arrayOffset + 7];
|
||
transform.scaleX = dataArray[arrayOffset + 8];
|
||
transform.scaleY = dataArray[arrayOffset + 9];
|
||
transform.x = globalTransformMatrix.tx;
|
||
transform.y = globalTransformMatrix.ty;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.addBone = function (value, parentName) {
|
||
if (value && value.name && !this.bones[value.name]) {
|
||
if (parentName) {
|
||
var parent_1 = this.getBone(parentName);
|
||
if (parent_1) {
|
||
value.parent = parent_1;
|
||
}
|
||
else {
|
||
(this._bonesChildren[parentName] = this._bonesChildren[parentName] || []).push(value);
|
||
}
|
||
}
|
||
var children = this._bonesChildren[value.name];
|
||
if (children) {
|
||
for (var i = 0, l = children.length; i < l; ++i) {
|
||
children[i].parent = value;
|
||
}
|
||
delete this._bonesChildren[value.name];
|
||
}
|
||
this.bones[value.name] = value;
|
||
this._sortedBones.push(value);
|
||
this._boneDirty = true;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.addSlot = function (value) {
|
||
if (value && value.name && !this.slots[value.name]) {
|
||
this.slots[value.name] = value;
|
||
this._sortedSlots.push(value);
|
||
this._slotDirty = true;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.addSkin = function (value) {
|
||
if (value && value.name && !this.skins[value.name]) {
|
||
this.skins[value.name] = value;
|
||
if (!this._defaultSkin) {
|
||
this._defaultSkin = value;
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.addAnimation = function (value) {
|
||
if (value && value.name && !this.animations[value.name]) {
|
||
this.animations[value.name] = value;
|
||
this._animationNames.push(value.name);
|
||
if (!this._defaultAnimation) {
|
||
this._defaultAnimation = value;
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取骨骼数据。
|
||
* @param name 骨骼数据名称。
|
||
* @see dragonBones.BoneData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
ArmatureData.prototype.getBone = function (name) {
|
||
return this.bones[name];
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取插槽数据。
|
||
* @param name 插槽数据名称。
|
||
* @see dragonBones.SlotData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
ArmatureData.prototype.getSlot = function (name) {
|
||
return this.slots[name];
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ArmatureData.prototype.getSkin = function (name) {
|
||
return name ? this.skins[name] : this._defaultSkin;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取动画数据。
|
||
* @param name 动画数据名称。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
ArmatureData.prototype.getAnimation = function (name) {
|
||
return name ? this.animations[name] : this._defaultAnimation;
|
||
};
|
||
Object.defineProperty(ArmatureData.prototype, "animationNames", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所有动画数据名称。
|
||
* @see #armatures
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._animationNames;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(ArmatureData.prototype, "sortedBones", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
if (this._boneDirty) {
|
||
this._boneDirty = false;
|
||
this._sortBones();
|
||
}
|
||
return this._sortedBones;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(ArmatureData.prototype, "sortedSlots", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
if (this._slotDirty) {
|
||
this._slotDirty = false;
|
||
this._sortSlots();
|
||
}
|
||
return this._sortedSlots;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(ArmatureData.prototype, "defaultSkin", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
return this._defaultSkin;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(ArmatureData.prototype, "defaultAnimation", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获取默认动画数据。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._defaultAnimation;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return ArmatureData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.ArmatureData = ArmatureData;
|
||
/**
|
||
* @language zh_CN
|
||
* 骨骼数据。
|
||
* @see dragonBones.Bone
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var BoneData = (function (_super) {
|
||
__extends(BoneData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function BoneData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.transform = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
BoneData.toString = function () {
|
||
return "[class dragonBones.BoneData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BoneData.prototype._onClear = function () {
|
||
if (this.userData) {
|
||
this.userData.returnToPool();
|
||
}
|
||
this.inheritTranslation = false;
|
||
this.inheritRotation = false;
|
||
this.inheritScale = false;
|
||
this.inheritReflection = false;
|
||
this.bendPositive = false;
|
||
this.chain = 0;
|
||
this.chainIndex = 0;
|
||
this.weight = 0.0;
|
||
this.length = 0.0;
|
||
this.name = null;
|
||
this.transform.identity();
|
||
this.parent = null;
|
||
this.ik = null;
|
||
this.userData = null;
|
||
};
|
||
return BoneData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.BoneData = BoneData;
|
||
/**
|
||
* @language zh_CN
|
||
* 插槽数据。
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var SlotData = (function (_super) {
|
||
__extends(SlotData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function SlotData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.actions = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
SlotData.generateColor = function () {
|
||
return new dragonBones.ColorTransform();
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
SlotData.toString = function () {
|
||
return "[class dragonBones.SlotData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
SlotData.prototype._onClear = function () {
|
||
for (var i = 0, l = this.actions.length; i < l; ++i) {
|
||
this.actions[i].returnToPool();
|
||
}
|
||
if (this.userData) {
|
||
this.userData.returnToPool();
|
||
}
|
||
this.displayIndex = -1;
|
||
this.zOrder = 0;
|
||
this.blendMode = -1 /* None */;
|
||
this.name = null;
|
||
this.actions.length = 0;
|
||
this.parent = null;
|
||
this.color = null;
|
||
this.userData = null;
|
||
};
|
||
return SlotData;
|
||
}(dragonBones.BaseObject));
|
||
/**
|
||
* @private
|
||
*/
|
||
SlotData.DEFAULT_COLOR = new dragonBones.ColorTransform();
|
||
dragonBones.SlotData = SlotData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var SkinData = (function (_super) {
|
||
__extends(SkinData, _super);
|
||
function SkinData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.slots = {};
|
||
return _this;
|
||
}
|
||
SkinData.toString = function () {
|
||
return "[class dragonBones.SkinData]";
|
||
};
|
||
SkinData.prototype._onClear = function () {
|
||
for (var k in this.slots) {
|
||
this.slots[k].returnToPool();
|
||
delete this.slots[k];
|
||
}
|
||
this.name = null;
|
||
//this.slots.clear();
|
||
};
|
||
SkinData.prototype.addSlot = function (value) {
|
||
if (value && value.slot && !this.slots[value.slot.name]) {
|
||
this.slots[value.slot.name] = value;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
SkinData.prototype.getSlot = function (name) {
|
||
return this.slots[name];
|
||
};
|
||
return SkinData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.SkinData = SkinData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var SkinSlotData = (function (_super) {
|
||
__extends(SkinSlotData, _super);
|
||
function SkinSlotData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.displays = [];
|
||
_this.meshs = {};
|
||
return _this;
|
||
}
|
||
SkinSlotData.toString = function () {
|
||
return "[class dragonBones.SkinSlotData]";
|
||
};
|
||
SkinSlotData.prototype._onClear = function () {
|
||
for (var i = 0, l = this.displays.length; i < l; ++i) {
|
||
this.displays[i].returnToPool();
|
||
}
|
||
for (var k in this.meshs) {
|
||
this.meshs[k].returnToPool();
|
||
delete this.meshs[k];
|
||
}
|
||
this.displays.length = 0;
|
||
//this.meshs.clear();
|
||
this.slot = null;
|
||
};
|
||
SkinSlotData.prototype.getDisplay = function (name) {
|
||
for (var i = 0, l = this.displays.length; i < l; ++i) {
|
||
var display = this.displays[i];
|
||
if (display.name === name) {
|
||
return display;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
SkinSlotData.prototype.addMesh = function (value) {
|
||
if (value && value.name && !this.meshs[value.name]) {
|
||
this.meshs[value.name] = value;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
SkinSlotData.prototype.getMesh = function (name) {
|
||
return this.meshs[name];
|
||
};
|
||
return SkinSlotData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.SkinSlotData = SkinSlotData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var DisplayData = (function (_super) {
|
||
__extends(DisplayData, _super);
|
||
function DisplayData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.pivot = new dragonBones.Point();
|
||
_this.transform = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
DisplayData.toString = function () {
|
||
return "[class dragonBones.DisplayData]";
|
||
};
|
||
DisplayData.prototype._onClear = function () {
|
||
if (this.boundingBox) {
|
||
this.boundingBox.returnToPool();
|
||
}
|
||
this.isRelativePivot = false;
|
||
this.type = -1 /* None */;
|
||
this.inheritAnimation = true;
|
||
this.name = null;
|
||
this.path = null;
|
||
this.share = null;
|
||
this.pivot.clear();
|
||
this.transform.identity();
|
||
this.texture = null;
|
||
this.armature = null;
|
||
this.mesh = null;
|
||
this.boundingBox = null;
|
||
};
|
||
return DisplayData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.DisplayData = DisplayData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var MeshData = (function (_super) {
|
||
__extends(MeshData, _super);
|
||
function MeshData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.slotPose = new dragonBones.Matrix();
|
||
_this.uvs = []; // vertices * 2
|
||
_this.vertices = []; // vertices * 2
|
||
_this.vertexIndices = []; // triangles * 3
|
||
_this.boneIndices = []; // vertices bones
|
||
_this.weights = []; // vertices bones
|
||
_this.boneVertices = []; // vertices bones * 2
|
||
_this.bones = []; // bones
|
||
_this.inverseBindPose = []; // bones
|
||
return _this;
|
||
}
|
||
MeshData.toString = function () {
|
||
return "[class dragonBones.MeshData]";
|
||
};
|
||
MeshData.prototype._onClear = function () {
|
||
this.skinned = false;
|
||
this.name = null;
|
||
this.slotPose.identity();
|
||
this.uvs.length = 0;
|
||
this.vertices.length = 0;
|
||
this.vertexIndices.length = 0;
|
||
this.boneIndices.length = 0;
|
||
this.weights.length = 0;
|
||
this.boneVertices.length = 0;
|
||
this.bones.length = 0;
|
||
this.inverseBindPose.length = 0;
|
||
};
|
||
return MeshData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.MeshData = MeshData;
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义包围盒数据。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
var BoundingBoxData = (function (_super) {
|
||
__extends(BoundingBoxData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function BoundingBoxData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义多边形顶点。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.vertices = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
BoundingBoxData.toString = function () {
|
||
return "[class dragonBones.BoundingBoxData]";
|
||
};
|
||
/**
|
||
* Compute the bit code for a point (x, y) using the clip rectangle
|
||
*/
|
||
BoundingBoxData._computeOutCode = function (x, y, xMin, yMin, xMax, yMax) {
|
||
var code = 0 /* InSide */; // initialised as being inside of [[clip window]]
|
||
if (x < xMin) {
|
||
code |= 1 /* Left */;
|
||
}
|
||
else if (x > xMax) {
|
||
code |= 2 /* Right */;
|
||
}
|
||
if (y < yMin) {
|
||
code |= 4 /* Top */;
|
||
}
|
||
else if (y > yMax) {
|
||
code |= 8 /* Bottom */;
|
||
}
|
||
return code;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BoundingBoxData.segmentIntersectsRectangle = function (xA, yA, xB, yB, xMin, yMin, xMax, yMax, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
var inSideA = xA > xMin && xA < xMax && yA > yMin && yA < yMax;
|
||
var inSideB = xB > xMin && xB < xMax && yB > yMin && yB < yMax;
|
||
if (inSideA && inSideB) {
|
||
return -1;
|
||
}
|
||
var intersectionCount = 0;
|
||
var outcode0 = BoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax);
|
||
var outcode1 = BoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax);
|
||
while (true) {
|
||
if (!(outcode0 | outcode1)) {
|
||
intersectionCount = 2;
|
||
break;
|
||
}
|
||
else if (outcode0 & outcode1) {
|
||
break;
|
||
}
|
||
// failed both tests, so calculate the line segment to clip
|
||
// from an outside point to an intersection with clip edge
|
||
var x = 0.0;
|
||
var y = 0.0;
|
||
var normalRadian = 0.0;
|
||
// At least one endpoint is outside the clip rectangle; pick it.
|
||
var outcodeOut = outcode0 ? outcode0 : outcode1;
|
||
// Now find the intersection point;
|
||
if (outcodeOut & 4 /* Top */) {
|
||
x = xA + (xB - xA) * (yMin - yA) / (yB - yA);
|
||
y = yMin;
|
||
if (normalRadians) {
|
||
normalRadian = -Math.PI * 0.5;
|
||
}
|
||
}
|
||
else if (outcodeOut & 8 /* Bottom */) {
|
||
x = xA + (xB - xA) * (yMax - yA) / (yB - yA);
|
||
y = yMax;
|
||
if (normalRadians) {
|
||
normalRadian = Math.PI * 0.5;
|
||
}
|
||
}
|
||
else if (outcodeOut & 2 /* Right */) {
|
||
y = yA + (yB - yA) * (xMax - xA) / (xB - xA);
|
||
x = xMax;
|
||
if (normalRadians) {
|
||
normalRadian = 0;
|
||
}
|
||
}
|
||
else if (outcodeOut & 1 /* Left */) {
|
||
y = yA + (yB - yA) * (xMin - xA) / (xB - xA);
|
||
x = xMin;
|
||
if (normalRadians) {
|
||
normalRadian = Math.PI;
|
||
}
|
||
}
|
||
// Now we move outside point to intersection point to clip
|
||
// and get ready for next pass.
|
||
if (outcodeOut === outcode0) {
|
||
xA = x;
|
||
yA = y;
|
||
outcode0 = BoundingBoxData._computeOutCode(xA, yA, xMin, yMin, xMax, yMax);
|
||
if (normalRadians) {
|
||
normalRadians.x = normalRadian;
|
||
}
|
||
}
|
||
else {
|
||
xB = x;
|
||
yB = y;
|
||
outcode1 = BoundingBoxData._computeOutCode(xB, yB, xMin, yMin, xMax, yMax);
|
||
if (normalRadians) {
|
||
normalRadians.y = normalRadian;
|
||
}
|
||
}
|
||
}
|
||
if (intersectionCount) {
|
||
if (inSideA) {
|
||
intersectionCount = 2; // 10
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xB;
|
||
intersectionPointA.y = yB;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xB;
|
||
intersectionPointB.y = xB;
|
||
}
|
||
if (normalRadians) {
|
||
normalRadians.x = normalRadians.y + Math.PI;
|
||
}
|
||
}
|
||
else if (inSideB) {
|
||
intersectionCount = 1; // 01
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xA;
|
||
intersectionPointA.y = yA;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xA;
|
||
intersectionPointB.y = yA;
|
||
}
|
||
if (normalRadians) {
|
||
normalRadians.y = normalRadians.x + Math.PI;
|
||
}
|
||
}
|
||
else {
|
||
intersectionCount = 3; // 11
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xA;
|
||
intersectionPointA.y = yA;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xB;
|
||
intersectionPointB.y = yB;
|
||
}
|
||
}
|
||
}
|
||
return intersectionCount;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BoundingBoxData.segmentIntersectsEllipse = function (xA, yA, xB, yB, xC, yC, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
var d = widthH / heightH;
|
||
var dd = d * d;
|
||
yA *= d;
|
||
yB *= d;
|
||
var dX = xB - xA;
|
||
var dY = yB - yA;
|
||
var lAB = Math.sqrt(dX * dX + dY * dY);
|
||
var xD = dX / lAB;
|
||
var yD = dY / lAB;
|
||
var a = (xC - xA) * xD + (yC - yA) * yD;
|
||
var aa = a * a;
|
||
var ee = xA * xA + yA * yA;
|
||
var rr = widthH * widthH;
|
||
var dR = rr - ee + aa;
|
||
var intersectionCount = 0;
|
||
if (dR >= 0) {
|
||
var dT = Math.sqrt(dR);
|
||
var sA = a - dT;
|
||
var sB = a + dT;
|
||
var inSideA = sA < 0.0 ? -1 : (sA <= lAB ? 0 : 1);
|
||
var inSideB = sB < 0.0 ? -1 : (sB <= lAB ? 0 : 1);
|
||
var sideAB = inSideA * inSideB;
|
||
if (sideAB < 0) {
|
||
return -1;
|
||
}
|
||
else if (sideAB === 0) {
|
||
if (inSideA === -1) {
|
||
intersectionCount = 2; // 10
|
||
xB = xA + sB * xD;
|
||
yB = (yA + sB * yD) / d;
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xB;
|
||
intersectionPointA.y = yB;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xB;
|
||
intersectionPointB.y = yB;
|
||
}
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(yB / rr * dd, xB / rr);
|
||
normalRadians.y = normalRadians.x + Math.PI;
|
||
}
|
||
}
|
||
else if (inSideB === 1) {
|
||
intersectionCount = 1; // 01
|
||
xA = xA + sA * xD;
|
||
yA = (yA + sA * yD) / d;
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xA;
|
||
intersectionPointA.y = yA;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xA;
|
||
intersectionPointB.y = yA;
|
||
}
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(yA / rr * dd, xA / rr);
|
||
normalRadians.y = normalRadians.x + Math.PI;
|
||
}
|
||
}
|
||
else {
|
||
intersectionCount = 3; // 11
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xA + sA * xD;
|
||
intersectionPointA.y = (yA + sA * yD) / d;
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(intersectionPointA.y / rr * dd, intersectionPointA.x / rr);
|
||
}
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xA + sB * xD;
|
||
intersectionPointB.y = (yA + sB * yD) / d;
|
||
if (normalRadians) {
|
||
normalRadians.y = Math.atan2(intersectionPointB.y / rr * dd, intersectionPointB.x / rr);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return intersectionCount;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BoundingBoxData.segmentIntersectsPolygon = function (xA, yA, xB, yB, vertices, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
if (xA === xB) {
|
||
xA = xB + 0.01;
|
||
}
|
||
if (yA === yB) {
|
||
yA = yB + 0.01;
|
||
}
|
||
var l = vertices.length;
|
||
var dXAB = xA - xB;
|
||
var dYAB = yA - yB;
|
||
var llAB = xA * yB - yA * xB;
|
||
var intersectionCount = 0;
|
||
var xC = vertices[l - 2];
|
||
var yC = vertices[l - 1];
|
||
var dMin = 0.0;
|
||
var dMax = 0.0;
|
||
var xMin = 0.0;
|
||
var yMin = 0.0;
|
||
var xMax = 0.0;
|
||
var yMax = 0.0;
|
||
for (var i = 0; i < l; i += 2) {
|
||
var xD = vertices[i];
|
||
var yD = vertices[i + 1];
|
||
if (xC === xD) {
|
||
xC = xD + 0.01;
|
||
}
|
||
if (yC === yD) {
|
||
yC = yD + 0.01;
|
||
}
|
||
var dXCD = xC - xD;
|
||
var dYCD = yC - yD;
|
||
var llCD = xC * yD - yC * xD;
|
||
var ll = dXAB * dYCD - dYAB * dXCD;
|
||
var x = (llAB * dXCD - dXAB * llCD) / ll;
|
||
if (((x >= xC && x <= xD) || (x >= xD && x <= xC)) && (dXAB === 0 || (x >= xA && x <= xB) || (x >= xB && x <= xA))) {
|
||
var y = (llAB * dYCD - dYAB * llCD) / ll;
|
||
if (((y >= yC && y <= yD) || (y >= yD && y <= yC)) && (dYAB === 0 || (y >= yA && y <= yB) || (y >= yB && y <= yA))) {
|
||
if (intersectionPointB) {
|
||
var d = x - xA;
|
||
if (d < 0.0) {
|
||
d = -d;
|
||
}
|
||
if (intersectionCount === 0) {
|
||
dMin = d;
|
||
dMax = d;
|
||
xMin = x;
|
||
yMin = y;
|
||
xMax = x;
|
||
yMax = y;
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(yD - yC, xD - xC) - Math.PI * 0.5;
|
||
normalRadians.y = normalRadians.x;
|
||
}
|
||
}
|
||
else {
|
||
if (d < dMin) {
|
||
dMin = d;
|
||
xMin = x;
|
||
yMin = y;
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(yD - yC, xD - xC) - Math.PI * 0.5;
|
||
}
|
||
}
|
||
if (d > dMax) {
|
||
dMax = d;
|
||
xMax = x;
|
||
yMax = y;
|
||
if (normalRadians) {
|
||
normalRadians.y = Math.atan2(yD - yC, xD - xC) - Math.PI * 0.5;
|
||
}
|
||
}
|
||
}
|
||
intersectionCount++;
|
||
}
|
||
else {
|
||
xMin = x;
|
||
yMin = y;
|
||
xMax = x;
|
||
yMax = y;
|
||
intersectionCount++;
|
||
if (normalRadians) {
|
||
normalRadians.x = Math.atan2(yD - yC, xD - xC) - Math.PI * 0.5;
|
||
normalRadians.y = normalRadians.x;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
xC = xD;
|
||
yC = yD;
|
||
}
|
||
if (intersectionCount === 1) {
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xMin;
|
||
intersectionPointA.y = yMin;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xMin;
|
||
intersectionPointB.y = yMin;
|
||
}
|
||
if (normalRadians) {
|
||
normalRadians.y = normalRadians.x + Math.PI;
|
||
}
|
||
}
|
||
else if (intersectionCount > 1) {
|
||
intersectionCount++;
|
||
if (intersectionPointA) {
|
||
intersectionPointA.x = xMin;
|
||
intersectionPointA.y = yMin;
|
||
}
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = xMax;
|
||
intersectionPointB.y = yMax;
|
||
}
|
||
}
|
||
return intersectionCount;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BoundingBoxData.prototype._onClear = function () {
|
||
this.type = -1 /* None */;
|
||
this.color = 0x000000;
|
||
this.x = 0.0;
|
||
this.y = 0.0;
|
||
this.width = 0.0;
|
||
this.height = 0.0;
|
||
this.vertices.length = 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 是否包含点。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
BoundingBoxData.prototype.containsPoint = function (pX, pY) {
|
||
var isInSide = false;
|
||
if (this.type === 2 /* Polygon */) {
|
||
if (pX >= this.x && pX <= this.width && pY >= this.y && pY <= this.height) {
|
||
for (var i = 0, l = this.vertices.length, iP = l - 2; i < l; i += 2) {
|
||
var yA = this.vertices[iP + 1];
|
||
var yB = this.vertices[i + 1];
|
||
if ((yB < pY && yA >= pY) || (yA < pY && yB >= pY)) {
|
||
var xA = this.vertices[iP];
|
||
var xB = this.vertices[i];
|
||
if ((pY - yB) * (xA - xB) / (yA - yB) + xB < pX) {
|
||
isInSide = !isInSide;
|
||
}
|
||
}
|
||
iP = i;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
var widthH = this.width * 0.5;
|
||
if (pX >= -widthH && pX <= widthH) {
|
||
var heightH = this.height * 0.5;
|
||
if (pY >= -heightH && pY <= heightH) {
|
||
if (this.type === 1 /* Ellipse */) {
|
||
pY *= widthH / heightH;
|
||
isInSide = Math.sqrt(pX * pX + pY * pY) <= widthH;
|
||
}
|
||
else {
|
||
isInSide = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return isInSide;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 是否与线段相交。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
BoundingBoxData.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
var intersectionCount = 0;
|
||
switch (this.type) {
|
||
case 0 /* Rectangle */:
|
||
var widthH = this.width * 0.5;
|
||
var heightH = this.height * 0.5;
|
||
intersectionCount = BoundingBoxData.segmentIntersectsRectangle(xA, yA, xB, yB, -widthH, -heightH, widthH, heightH, intersectionPointA, intersectionPointB, normalRadians);
|
||
break;
|
||
case 1 /* Ellipse */:
|
||
intersectionCount = BoundingBoxData.segmentIntersectsEllipse(xA, yA, xB, yB, 0.0, 0.0, this.width * 0.5, this.height * 0.5, intersectionPointA, intersectionPointB, normalRadians);
|
||
break;
|
||
case 2 /* Polygon */:
|
||
if (BoundingBoxData.segmentIntersectsRectangle(xA, yA, xB, yB, this.x, this.y, this.width, this.height, null, null) !== 0) {
|
||
intersectionCount = BoundingBoxData.segmentIntersectsPolygon(xA, yA, xB, yB, this.vertices, intersectionPointA, intersectionPointB, normalRadians);
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return intersectionCount;
|
||
};
|
||
return BoundingBoxData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.BoundingBoxData = BoundingBoxData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义数据。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
var CustomData = (function (_super) {
|
||
__extends(CustomData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function CustomData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义整数。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.ints = [];
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义浮点数。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.floats = [];
|
||
/**
|
||
* @language zh_CN
|
||
* 自定义字符串。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
_this.strings = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
CustomData.toString = function () {
|
||
return "[class dragonBones.CustomData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
CustomData.prototype._onClear = function () {
|
||
this.ints.length = 0;
|
||
this.floats.length = 0;
|
||
this.strings.length = 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取自定义整数。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
CustomData.prototype.getInt = function (index) {
|
||
if (index === void 0) { index = 0; }
|
||
return index >= 0 && index < this.ints.length ? this.ints[index] : 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取自定义浮点数。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
CustomData.prototype.getFloat = function (index) {
|
||
if (index === void 0) { index = 0; }
|
||
return index >= 0 && index < this.floats.length ? this.floats[index] : 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取自定义字符串。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
CustomData.prototype.getString = function (index) {
|
||
if (index === void 0) { index = 0; }
|
||
return index >= 0 && index < this.strings.length ? this.strings[index] : null;
|
||
};
|
||
return CustomData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.CustomData = CustomData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var EventData = (function (_super) {
|
||
__extends(EventData, _super);
|
||
function EventData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
EventData.toString = function () {
|
||
return "[class dragonBones.EventData]";
|
||
};
|
||
EventData.prototype._onClear = function () {
|
||
if (this.data) {
|
||
this.data.returnToPool();
|
||
}
|
||
this.type = -1 /* None */;
|
||
this.name = null;
|
||
this.bone = null;
|
||
this.slot = null;
|
||
this.data = null;
|
||
};
|
||
return EventData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.EventData = EventData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var ActionData = (function (_super) {
|
||
__extends(ActionData, _super);
|
||
function ActionData() {
|
||
return _super.call(this) || this;
|
||
}
|
||
ActionData.toString = function () {
|
||
return "[class dragonBones.ActionData]";
|
||
};
|
||
ActionData.prototype._onClear = function () {
|
||
if (this.animationConfig) {
|
||
this.animationConfig.returnToPool();
|
||
}
|
||
this.type = -1 /* None */;
|
||
this.bone = null;
|
||
this.slot = null;
|
||
this.animationConfig = null;
|
||
};
|
||
return ActionData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.ActionData = ActionData;
|
||
/**
|
||
* @language zh_CN
|
||
* 龙骨数据。
|
||
* 一个龙骨数据包含多个骨架数据。
|
||
* @see dragonBones.ArmatureData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var DragonBonesData = (function (_super) {
|
||
__extends(DragonBonesData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function DragonBonesData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @language zh_CN
|
||
* 所有骨架数据。
|
||
* @see dragonBones.ArmatureData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.armatures = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.cachedFrames = [];
|
||
_this._armatureNames = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBonesData.toString = function () {
|
||
return "[class dragonBones.DragonBonesData]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBonesData.prototype._onClear = function () {
|
||
if (dragonBones.DragonBones.debug) {
|
||
for (var i = 0, l = dragonBones.DragonBones._armatures.length; i < l; ++i) {
|
||
var armature = dragonBones.DragonBones._armatures[i];
|
||
if (armature.armatureData.parent === this) {
|
||
throw new Error("The DragonBonesData is being used, please make sure all armature references to the data have been deleted.");
|
||
}
|
||
}
|
||
}
|
||
for (var k in this.armatures) {
|
||
this.armatures[k].returnToPool();
|
||
delete this.armatures[k];
|
||
}
|
||
if (this.userData) {
|
||
this.userData.returnToPool();
|
||
}
|
||
this.autoSearch = false;
|
||
this.frameRate = 0;
|
||
this.version = null;
|
||
this.name = null;
|
||
//this.armatures.clear();
|
||
this.cachedFrames.length = 0;
|
||
this.userData = null;
|
||
this._armatureNames.length = 0;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
DragonBonesData.prototype.addArmature = function (value) {
|
||
if (value && value.name && !this.armatures[value.name]) {
|
||
this.armatures[value.name] = value;
|
||
this._armatureNames.push(value.name);
|
||
value.parent = this;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取骨架。
|
||
* @param name 骨架数据名称。
|
||
* @see dragonBones.ArmatureData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
DragonBonesData.prototype.getArmature = function (name) {
|
||
return this.armatures[name];
|
||
};
|
||
Object.defineProperty(DragonBonesData.prototype, "armatureNames", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所有骨架数据名称。
|
||
* @see #armatures
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._armatureNames;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.BaseFactory#removeDragonBonesData()
|
||
*/
|
||
DragonBonesData.prototype.dispose = function () {
|
||
this.returnToPool();
|
||
};
|
||
return DragonBonesData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.DragonBonesData = DragonBonesData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 贴图集数据。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var TextureAtlasData = (function (_super) {
|
||
__extends(TextureAtlasData, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function TextureAtlasData() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this.textures = {};
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
TextureAtlasData.prototype._onClear = function () {
|
||
for (var k in this.textures) {
|
||
this.textures[k].returnToPool();
|
||
delete this.textures[k];
|
||
}
|
||
this.autoSearch = false;
|
||
this.scale = 1.0;
|
||
this.width = 0.0;
|
||
this.height = 0.0;
|
||
//this.textures.clear();
|
||
this.name = null;
|
||
this.imagePath = null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
TextureAtlasData.prototype.addTexture = function (value) {
|
||
if (value && value.name && !this.textures[value.name]) {
|
||
this.textures[value.name] = value;
|
||
value.parent = this;
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
TextureAtlasData.prototype.getTexture = function (name) {
|
||
return this.textures[name];
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
TextureAtlasData.prototype.copyFrom = function (value) {
|
||
this.autoSearch = value.autoSearch;
|
||
this.scale = value.scale;
|
||
this.width = value.width;
|
||
this.height = value.height;
|
||
this.name = value.name;
|
||
this.imagePath = value.imagePath;
|
||
for (var k in this.textures) {
|
||
this.textures[k].returnToPool();
|
||
delete this.textures[k];
|
||
}
|
||
for (var k in value.textures) {
|
||
var texture = this.generateTexture();
|
||
texture.copyFrom(value.textures[k]);
|
||
this.textures[k] = texture;
|
||
}
|
||
};
|
||
return TextureAtlasData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.TextureAtlasData = TextureAtlasData;
|
||
/**
|
||
* @private
|
||
*/
|
||
var TextureData = (function (_super) {
|
||
__extends(TextureData, _super);
|
||
function TextureData() {
|
||
var _this = _super.call(this) || this;
|
||
_this.region = new dragonBones.Rectangle();
|
||
return _this;
|
||
}
|
||
TextureData.generateRectangle = function () {
|
||
return new dragonBones.Rectangle();
|
||
};
|
||
TextureData.prototype._onClear = function () {
|
||
this.rotated = false;
|
||
this.name = null;
|
||
this.region.clear();
|
||
this.frame = null;
|
||
this.parent = null;
|
||
};
|
||
TextureData.prototype.copyFrom = function (value) {
|
||
this.rotated = value.rotated;
|
||
this.name = value.name;
|
||
if (!this.frame && value.frame) {
|
||
this.frame = TextureData.generateRectangle();
|
||
}
|
||
else if (this.frame && !value.frame) {
|
||
this.frame = null;
|
||
}
|
||
if (this.frame && value.frame) {
|
||
this.frame.copyFrom(value.frame);
|
||
}
|
||
this.parent = value.parent;
|
||
this.region.copyFrom(value.region);
|
||
};
|
||
return TextureData;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.TextureData = TextureData;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @private
|
||
*/
|
||
var DataParser = (function () {
|
||
function DataParser() {
|
||
this._isOldData = false; // For 2.x ~ 3.x
|
||
this._isGlobalTransform = false; // For 2.x ~ 3.x
|
||
this._isAutoTween = false; // For 2.x ~ 3.x
|
||
this._animationTweenEasing = 0.0; // For 2.x ~ 3.x
|
||
this._timelinePivot = new dragonBones.Point(); // For 2.x ~ 3.x
|
||
this._helpPoint = new dragonBones.Point();
|
||
this._helpTransformA = new dragonBones.Transform();
|
||
this._helpTransformB = new dragonBones.Transform();
|
||
this._helpMatrix = new dragonBones.Matrix();
|
||
this._rawBones = []; // For skinned mesh
|
||
this._data = null;
|
||
this._armature = null;
|
||
this._skin = null;
|
||
this._skinSlotData = null;
|
||
this._animation = null;
|
||
this._timeline = null;
|
||
}
|
||
DataParser._getArmatureType = function (value) {
|
||
switch (value.toLowerCase()) {
|
||
case "stage":
|
||
return 2 /* Stage */;
|
||
case "armature":
|
||
return 0 /* Armature */;
|
||
case "movieclip":
|
||
return 1 /* MovieClip */;
|
||
default:
|
||
return -1 /* None */;
|
||
}
|
||
};
|
||
DataParser._getDisplayType = function (value) {
|
||
switch (value.toLowerCase()) {
|
||
case "image":
|
||
return 0 /* Image */;
|
||
case "mesh":
|
||
return 2 /* Mesh */;
|
||
case "armature":
|
||
return 1 /* Armature */;
|
||
case "boundingbox":
|
||
return 3 /* BoundingBox */;
|
||
default:
|
||
return -1 /* None */;
|
||
}
|
||
};
|
||
DataParser._getBoundingBoxType = function (value) {
|
||
switch (value.toLowerCase()) {
|
||
case "rectangle":
|
||
return 0 /* Rectangle */;
|
||
case "ellipse":
|
||
return 1 /* Ellipse */;
|
||
case "polygon":
|
||
return 2 /* Polygon */;
|
||
default:
|
||
return -1 /* None */;
|
||
}
|
||
};
|
||
DataParser._getBlendMode = function (value) {
|
||
switch (value.toLowerCase()) {
|
||
case "normal":
|
||
return 0 /* Normal */;
|
||
case "add":
|
||
return 1 /* Add */;
|
||
case "alpha":
|
||
return 2 /* Alpha */;
|
||
case "darken":
|
||
return 3 /* Darken */;
|
||
case "difference":
|
||
return 4 /* Difference */;
|
||
case "erase":
|
||
return 5 /* Erase */;
|
||
case "hardlight":
|
||
return 6 /* HardLight */;
|
||
case "invert":
|
||
return 7 /* Invert */;
|
||
case "layer":
|
||
return 8 /* Layer */;
|
||
case "lighten":
|
||
return 9 /* Lighten */;
|
||
case "multiply":
|
||
return 10 /* Multiply */;
|
||
case "overlay":
|
||
return 11 /* Overlay */;
|
||
case "screen":
|
||
return 12 /* Screen */;
|
||
case "subtract":
|
||
return 13 /* Subtract */;
|
||
default:
|
||
return -1 /* None */;
|
||
}
|
||
};
|
||
DataParser._getActionType = function (value) {
|
||
switch (value.toLowerCase()) {
|
||
case "play":
|
||
case "gotoandplay":
|
||
return 0 /* Play */;
|
||
default:
|
||
return -1 /* None */;
|
||
}
|
||
};
|
||
DataParser.prototype._getTimelineFrameMatrix = function (animation, timeline, position, transform) {
|
||
var frameIndex = Math.floor(position * animation.frameCount / animation.duration);
|
||
if (timeline.frames.length === 1 || frameIndex >= timeline.frames.length) {
|
||
transform.copyFrom(timeline.frames[0].transform);
|
||
}
|
||
else {
|
||
var frame = timeline.frames[frameIndex];
|
||
var tweenProgress = 0.0;
|
||
if (frame.tweenEasing !== dragonBones.DragonBones.NO_TWEEN) {
|
||
tweenProgress = (position - frame.position) / frame.duration;
|
||
if (frame.tweenEasing !== 0.0) {
|
||
tweenProgress = dragonBones.TweenTimelineState._getEasingValue(tweenProgress, frame.tweenEasing);
|
||
}
|
||
}
|
||
else if (frame.curve) {
|
||
tweenProgress = (position - frame.position) / frame.duration;
|
||
tweenProgress = dragonBones.TweenTimelineState._getEasingCurveValue(tweenProgress, frame.curve);
|
||
}
|
||
var nextFrame = frame.next;
|
||
transform.x = nextFrame.transform.x - frame.transform.x;
|
||
transform.y = nextFrame.transform.y - frame.transform.y;
|
||
transform.skewX = dragonBones.Transform.normalizeRadian(nextFrame.transform.skewX - frame.transform.skewX);
|
||
transform.skewY = dragonBones.Transform.normalizeRadian(nextFrame.transform.skewY - frame.transform.skewY);
|
||
transform.scaleX = nextFrame.transform.scaleX - frame.transform.scaleX;
|
||
transform.scaleY = nextFrame.transform.scaleY - frame.transform.scaleY;
|
||
transform.x = frame.transform.x + transform.x * tweenProgress;
|
||
transform.y = frame.transform.y + transform.y * tweenProgress;
|
||
transform.skewX = frame.transform.skewX + transform.skewX * tweenProgress;
|
||
transform.skewY = frame.transform.skewY + transform.skewY * tweenProgress;
|
||
transform.scaleX = frame.transform.scaleX + transform.scaleX * tweenProgress;
|
||
transform.scaleY = frame.transform.scaleY + transform.scaleY * tweenProgress;
|
||
}
|
||
transform.add(timeline.originalTransform);
|
||
};
|
||
DataParser.prototype._globalToLocal = function (armature) {
|
||
var keyFrames = new Array();
|
||
var bones = armature.sortedBones.concat().reverse();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (bone.parent) {
|
||
bone.parent.transform.toMatrix(this._helpMatrix);
|
||
this._helpMatrix.invert();
|
||
this._helpMatrix.transformPoint(bone.transform.x, bone.transform.y, this._helpPoint);
|
||
bone.transform.x = this._helpPoint.x;
|
||
bone.transform.y = this._helpPoint.y;
|
||
bone.transform.rotation -= bone.parent.transform.rotation;
|
||
}
|
||
for (var i_1 in armature.animations) {
|
||
var animation = armature.animations[i_1];
|
||
var timeline = animation.getBoneTimeline(bone.name);
|
||
if (!timeline) {
|
||
continue;
|
||
}
|
||
var parentTimeline = bone.parent ? animation.getBoneTimeline(bone.parent.name) : null;
|
||
this._helpTransformB.copyFrom(timeline.originalTransform);
|
||
keyFrames.length = 0;
|
||
for (var i_2 = 0, l_1 = timeline.frames.length; i_2 < l_1; ++i_2) {
|
||
var frame = timeline.frames[i_2];
|
||
if (keyFrames.indexOf(frame) >= 0) {
|
||
continue;
|
||
}
|
||
keyFrames.push(frame);
|
||
if (parentTimeline) {
|
||
this._getTimelineFrameMatrix(animation, parentTimeline, frame.position, this._helpTransformA);
|
||
frame.transform.add(this._helpTransformB);
|
||
this._helpTransformA.toMatrix(this._helpMatrix);
|
||
this._helpMatrix.invert();
|
||
this._helpMatrix.transformPoint(frame.transform.x, frame.transform.y, this._helpPoint);
|
||
frame.transform.x = this._helpPoint.x;
|
||
frame.transform.y = this._helpPoint.y;
|
||
frame.transform.rotation -= this._helpTransformA.rotation;
|
||
}
|
||
else {
|
||
frame.transform.add(this._helpTransformB);
|
||
}
|
||
frame.transform.minus(bone.transform);
|
||
if (i_2 === 0) {
|
||
timeline.originalTransform.copyFrom(frame.transform);
|
||
frame.transform.identity();
|
||
}
|
||
else {
|
||
frame.transform.minus(timeline.originalTransform);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
DataParser.prototype._mergeFrameToAnimationTimeline = function (framePostion, actions, events) {
|
||
var frameStart = Math.floor(framePostion * this._armature.frameRate); // uint()
|
||
var frames = this._animation.frames;
|
||
if (frames.length === 0) {
|
||
var startFrame = dragonBones.BaseObject.borrowObject(dragonBones.AnimationFrameData); // Add start frame.
|
||
startFrame.position = 0.0;
|
||
if (this._animation.frameCount > 1) {
|
||
frames.length = this._animation.frameCount + 1; // One more count for zero duration frame.
|
||
var endFrame = dragonBones.BaseObject.borrowObject(dragonBones.AnimationFrameData); // Add end frame to keep animation timeline has two different frames atleast.
|
||
endFrame.position = this._animation.frameCount / this._armature.frameRate;
|
||
frames[0] = startFrame;
|
||
frames[this._animation.frameCount] = endFrame;
|
||
}
|
||
}
|
||
var insertedFrame = null;
|
||
var replacedFrame = frames[frameStart];
|
||
if (replacedFrame && (frameStart === 0 || frames[frameStart - 1] === replacedFrame.prev)) {
|
||
insertedFrame = replacedFrame;
|
||
}
|
||
else {
|
||
insertedFrame = dragonBones.BaseObject.borrowObject(dragonBones.AnimationFrameData); // Create frame.
|
||
insertedFrame.position = frameStart / this._armature.frameRate;
|
||
frames[frameStart] = insertedFrame;
|
||
for (var i = frameStart + 1, l = frames.length; i < l; ++i) {
|
||
if (replacedFrame && frames[i] === replacedFrame) {
|
||
frames[i] = null;
|
||
}
|
||
}
|
||
}
|
||
if (actions) {
|
||
for (var i = 0, l = actions.length; i < l; ++i) {
|
||
insertedFrame.actions.push(actions[i]);
|
||
}
|
||
}
|
||
if (events) {
|
||
for (var i = 0, l = events.length; i < l; ++i) {
|
||
insertedFrame.events.push(events[i]);
|
||
}
|
||
}
|
||
// Modify frame link and duration.
|
||
var prevFrame = null;
|
||
var nextFrame = null;
|
||
for (var i = 0, l = frames.length; i < l; ++i) {
|
||
var currentFrame = frames[i];
|
||
if (currentFrame && nextFrame !== currentFrame) {
|
||
nextFrame = currentFrame;
|
||
if (prevFrame) {
|
||
nextFrame.prev = prevFrame;
|
||
prevFrame.next = nextFrame;
|
||
prevFrame.duration = nextFrame.position - prevFrame.position;
|
||
}
|
||
prevFrame = nextFrame;
|
||
}
|
||
else {
|
||
frames[i] = prevFrame;
|
||
}
|
||
}
|
||
nextFrame.duration = this._animation.duration - nextFrame.position;
|
||
nextFrame = frames[0];
|
||
prevFrame.next = nextFrame;
|
||
nextFrame.prev = prevFrame;
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.BaseFactory#parseDragonBonesData()
|
||
*/
|
||
DataParser.parseDragonBonesData = function (rawData) {
|
||
return dragonBones.ObjectDataParser.getInstance().parseDragonBonesData(rawData);
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.BaseFactory#parsetTextureAtlasData()
|
||
*/
|
||
DataParser.parseTextureAtlasData = function (rawData, scale) {
|
||
if (scale === void 0) { scale = 1; }
|
||
var textureAtlasData = {};
|
||
var subTextureList = rawData[DataParser.SUB_TEXTURE];
|
||
for (var i = 0, len = subTextureList.length; i < len; i++) {
|
||
var subTextureObject = subTextureList[i];
|
||
var subTextureName = subTextureObject[DataParser.NAME];
|
||
var subTextureRegion = new dragonBones.Rectangle();
|
||
var subTextureFrame = null;
|
||
subTextureRegion.x = subTextureObject[DataParser.X] / scale;
|
||
subTextureRegion.y = subTextureObject[DataParser.Y] / scale;
|
||
subTextureRegion.width = subTextureObject[DataParser.WIDTH] / scale;
|
||
subTextureRegion.height = subTextureObject[DataParser.HEIGHT] / scale;
|
||
if (DataParser.FRAME_WIDTH in subTextureObject) {
|
||
subTextureFrame = new dragonBones.Rectangle();
|
||
subTextureFrame.x = subTextureObject[DataParser.FRAME_X] / scale;
|
||
subTextureFrame.y = subTextureObject[DataParser.FRAME_Y] / scale;
|
||
subTextureFrame.width = subTextureObject[DataParser.FRAME_WIDTH] / scale;
|
||
subTextureFrame.height = subTextureObject[DataParser.FRAME_HEIGHT] / scale;
|
||
}
|
||
textureAtlasData[subTextureName] = { region: subTextureRegion, frame: subTextureFrame, rotated: false };
|
||
}
|
||
return textureAtlasData;
|
||
};
|
||
return DataParser;
|
||
}());
|
||
DataParser.DATA_VERSION_2_3 = "2.3";
|
||
DataParser.DATA_VERSION_3_0 = "3.0";
|
||
DataParser.DATA_VERSION_4_0 = "4.0";
|
||
DataParser.DATA_VERSION_4_5 = "4.5";
|
||
DataParser.DATA_VERSION_5_0 = "5.0";
|
||
DataParser.DATA_VERSION = DataParser.DATA_VERSION_5_0;
|
||
DataParser.DATA_VERSIONS = [
|
||
DataParser.DATA_VERSION_5_0,
|
||
DataParser.DATA_VERSION_4_5,
|
||
DataParser.DATA_VERSION_4_0,
|
||
DataParser.DATA_VERSION_3_0,
|
||
DataParser.DATA_VERSION_2_3
|
||
];
|
||
DataParser.TEXTURE_ATLAS = "TextureAtlas";
|
||
DataParser.SUB_TEXTURE = "SubTexture";
|
||
DataParser.FORMAT = "format";
|
||
DataParser.IMAGE_PATH = "imagePath";
|
||
DataParser.WIDTH = "width";
|
||
DataParser.HEIGHT = "height";
|
||
DataParser.ROTATED = "rotated";
|
||
DataParser.FRAME_X = "frameX";
|
||
DataParser.FRAME_Y = "frameY";
|
||
DataParser.FRAME_WIDTH = "frameWidth";
|
||
DataParser.FRAME_HEIGHT = "frameHeight";
|
||
DataParser.DRADON_BONES = "dragonBones";
|
||
DataParser.ARMATURE = "armature";
|
||
DataParser.BONE = "bone";
|
||
DataParser.IK = "ik";
|
||
DataParser.SLOT = "slot";
|
||
DataParser.SKIN = "skin";
|
||
DataParser.DISPLAY = "display";
|
||
DataParser.ANIMATION = "animation";
|
||
DataParser.Z_ORDER = "zOrder";
|
||
DataParser.FFD = "ffd";
|
||
DataParser.FRAME = "frame";
|
||
DataParser.ACTIONS = "actions";
|
||
DataParser.EVENTS = "events";
|
||
DataParser.INTS = "ints";
|
||
DataParser.FLOATS = "floats";
|
||
DataParser.STRINGS = "strings";
|
||
DataParser.PIVOT = "pivot";
|
||
DataParser.TRANSFORM = "transform";
|
||
DataParser.AABB = "aabb";
|
||
DataParser.COLOR = "color";
|
||
DataParser.VERSION = "version";
|
||
DataParser.COMPATIBLE_VERSION = "compatibleVersion";
|
||
DataParser.FRAME_RATE = "frameRate";
|
||
DataParser.TYPE = "type";
|
||
DataParser.SUB_TYPE = "subType";
|
||
DataParser.NAME = "name";
|
||
DataParser.PARENT = "parent";
|
||
DataParser.TARGET = "target";
|
||
DataParser.SHARE = "share";
|
||
DataParser.PATH = "path";
|
||
DataParser.LENGTH = "length";
|
||
DataParser.DISPLAY_INDEX = "displayIndex";
|
||
DataParser.BLEND_MODE = "blendMode";
|
||
DataParser.INHERIT_TRANSLATION = "inheritTranslation";
|
||
DataParser.INHERIT_ROTATION = "inheritRotation";
|
||
DataParser.INHERIT_SCALE = "inheritScale";
|
||
DataParser.INHERIT_REFLECTION = "inheritReflection";
|
||
DataParser.INHERIT_ANIMATION = "inheritAnimation";
|
||
DataParser.INHERIT_FFD = "inheritFFD";
|
||
DataParser.BEND_POSITIVE = "bendPositive";
|
||
DataParser.CHAIN = "chain";
|
||
DataParser.WEIGHT = "weight";
|
||
DataParser.FADE_IN_TIME = "fadeInTime";
|
||
DataParser.PLAY_TIMES = "playTimes";
|
||
DataParser.SCALE = "scale";
|
||
DataParser.OFFSET = "offset";
|
||
DataParser.POSITION = "position";
|
||
DataParser.DURATION = "duration";
|
||
DataParser.TWEEN_TYPE = "tweenType";
|
||
DataParser.TWEEN_EASING = "tweenEasing";
|
||
DataParser.TWEEN_ROTATE = "tweenRotate";
|
||
DataParser.TWEEN_SCALE = "tweenScale";
|
||
DataParser.CURVE = "curve";
|
||
DataParser.EVENT = "event";
|
||
DataParser.SOUND = "sound";
|
||
DataParser.ACTION = "action";
|
||
DataParser.DEFAULT_ACTIONS = "defaultActions";
|
||
DataParser.X = "x";
|
||
DataParser.Y = "y";
|
||
DataParser.SKEW_X = "skX";
|
||
DataParser.SKEW_Y = "skY";
|
||
DataParser.SCALE_X = "scX";
|
||
DataParser.SCALE_Y = "scY";
|
||
DataParser.ALPHA_OFFSET = "aO";
|
||
DataParser.RED_OFFSET = "rO";
|
||
DataParser.GREEN_OFFSET = "gO";
|
||
DataParser.BLUE_OFFSET = "bO";
|
||
DataParser.ALPHA_MULTIPLIER = "aM";
|
||
DataParser.RED_MULTIPLIER = "rM";
|
||
DataParser.GREEN_MULTIPLIER = "gM";
|
||
DataParser.BLUE_MULTIPLIER = "bM";
|
||
DataParser.UVS = "uvs";
|
||
DataParser.VERTICES = "vertices";
|
||
DataParser.TRIANGLES = "triangles";
|
||
DataParser.WEIGHTS = "weights";
|
||
DataParser.SLOT_POSE = "slotPose";
|
||
DataParser.BONE_POSE = "bonePose";
|
||
DataParser.COLOR_TRANSFORM = "colorTransform";
|
||
DataParser.TIMELINE = "timeline";
|
||
DataParser.IS_GLOBAL = "isGlobal";
|
||
DataParser.PIVOT_X = "pX";
|
||
DataParser.PIVOT_Y = "pY";
|
||
DataParser.Z = "z";
|
||
DataParser.LOOP = "loop";
|
||
DataParser.AUTO_TWEEN = "autoTween";
|
||
DataParser.HIDE = "hide";
|
||
DataParser.DEFAULT_NAME = "__default";
|
||
dragonBones.DataParser = DataParser;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @private
|
||
*/
|
||
var ObjectDataParser = (function (_super) {
|
||
__extends(ObjectDataParser, _super);
|
||
/**
|
||
* @private
|
||
*/
|
||
function ObjectDataParser() {
|
||
return _super.call(this) || this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser._getBoolean = function (rawData, key, defaultValue) {
|
||
if (key in rawData) {
|
||
var value = rawData[key];
|
||
var valueType = typeof value;
|
||
if (valueType === "boolean") {
|
||
return value;
|
||
}
|
||
else if (valueType === "string") {
|
||
switch (value) {
|
||
case "0":
|
||
case "NaN":
|
||
case "":
|
||
case "false":
|
||
case "null":
|
||
case "undefined":
|
||
return false;
|
||
default:
|
||
return true;
|
||
}
|
||
}
|
||
else {
|
||
return !!value;
|
||
}
|
||
}
|
||
return defaultValue;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser._getNumber = function (rawData, key, defaultValue) {
|
||
if (key in rawData) {
|
||
var value = rawData[key];
|
||
if (value == null || value === "NaN") {
|
||
return defaultValue;
|
||
}
|
||
return +value || 0;
|
||
}
|
||
return defaultValue;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser._getString = function (rawData, key, defaultValue) {
|
||
if (key in rawData) {
|
||
return String(rawData[key]);
|
||
}
|
||
return defaultValue;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseArmature = function (rawData, scale) {
|
||
var armature = dragonBones.BaseObject.borrowObject(dragonBones.ArmatureData);
|
||
armature.isRightTransform = ObjectDataParser.DATA_VERSIONS.indexOf(this._data.version) > ObjectDataParser.DATA_VERSIONS.indexOf(ObjectDataParser.DATA_VERSION_4_5);
|
||
armature.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
armature.frameRate = ObjectDataParser._getNumber(rawData, ObjectDataParser.FRAME_RATE, this._data.frameRate);
|
||
armature.scale = scale;
|
||
if (armature.frameRate === 0) {
|
||
armature.frameRate = 24;
|
||
}
|
||
if (ObjectDataParser.TYPE in rawData && typeof rawData[ObjectDataParser.TYPE] === "string") {
|
||
armature.type = ObjectDataParser._getArmatureType(rawData[ObjectDataParser.TYPE]);
|
||
}
|
||
else {
|
||
armature.type = ObjectDataParser._getNumber(rawData, ObjectDataParser.TYPE, 0 /* Armature */);
|
||
}
|
||
this._armature = armature;
|
||
this._rawBones.length = 0;
|
||
if (ObjectDataParser.AABB in rawData) {
|
||
var rawAABB = rawData[ObjectDataParser.AABB];
|
||
armature.aabb.x = ObjectDataParser._getNumber(rawAABB, ObjectDataParser.X, 0.0);
|
||
armature.aabb.y = ObjectDataParser._getNumber(rawAABB, ObjectDataParser.Y, 0.0);
|
||
armature.aabb.width = ObjectDataParser._getNumber(rawAABB, ObjectDataParser.WIDTH, 0.0);
|
||
armature.aabb.height = ObjectDataParser._getNumber(rawAABB, ObjectDataParser.HEIGHT, 0.0);
|
||
}
|
||
if (ObjectDataParser.BONE in rawData) {
|
||
var rawBones = rawData[ObjectDataParser.BONE];
|
||
for (var i = 0, l = rawBones.length; i < l; ++i) {
|
||
var rawBone = rawBones[i];
|
||
var bone = this._parseBone(rawBone);
|
||
armature.addBone(bone, ObjectDataParser._getString(rawBone, ObjectDataParser.PARENT, null));
|
||
this._rawBones.push(bone);
|
||
}
|
||
}
|
||
if (ObjectDataParser.IK in rawData) {
|
||
var rawIKS = rawData[ObjectDataParser.IK];
|
||
for (var i = 0, l = rawIKS.length; i < l; ++i) {
|
||
this._parseIK(rawIKS[i]);
|
||
}
|
||
}
|
||
if (ObjectDataParser.SLOT in rawData) {
|
||
var rawSlots = rawData[ObjectDataParser.SLOT];
|
||
var zOrder = 0;
|
||
for (var i = 0, l = rawSlots.length; i < l; ++i) {
|
||
armature.addSlot(this._parseSlot(rawSlots[i], zOrder++));
|
||
}
|
||
}
|
||
if (ObjectDataParser.SKIN in rawData) {
|
||
var rawSkins = rawData[ObjectDataParser.SKIN];
|
||
for (var i = 0, l = rawSkins.length; i < l; ++i) {
|
||
armature.addSkin(this._parseSkin(rawSkins[i]));
|
||
}
|
||
}
|
||
if (ObjectDataParser.ANIMATION in rawData) {
|
||
var rawAnimations = rawData[ObjectDataParser.ANIMATION];
|
||
for (var i = 0, l = rawAnimations.length; i < l; ++i) {
|
||
armature.addAnimation(this._parseAnimation(rawAnimations[i]));
|
||
}
|
||
}
|
||
if ((ObjectDataParser.ACTIONS in rawData) ||
|
||
(ObjectDataParser.DEFAULT_ACTIONS in rawData)) {
|
||
this._parseActionData(rawData, armature.actions, null, null);
|
||
}
|
||
if (this._isOldData && this._isGlobalTransform) {
|
||
this._globalToLocal(armature);
|
||
}
|
||
this._armature = null;
|
||
this._rawBones.length = 0;
|
||
return armature;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseBone = function (rawData) {
|
||
var bone = dragonBones.BaseObject.borrowObject(dragonBones.BoneData);
|
||
bone.inheritTranslation = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_TRANSLATION, true);
|
||
bone.inheritRotation = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_ROTATION, true);
|
||
bone.inheritScale = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_SCALE, true);
|
||
bone.inheritReflection = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_REFLECTION, true);
|
||
bone.length = ObjectDataParser._getNumber(rawData, ObjectDataParser.LENGTH, 0) * this._armature.scale;
|
||
bone.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
if (ObjectDataParser.TRANSFORM in rawData) {
|
||
this._parseTransform(rawData[ObjectDataParser.TRANSFORM], bone.transform);
|
||
}
|
||
if (this._isOldData) {
|
||
bone.inheritScale = false;
|
||
}
|
||
return bone;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseIK = function (rawData) {
|
||
var bone = this._armature.getBone(ObjectDataParser._getString(rawData, (ObjectDataParser.BONE in rawData) ? ObjectDataParser.BONE : ObjectDataParser.NAME, null));
|
||
if (bone) {
|
||
bone.bendPositive = ObjectDataParser._getBoolean(rawData, ObjectDataParser.BEND_POSITIVE, true);
|
||
bone.chain = ObjectDataParser._getNumber(rawData, ObjectDataParser.CHAIN, 0);
|
||
bone.weight = ObjectDataParser._getNumber(rawData, ObjectDataParser.WEIGHT, 1.0);
|
||
bone.ik = this._armature.getBone(ObjectDataParser._getString(rawData, ObjectDataParser.TARGET, null));
|
||
if (bone.chain > 0 && bone.parent && !bone.parent.ik) {
|
||
bone.parent.ik = bone.ik;
|
||
bone.parent.chainIndex = 0;
|
||
bone.parent.chain = 0;
|
||
bone.parent.weight = bone.weight;
|
||
bone.chainIndex = 1;
|
||
}
|
||
else {
|
||
bone.chain = 0;
|
||
bone.chainIndex = 0;
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseSlot = function (rawData, zOrder) {
|
||
var slot = dragonBones.BaseObject.borrowObject(dragonBones.SlotData);
|
||
slot.displayIndex = ObjectDataParser._getNumber(rawData, ObjectDataParser.DISPLAY_INDEX, 0);
|
||
slot.zOrder = ObjectDataParser._getNumber(rawData, ObjectDataParser.Z, zOrder); // Support 2.x ~ 3.x data.
|
||
slot.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
slot.parent = this._armature.getBone(ObjectDataParser._getString(rawData, ObjectDataParser.PARENT, null));
|
||
if ((ObjectDataParser.COLOR in rawData) || (ObjectDataParser.COLOR_TRANSFORM in rawData)) {
|
||
slot.color = dragonBones.SlotData.generateColor();
|
||
this._parseColorTransform(rawData[ObjectDataParser.COLOR] || rawData[ObjectDataParser.COLOR_TRANSFORM], slot.color);
|
||
}
|
||
else {
|
||
slot.color = dragonBones.SlotData.DEFAULT_COLOR;
|
||
}
|
||
if (ObjectDataParser.BLEND_MODE in rawData && typeof rawData[ObjectDataParser.BLEND_MODE] === "string") {
|
||
slot.blendMode = ObjectDataParser._getBlendMode(rawData[ObjectDataParser.BLEND_MODE]);
|
||
}
|
||
else {
|
||
slot.blendMode = ObjectDataParser._getNumber(rawData, ObjectDataParser.BLEND_MODE, 0 /* Normal */);
|
||
}
|
||
if ((ObjectDataParser.ACTIONS in rawData) || (ObjectDataParser.DEFAULT_ACTIONS in rawData)) {
|
||
this._parseActionData(rawData, slot.actions, null, null);
|
||
}
|
||
return slot;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseSkin = function (rawData) {
|
||
var skin = dragonBones.BaseObject.borrowObject(dragonBones.SkinData);
|
||
skin.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, ObjectDataParser.DEFAULT_NAME);
|
||
if (!skin.name) {
|
||
skin.name = ObjectDataParser.DEFAULT_NAME;
|
||
}
|
||
if (ObjectDataParser.SLOT in rawData) {
|
||
this._skin = skin;
|
||
var slots = rawData[ObjectDataParser.SLOT];
|
||
var zOrder = 0;
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
if (this._isOldData) {
|
||
this._armature.addSlot(this._parseSlot(slots[i], zOrder++));
|
||
}
|
||
skin.addSlot(this._parseSkinSlotData(slots[i]));
|
||
}
|
||
this._skin = null;
|
||
}
|
||
return skin;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseSkinSlotData = function (rawData) {
|
||
var skinSlotData = dragonBones.BaseObject.borrowObject(dragonBones.SkinSlotData);
|
||
skinSlotData.slot = this._armature.getSlot(ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null));
|
||
if (ObjectDataParser.DISPLAY in rawData) {
|
||
var rawDisplays = rawData[ObjectDataParser.DISPLAY];
|
||
this._skinSlotData = skinSlotData;
|
||
for (var i = 0, l = rawDisplays.length; i < l; ++i) {
|
||
skinSlotData.displays.push(this._parseDisplay(rawDisplays[i]));
|
||
}
|
||
this._skinSlotData = null;
|
||
}
|
||
return skinSlotData;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseDisplay = function (rawData) {
|
||
var display = dragonBones.BaseObject.borrowObject(dragonBones.DisplayData);
|
||
display.inheritAnimation = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_ANIMATION, true);
|
||
display.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
display.path = ObjectDataParser._getString(rawData, ObjectDataParser.PATH, display.name);
|
||
if (ObjectDataParser.TYPE in rawData && typeof rawData[ObjectDataParser.TYPE] === "string") {
|
||
display.type = ObjectDataParser._getDisplayType(rawData[ObjectDataParser.TYPE]);
|
||
}
|
||
else {
|
||
display.type = ObjectDataParser._getNumber(rawData, ObjectDataParser.TYPE, 0 /* Image */);
|
||
}
|
||
display.isRelativePivot = true;
|
||
if (ObjectDataParser.PIVOT in rawData) {
|
||
var pivotObject = rawData[ObjectDataParser.PIVOT];
|
||
display.pivot.x = ObjectDataParser._getNumber(pivotObject, ObjectDataParser.X, 0);
|
||
display.pivot.y = ObjectDataParser._getNumber(pivotObject, ObjectDataParser.Y, 0);
|
||
}
|
||
else if (this._isOldData) {
|
||
var transformObject = rawData[ObjectDataParser.TRANSFORM];
|
||
display.isRelativePivot = false;
|
||
display.pivot.x = ObjectDataParser._getNumber(transformObject, ObjectDataParser.PIVOT_X, 0) * this._armature.scale;
|
||
display.pivot.y = ObjectDataParser._getNumber(transformObject, ObjectDataParser.PIVOT_Y, 0) * this._armature.scale;
|
||
}
|
||
else {
|
||
display.pivot.x = 0.5;
|
||
display.pivot.y = 0.5;
|
||
}
|
||
if (ObjectDataParser.TRANSFORM in rawData) {
|
||
this._parseTransform(rawData[ObjectDataParser.TRANSFORM], display.transform);
|
||
}
|
||
switch (display.type) {
|
||
case 0 /* Image */:
|
||
break;
|
||
case 1 /* Armature */:
|
||
break;
|
||
case 2 /* Mesh */:
|
||
display.share = ObjectDataParser._getString(rawData, ObjectDataParser.SHARE, null);
|
||
if (!display.share) {
|
||
display.inheritAnimation = ObjectDataParser._getBoolean(rawData, ObjectDataParser.INHERIT_FFD, true);
|
||
display.mesh = this._parseMesh(rawData);
|
||
this._skinSlotData.addMesh(display.mesh);
|
||
}
|
||
break;
|
||
case 3 /* BoundingBox */:
|
||
display.boundingBox = this._parseBoundingBox(rawData);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return display;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseMesh = function (rawData) {
|
||
var mesh = dragonBones.BaseObject.borrowObject(dragonBones.MeshData);
|
||
var rawVertices = rawData[ObjectDataParser.VERTICES];
|
||
var rawUVs = rawData[ObjectDataParser.UVS];
|
||
var rawTriangles = rawData[ObjectDataParser.TRIANGLES];
|
||
var numVertices = Math.floor(rawVertices.length / 2); // uint
|
||
var numTriangles = Math.floor(rawTriangles.length / 3); // uint
|
||
var inverseBindPose = new Array(this._armature.sortedBones.length);
|
||
mesh.skinned = ObjectDataParser.WEIGHTS in rawData && rawData[ObjectDataParser.WEIGHTS].length > 0;
|
||
mesh.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
mesh.uvs.length = numVertices * 2;
|
||
mesh.vertices.length = numVertices * 2;
|
||
mesh.vertexIndices.length = numTriangles * 3;
|
||
if (mesh.skinned) {
|
||
mesh.boneIndices.length = numVertices;
|
||
mesh.weights.length = numVertices;
|
||
mesh.boneVertices.length = numVertices;
|
||
if (ObjectDataParser.SLOT_POSE in rawData) {
|
||
var rawSlotPose = rawData[ObjectDataParser.SLOT_POSE];
|
||
mesh.slotPose.a = rawSlotPose[0];
|
||
mesh.slotPose.b = rawSlotPose[1];
|
||
mesh.slotPose.c = rawSlotPose[2];
|
||
mesh.slotPose.d = rawSlotPose[3];
|
||
mesh.slotPose.tx = rawSlotPose[4] * this._armature.scale;
|
||
mesh.slotPose.ty = rawSlotPose[5] * this._armature.scale;
|
||
}
|
||
if (ObjectDataParser.BONE_POSE in rawData) {
|
||
var rawBonePose = rawData[ObjectDataParser.BONE_POSE];
|
||
for (var i = 0, l = rawBonePose.length; i < l; i += 7) {
|
||
var rawBoneIndex = rawBonePose[i]; // uint
|
||
var boneMatrix = inverseBindPose[rawBoneIndex] = new dragonBones.Matrix();
|
||
boneMatrix.a = rawBonePose[i + 1];
|
||
boneMatrix.b = rawBonePose[i + 2];
|
||
boneMatrix.c = rawBonePose[i + 3];
|
||
boneMatrix.d = rawBonePose[i + 4];
|
||
boneMatrix.tx = rawBonePose[i + 5] * this._armature.scale;
|
||
boneMatrix.ty = rawBonePose[i + 6] * this._armature.scale;
|
||
boneMatrix.invert();
|
||
}
|
||
}
|
||
}
|
||
for (var i = 0, iW = 0, l = rawVertices.length; i < l; i += 2) {
|
||
var iN = i + 1;
|
||
var vertexIndex = i / 2;
|
||
var x = mesh.vertices[i] = rawVertices[i] * this._armature.scale;
|
||
var y = mesh.vertices[iN] = rawVertices[iN] * this._armature.scale;
|
||
mesh.uvs[i] = rawUVs[i];
|
||
mesh.uvs[iN] = rawUVs[iN];
|
||
if (mesh.skinned) {
|
||
var rawWeights = rawData[ObjectDataParser.WEIGHTS];
|
||
var numBones = rawWeights[iW]; // uint
|
||
var indices = mesh.boneIndices[vertexIndex] = new Array(numBones);
|
||
var weights = mesh.weights[vertexIndex] = new Array(numBones);
|
||
var boneVertices = mesh.boneVertices[vertexIndex] = new Array(numBones * 2);
|
||
mesh.slotPose.transformPoint(x, y, this._helpPoint);
|
||
x = mesh.vertices[i] = this._helpPoint.x;
|
||
y = mesh.vertices[iN] = this._helpPoint.y;
|
||
for (var iB = 0; iB < numBones; ++iB) {
|
||
var iI = iW + 1 + iB * 2;
|
||
var rawBoneIndex = rawWeights[iI]; // uint
|
||
var boneData = this._rawBones[rawBoneIndex];
|
||
var boneIndex = mesh.bones.indexOf(boneData);
|
||
if (boneIndex < 0) {
|
||
boneIndex = mesh.bones.length;
|
||
mesh.bones[boneIndex] = boneData;
|
||
mesh.inverseBindPose[boneIndex] = inverseBindPose[rawBoneIndex];
|
||
}
|
||
mesh.inverseBindPose[boneIndex].transformPoint(x, y, this._helpPoint);
|
||
indices[iB] = boneIndex;
|
||
weights[iB] = rawWeights[iI + 1];
|
||
boneVertices[iB * 2] = this._helpPoint.x;
|
||
boneVertices[iB * 2 + 1] = this._helpPoint.y;
|
||
}
|
||
iW += numBones * 2 + 1;
|
||
}
|
||
}
|
||
for (var i = 0, l = rawTriangles.length; i < l; ++i) {
|
||
mesh.vertexIndices[i] = rawTriangles[i];
|
||
}
|
||
return mesh;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseBoundingBox = function (rawData) {
|
||
var boundingBox = dragonBones.BaseObject.borrowObject(dragonBones.BoundingBoxData);
|
||
if (ObjectDataParser.SUB_TYPE in rawData && typeof rawData[ObjectDataParser.SUB_TYPE] === "string") {
|
||
boundingBox.type = ObjectDataParser._getBoundingBoxType(rawData[ObjectDataParser.SUB_TYPE]);
|
||
}
|
||
else {
|
||
boundingBox.type = ObjectDataParser._getNumber(rawData, ObjectDataParser.SUB_TYPE, 0 /* Rectangle */);
|
||
}
|
||
boundingBox.color = ObjectDataParser._getNumber(rawData, ObjectDataParser.COLOR, 0x000000);
|
||
switch (boundingBox.type) {
|
||
case 0 /* Rectangle */:
|
||
case 1 /* Ellipse */:
|
||
boundingBox.width = ObjectDataParser._getNumber(rawData, ObjectDataParser.WIDTH, 0.0);
|
||
boundingBox.height = ObjectDataParser._getNumber(rawData, ObjectDataParser.HEIGHT, 0.0);
|
||
break;
|
||
case 2 /* Polygon */:
|
||
if (ObjectDataParser.VERTICES in rawData) {
|
||
var rawVertices = rawData[ObjectDataParser.VERTICES];
|
||
boundingBox.vertices.length = rawVertices.length;
|
||
for (var i = 0, l = boundingBox.vertices.length; i < l; i += 2) {
|
||
var iN = i + 1;
|
||
var x = rawVertices[i];
|
||
var y = rawVertices[iN];
|
||
boundingBox.vertices[i] = x;
|
||
boundingBox.vertices[iN] = y;
|
||
// AABB.
|
||
if (i === 0) {
|
||
boundingBox.x = x;
|
||
boundingBox.y = y;
|
||
boundingBox.width = x;
|
||
boundingBox.height = y;
|
||
}
|
||
else {
|
||
if (x < boundingBox.x) {
|
||
boundingBox.x = x;
|
||
}
|
||
else if (x > boundingBox.width) {
|
||
boundingBox.width = x;
|
||
}
|
||
if (y < boundingBox.y) {
|
||
boundingBox.y = y;
|
||
}
|
||
else if (y > boundingBox.height) {
|
||
boundingBox.height = y;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
return boundingBox;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseAnimation = function (rawData) {
|
||
var animation = dragonBones.BaseObject.borrowObject(dragonBones.AnimationData);
|
||
animation.frameCount = Math.max(ObjectDataParser._getNumber(rawData, ObjectDataParser.DURATION, 1), 1);
|
||
animation.playTimes = ObjectDataParser._getNumber(rawData, ObjectDataParser.PLAY_TIMES, 1);
|
||
animation.duration = animation.frameCount / this._armature.frameRate;
|
||
animation.fadeInTime = ObjectDataParser._getNumber(rawData, ObjectDataParser.FADE_IN_TIME, 0);
|
||
animation.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, ObjectDataParser.DEFAULT_NAME);
|
||
if (!animation.name) {
|
||
animation.name = ObjectDataParser.DEFAULT_NAME;
|
||
}
|
||
this._animation = animation;
|
||
this._parseTimeline(rawData, animation, this._parseAnimationFrame);
|
||
if (ObjectDataParser.Z_ORDER in rawData) {
|
||
animation.zOrderTimeline = dragonBones.BaseObject.borrowObject(dragonBones.ZOrderTimelineData);
|
||
this._parseTimeline(rawData[ObjectDataParser.Z_ORDER], animation.zOrderTimeline, this._parseZOrderFrame);
|
||
}
|
||
if (ObjectDataParser.BONE in rawData) {
|
||
var boneTimelines = rawData[ObjectDataParser.BONE];
|
||
for (var i = 0, l = boneTimelines.length; i < l; ++i) {
|
||
animation.addBoneTimeline(this._parseBoneTimeline(boneTimelines[i]));
|
||
}
|
||
}
|
||
if (ObjectDataParser.SLOT in rawData) {
|
||
var slotTimelines = rawData[ObjectDataParser.SLOT];
|
||
for (var i = 0, l = slotTimelines.length; i < l; ++i) {
|
||
animation.addSlotTimeline(this._parseSlotTimeline(slotTimelines[i]));
|
||
}
|
||
}
|
||
if (ObjectDataParser.FFD in rawData) {
|
||
var ffdTimelines = rawData[ObjectDataParser.FFD];
|
||
for (var i = 0, l = ffdTimelines.length; i < l; ++i) {
|
||
animation.addFFDTimeline(this._parseFFDTimeline(ffdTimelines[i]));
|
||
}
|
||
}
|
||
if (this._isOldData) {
|
||
this._isAutoTween = ObjectDataParser._getBoolean(rawData, ObjectDataParser.AUTO_TWEEN, true);
|
||
this._animationTweenEasing = ObjectDataParser._getNumber(rawData, ObjectDataParser.TWEEN_EASING, 0) || 0;
|
||
animation.playTimes = ObjectDataParser._getNumber(rawData, ObjectDataParser.LOOP, 1);
|
||
if (ObjectDataParser.TIMELINE in rawData) {
|
||
var timelineObjects = rawData[ObjectDataParser.TIMELINE];
|
||
for (var i = 0, l = timelineObjects.length; i < l; ++i) {
|
||
var timelineObject = timelineObjects[i];
|
||
animation.addBoneTimeline(this._parseBoneTimeline(timelineObject));
|
||
animation.addSlotTimeline(this._parseSlotTimeline(timelineObject));
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
this._isAutoTween = false;
|
||
this._animationTweenEasing = 0;
|
||
}
|
||
for (var i in this._armature.bones) {
|
||
var bone = this._armature.bones[i];
|
||
if (!animation.getBoneTimeline(bone.name)) {
|
||
var boneTimeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneTimelineData);
|
||
var boneFrame = dragonBones.BaseObject.borrowObject(dragonBones.BoneFrameData);
|
||
boneTimeline.bone = bone;
|
||
boneTimeline.frames[0] = boneFrame;
|
||
animation.addBoneTimeline(boneTimeline);
|
||
}
|
||
}
|
||
for (var i in this._armature.slots) {
|
||
var slot = this._armature.slots[i];
|
||
if (!animation.getSlotTimeline(slot.name)) {
|
||
var slotTimeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotTimelineData);
|
||
var slotFrame = dragonBones.BaseObject.borrowObject(dragonBones.SlotFrameData);
|
||
slotTimeline.slot = slot;
|
||
slotFrame.displayIndex = slot.displayIndex;
|
||
if (slot.color === dragonBones.SlotData.DEFAULT_COLOR) {
|
||
slotFrame.color = dragonBones.SlotFrameData.DEFAULT_COLOR;
|
||
}
|
||
else {
|
||
slotFrame.color = dragonBones.SlotFrameData.generateColor();
|
||
slotFrame.color.copyFrom(slot.color);
|
||
}
|
||
slotTimeline.frames[0] = slotFrame;
|
||
animation.addSlotTimeline(slotTimeline);
|
||
if (this._isOldData) {
|
||
slotFrame.displayIndex = -1;
|
||
}
|
||
}
|
||
}
|
||
this._animation = null;
|
||
return animation;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseBoneTimeline = function (rawData) {
|
||
var timeline = dragonBones.BaseObject.borrowObject(dragonBones.BoneTimelineData);
|
||
timeline.bone = this._armature.getBone(ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null));
|
||
this._parseTimeline(rawData, timeline, this._parseBoneFrame);
|
||
var originalTransform = timeline.originalTransform;
|
||
var prevFrame = null;
|
||
for (var i = 0, l = timeline.frames.length; i < l; ++i) {
|
||
var frame = timeline.frames[i];
|
||
if (!prevFrame) {
|
||
originalTransform.copyFrom(frame.transform);
|
||
frame.transform.identity();
|
||
if (originalTransform.scaleX === 0) {
|
||
originalTransform.scaleX = 0.001;
|
||
//frame.transform.scaleX = 0;
|
||
}
|
||
if (originalTransform.scaleY === 0) {
|
||
originalTransform.scaleY = 0.001;
|
||
//frame.transform.scaleY = 0;
|
||
}
|
||
}
|
||
else if (prevFrame !== frame) {
|
||
frame.transform.minus(originalTransform);
|
||
}
|
||
prevFrame = frame;
|
||
}
|
||
if (this._isOldData && (ObjectDataParser.PIVOT_X in rawData || ObjectDataParser.PIVOT_Y in rawData)) {
|
||
this._timelinePivot.x = ObjectDataParser._getNumber(rawData, ObjectDataParser.PIVOT_X, 0.0) * this._armature.scale;
|
||
this._timelinePivot.y = ObjectDataParser._getNumber(rawData, ObjectDataParser.PIVOT_Y, 0.0) * this._armature.scale;
|
||
}
|
||
else {
|
||
this._timelinePivot.clear();
|
||
}
|
||
return timeline;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseSlotTimeline = function (rawData) {
|
||
var timeline = dragonBones.BaseObject.borrowObject(dragonBones.SlotTimelineData);
|
||
timeline.slot = this._armature.getSlot(ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null));
|
||
this._parseTimeline(rawData, timeline, this._parseSlotFrame);
|
||
return timeline;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseFFDTimeline = function (rawData) {
|
||
var timeline = dragonBones.BaseObject.borrowObject(dragonBones.FFDTimelineData);
|
||
timeline.skin = this._armature.getSkin(ObjectDataParser._getString(rawData, ObjectDataParser.SKIN, null));
|
||
timeline.slot = timeline.skin.getSlot(ObjectDataParser._getString(rawData, ObjectDataParser.SLOT, null));
|
||
var meshName = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
for (var i = 0, l = timeline.slot.displays.length; i < l; ++i) {
|
||
var display = timeline.slot.displays[i];
|
||
if (display.mesh && display.name === meshName) {
|
||
timeline.display = display;
|
||
break;
|
||
}
|
||
}
|
||
this._parseTimeline(rawData, timeline, this._parseFFDFrame);
|
||
return timeline;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseAnimationFrame = function (rawData, frameStart, frameCount) {
|
||
var frame = dragonBones.BaseObject.borrowObject(dragonBones.AnimationFrameData);
|
||
this._parseFrame(rawData, frame, frameStart, frameCount);
|
||
if ((ObjectDataParser.ACTION in rawData) || (ObjectDataParser.ACTIONS in rawData)) {
|
||
this._parseActionData(rawData, frame.actions, null, null);
|
||
}
|
||
if ((ObjectDataParser.EVENTS in rawData) || (ObjectDataParser.EVENT in rawData) || (ObjectDataParser.SOUND in rawData)) {
|
||
this._parseEventData(rawData, frame.events, null, null);
|
||
}
|
||
return frame;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseZOrderFrame = function (rawData, frameStart, frameCount) {
|
||
var frame = dragonBones.BaseObject.borrowObject(dragonBones.ZOrderFrameData);
|
||
this._parseFrame(rawData, frame, frameStart, frameCount);
|
||
var rawZOrder = rawData[ObjectDataParser.Z_ORDER];
|
||
if (rawZOrder && rawZOrder.length > 0) {
|
||
var slotCount = this._armature.sortedSlots.length;
|
||
var unchanged = new Array(slotCount - rawZOrder.length / 2);
|
||
frame.zOrder.length = slotCount;
|
||
for (var i_3 = 0; i_3 < slotCount; ++i_3) {
|
||
frame.zOrder[i_3] = -1;
|
||
}
|
||
var originalIndex = 0;
|
||
var unchangedIndex = 0;
|
||
for (var i_4 = 0, l = rawZOrder.length; i_4 < l; i_4 += 2) {
|
||
var slotIndex = rawZOrder[i_4];
|
||
var offset = rawZOrder[i_4 + 1];
|
||
while (originalIndex !== slotIndex) {
|
||
unchanged[unchangedIndex++] = originalIndex++;
|
||
}
|
||
frame.zOrder[originalIndex + offset] = originalIndex++;
|
||
}
|
||
while (originalIndex < slotCount) {
|
||
unchanged[unchangedIndex++] = originalIndex++;
|
||
}
|
||
var i = slotCount;
|
||
while (i--) {
|
||
if (frame.zOrder[i] === -1) {
|
||
frame.zOrder[i] = unchanged[--unchangedIndex];
|
||
}
|
||
}
|
||
}
|
||
return frame;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseBoneFrame = function (rawData, frameStart, frameCount) {
|
||
var frame = dragonBones.BaseObject.borrowObject(dragonBones.BoneFrameData);
|
||
frame.tweenRotate = ObjectDataParser._getNumber(rawData, ObjectDataParser.TWEEN_ROTATE, 0.0);
|
||
frame.tweenScale = ObjectDataParser._getBoolean(rawData, ObjectDataParser.TWEEN_SCALE, true);
|
||
this._parseTweenFrame(rawData, frame, frameStart, frameCount);
|
||
if (ObjectDataParser.TRANSFORM in rawData) {
|
||
var transformObject = rawData[ObjectDataParser.TRANSFORM];
|
||
this._parseTransform(transformObject, frame.transform);
|
||
if (this._isOldData) {
|
||
this._helpPoint.x = this._timelinePivot.x + ObjectDataParser._getNumber(transformObject, ObjectDataParser.PIVOT_X, 0.0) * this._armature.scale;
|
||
this._helpPoint.y = this._timelinePivot.y + ObjectDataParser._getNumber(transformObject, ObjectDataParser.PIVOT_Y, 0.0) * this._armature.scale;
|
||
frame.transform.toMatrix(this._helpMatrix);
|
||
this._helpMatrix.transformPoint(this._helpPoint.x, this._helpPoint.y, this._helpPoint, true);
|
||
frame.transform.x += this._helpPoint.x;
|
||
frame.transform.y += this._helpPoint.y;
|
||
}
|
||
}
|
||
var bone = this._timeline.bone;
|
||
var actions = new Array();
|
||
var events = new Array();
|
||
if ((ObjectDataParser.ACTION in rawData) || (ObjectDataParser.ACTIONS in rawData)) {
|
||
var slot = this._armature.getSlot(bone.name);
|
||
this._parseActionData(rawData, actions, bone, slot);
|
||
}
|
||
if ((ObjectDataParser.EVENT in rawData) || (ObjectDataParser.SOUND in rawData)) {
|
||
this._parseEventData(rawData, events, bone, null);
|
||
}
|
||
if (actions.length > 0 || events.length > 0) {
|
||
this._mergeFrameToAnimationTimeline(frame.position, actions, events); // Merge actions and events to animation timeline.
|
||
}
|
||
return frame;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseSlotFrame = function (rawData, frameStart, frameCount) {
|
||
var frame = dragonBones.BaseObject.borrowObject(dragonBones.SlotFrameData);
|
||
frame.displayIndex = ObjectDataParser._getNumber(rawData, ObjectDataParser.DISPLAY_INDEX, 0);
|
||
this._parseTweenFrame(rawData, frame, frameStart, frameCount);
|
||
if ((ObjectDataParser.COLOR in rawData) || (ObjectDataParser.COLOR_TRANSFORM in rawData)) {
|
||
frame.color = dragonBones.SlotFrameData.generateColor();
|
||
this._parseColorTransform(rawData[ObjectDataParser.COLOR] || rawData[ObjectDataParser.COLOR_TRANSFORM], frame.color);
|
||
}
|
||
else {
|
||
frame.color = dragonBones.SlotFrameData.DEFAULT_COLOR;
|
||
}
|
||
if (this._isOldData) {
|
||
if (ObjectDataParser._getBoolean(rawData, ObjectDataParser.HIDE, false)) {
|
||
frame.displayIndex = -1;
|
||
}
|
||
}
|
||
else if ((ObjectDataParser.ACTION in rawData) || (ObjectDataParser.ACTIONS in rawData)) {
|
||
var slot = this._timeline.slot;
|
||
var actions = new Array();
|
||
this._parseActionData(rawData, actions, slot.parent, slot);
|
||
this._mergeFrameToAnimationTimeline(frame.position, actions, null); // Merge actions and events to animation timeline.
|
||
}
|
||
return frame;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseFFDFrame = function (rawData, frameStart, frameCount) {
|
||
var ffdTimeline = this._timeline;
|
||
var mesh = ffdTimeline.display.mesh;
|
||
var frame = dragonBones.BaseObject.borrowObject(dragonBones.ExtensionFrameData);
|
||
this._parseTweenFrame(rawData, frame, frameStart, frameCount);
|
||
var rawVertices = rawData[ObjectDataParser.VERTICES];
|
||
var offset = ObjectDataParser._getNumber(rawData, ObjectDataParser.OFFSET, 0); // uint
|
||
var x = 0.0;
|
||
var y = 0.0;
|
||
for (var i = 0, l = mesh.vertices.length; i < l; i += 2) {
|
||
if (!rawVertices) {
|
||
x = 0.0;
|
||
y = 0.0;
|
||
}
|
||
else {
|
||
if (i < offset || i - offset >= rawVertices.length) {
|
||
x = 0.0;
|
||
}
|
||
else {
|
||
x = rawVertices[i - offset] * this._armature.scale;
|
||
}
|
||
if (i + 1 < offset || i + 1 - offset >= rawVertices.length) {
|
||
y = 0.0;
|
||
}
|
||
else {
|
||
y = rawVertices[i + 1 - offset] * this._armature.scale;
|
||
}
|
||
}
|
||
if (mesh.skinned) {
|
||
mesh.slotPose.transformPoint(x, y, this._helpPoint, true);
|
||
x = this._helpPoint.x;
|
||
y = this._helpPoint.y;
|
||
var boneIndices = mesh.boneIndices[i / 2];
|
||
for (var iB = 0, lB = boneIndices.length; iB < lB; ++iB) {
|
||
var boneIndex = boneIndices[iB];
|
||
mesh.inverseBindPose[boneIndex].transformPoint(x, y, this._helpPoint, true);
|
||
frame.tweens.push(this._helpPoint.x, this._helpPoint.y);
|
||
}
|
||
}
|
||
else {
|
||
frame.tweens.push(x, y);
|
||
}
|
||
}
|
||
return frame;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseTweenFrame = function (rawData, frame, frameStart, frameCount) {
|
||
this._parseFrame(rawData, frame, frameStart, frameCount);
|
||
if (frame.duration > 0.0) {
|
||
if (ObjectDataParser.TWEEN_EASING in rawData) {
|
||
frame.tweenEasing = ObjectDataParser._getNumber(rawData, ObjectDataParser.TWEEN_EASING, dragonBones.DragonBones.NO_TWEEN);
|
||
}
|
||
else if (this._isOldData) {
|
||
frame.tweenEasing = this._isAutoTween ? this._animationTweenEasing : dragonBones.DragonBones.NO_TWEEN;
|
||
}
|
||
else {
|
||
frame.tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
}
|
||
if (this._isOldData && this._animation.scale === 1 && this._timeline.scale === 1 && frame.duration * this._armature.frameRate < 2) {
|
||
frame.tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
}
|
||
if (frameCount > 0 && (ObjectDataParser.CURVE in rawData)) {
|
||
frame.curve = new Array(frameCount * 2 - 1);
|
||
dragonBones.TweenFrameData.samplingEasingCurve(rawData[ObjectDataParser.CURVE], frame.curve);
|
||
}
|
||
}
|
||
else {
|
||
frame.tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
frame.curve = null;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseFrame = function (rawData, frame, frameStart, frameCount) {
|
||
frame.position = frameStart / this._armature.frameRate;
|
||
frame.duration = frameCount / this._armature.frameRate;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseTimeline = function (rawData, timeline, frameParser) {
|
||
timeline.scale = ObjectDataParser._getNumber(rawData, ObjectDataParser.SCALE, 1);
|
||
timeline.offset = ObjectDataParser._getNumber(rawData, ObjectDataParser.OFFSET, 0);
|
||
this._timeline = timeline;
|
||
if (ObjectDataParser.FRAME in rawData) {
|
||
var rawFrames = rawData[ObjectDataParser.FRAME];
|
||
if (rawFrames.length === 1) {
|
||
timeline.frames.length = 1;
|
||
timeline.frames[0] = frameParser.call(this, rawFrames[0], 0, ObjectDataParser._getNumber(rawFrames[0], ObjectDataParser.DURATION, 1));
|
||
}
|
||
else if (rawFrames.length > 1) {
|
||
timeline.frames.length = this._animation.frameCount + 1;
|
||
var frameStart = 0;
|
||
var frameCount = 0;
|
||
var frame = null;
|
||
var prevFrame = null;
|
||
for (var i = 0, iW = 0, l = timeline.frames.length; i < l; ++i) {
|
||
if (frameStart + frameCount <= i && iW < rawFrames.length) {
|
||
var rawFrame = rawFrames[iW++];
|
||
frameStart = i;
|
||
frameCount = ObjectDataParser._getNumber(rawFrame, ObjectDataParser.DURATION, 1);
|
||
frame = frameParser.call(this, rawFrame, frameStart, frameCount);
|
||
if (prevFrame) {
|
||
prevFrame.next = frame;
|
||
frame.prev = prevFrame;
|
||
if (this._isOldData) {
|
||
if (prevFrame instanceof dragonBones.TweenFrameData && ObjectDataParser._getNumber(rawFrame, ObjectDataParser.DISPLAY_INDEX, 0) === -1) {
|
||
prevFrame.tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
}
|
||
}
|
||
}
|
||
prevFrame = frame;
|
||
}
|
||
timeline.frames[i] = frame;
|
||
}
|
||
frame.duration = this._animation.duration - frame.position; // Modify last frame duration.
|
||
frame = timeline.frames[0];
|
||
prevFrame.next = frame;
|
||
frame.prev = prevFrame;
|
||
if (this._isOldData) {
|
||
if (prevFrame instanceof dragonBones.TweenFrameData && ObjectDataParser._getNumber(rawFrames[0], ObjectDataParser.DISPLAY_INDEX, 0) === -1) {
|
||
prevFrame.tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
this._timeline = null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseActionData = function (rawData, actions, bone, slot) {
|
||
var rawActions = rawData[ObjectDataParser.ACTION] || rawData[ObjectDataParser.ACTIONS] || rawData[ObjectDataParser.DEFAULT_ACTIONS];
|
||
if (typeof rawActions === "string") {
|
||
var actionData = dragonBones.BaseObject.borrowObject(dragonBones.ActionData);
|
||
actionData.type = 0 /* Play */;
|
||
actionData.bone = bone;
|
||
actionData.slot = slot;
|
||
actionData.animationConfig = dragonBones.BaseObject.borrowObject(dragonBones.AnimationConfig);
|
||
actionData.animationConfig.animation = rawActions;
|
||
actions.push(actionData);
|
||
}
|
||
else if (rawActions instanceof Array) {
|
||
for (var i = 0, l = rawActions.length; i < l; ++i) {
|
||
var actionObject = rawActions[i];
|
||
var isArray = actionObject instanceof Array;
|
||
var actionData = dragonBones.BaseObject.borrowObject(dragonBones.ActionData);
|
||
var animationName = isArray ? actionObject[1] : ObjectDataParser._getString(actionObject, "gotoAndPlay", null);
|
||
if (isArray) {
|
||
var actionType = actionObject[0];
|
||
if (typeof actionType === "string") {
|
||
actionData.type = ObjectDataParser._getActionType(actionType);
|
||
}
|
||
else {
|
||
actionData.type = actionType;
|
||
}
|
||
}
|
||
else {
|
||
actionData.type = 0 /* Play */;
|
||
}
|
||
switch (actionData.type) {
|
||
case 0 /* Play */:
|
||
actionData.animationConfig = dragonBones.BaseObject.borrowObject(dragonBones.AnimationConfig);
|
||
actionData.animationConfig.animation = animationName;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
actionData.bone = bone;
|
||
actionData.slot = slot;
|
||
actions.push(actionData);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseEventData = function (rawData, events, bone, slot) {
|
||
if (ObjectDataParser.SOUND in rawData) {
|
||
var soundEventData = dragonBones.BaseObject.borrowObject(dragonBones.EventData);
|
||
soundEventData.type = 11 /* Sound */;
|
||
soundEventData.name = ObjectDataParser._getString(rawData, ObjectDataParser.SOUND, null);
|
||
soundEventData.bone = bone;
|
||
soundEventData.slot = slot;
|
||
events.push(soundEventData);
|
||
}
|
||
if (ObjectDataParser.EVENT in rawData) {
|
||
var eventData = dragonBones.BaseObject.borrowObject(dragonBones.EventData);
|
||
eventData.type = 10 /* Frame */;
|
||
eventData.name = ObjectDataParser._getString(rawData, ObjectDataParser.EVENT, null);
|
||
eventData.bone = bone;
|
||
eventData.slot = slot;
|
||
events.push(eventData);
|
||
}
|
||
if (ObjectDataParser.EVENTS in rawData) {
|
||
var rawEvents = rawData[ObjectDataParser.EVENTS];
|
||
for (var i = 0, l = rawEvents.length; i < l; ++i) {
|
||
var rawEvent = rawEvents[i];
|
||
var boneName = ObjectDataParser._getString(rawEvent, ObjectDataParser.BONE, null);
|
||
var slotName = ObjectDataParser._getString(rawEvent, ObjectDataParser.SLOT, null);
|
||
var eventData = dragonBones.BaseObject.borrowObject(dragonBones.EventData);
|
||
eventData.type = 10 /* Frame */;
|
||
eventData.name = ObjectDataParser._getString(rawEvent, ObjectDataParser.NAME, null);
|
||
eventData.bone = this._armature.getBone(boneName);
|
||
eventData.slot = this._armature.getSlot(slotName);
|
||
if (ObjectDataParser.INTS in rawEvent) {
|
||
if (!eventData.data) {
|
||
eventData.data = dragonBones.BaseObject.borrowObject(dragonBones.CustomData);
|
||
}
|
||
var rawInts = rawEvent[ObjectDataParser.INTS];
|
||
for (var i_5 = 0, l_2 = rawInts.length; i_5 < l_2; ++i_5) {
|
||
eventData.data.ints.push(rawInts[i_5]);
|
||
}
|
||
}
|
||
if (ObjectDataParser.FLOATS in rawEvent) {
|
||
if (!eventData.data) {
|
||
eventData.data = dragonBones.BaseObject.borrowObject(dragonBones.CustomData);
|
||
}
|
||
var rawFloats = rawEvent[ObjectDataParser.FLOATS];
|
||
for (var i_6 = 0, l_3 = rawFloats.length; i_6 < l_3; ++i_6) {
|
||
eventData.data.floats.push(rawFloats[i_6]);
|
||
}
|
||
}
|
||
if (ObjectDataParser.STRINGS in rawEvent) {
|
||
if (!eventData.data) {
|
||
eventData.data = dragonBones.BaseObject.borrowObject(dragonBones.CustomData);
|
||
}
|
||
var rawStrings = rawEvent[ObjectDataParser.STRINGS];
|
||
for (var i_7 = 0, l_4 = rawStrings.length; i_7 < l_4; ++i_7) {
|
||
eventData.data.strings.push(rawStrings[i_7]);
|
||
}
|
||
}
|
||
events.push(eventData);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseTransform = function (rawData, transform) {
|
||
transform.x = ObjectDataParser._getNumber(rawData, ObjectDataParser.X, 0.0) * this._armature.scale;
|
||
transform.y = ObjectDataParser._getNumber(rawData, ObjectDataParser.Y, 0.0) * this._armature.scale;
|
||
transform.skewX = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, ObjectDataParser.SKEW_X, 0.0) * dragonBones.DragonBones.ANGLE_TO_RADIAN);
|
||
transform.skewY = dragonBones.Transform.normalizeRadian(ObjectDataParser._getNumber(rawData, ObjectDataParser.SKEW_Y, 0.0) * dragonBones.DragonBones.ANGLE_TO_RADIAN);
|
||
transform.scaleX = ObjectDataParser._getNumber(rawData, ObjectDataParser.SCALE_X, 1.0);
|
||
transform.scaleY = ObjectDataParser._getNumber(rawData, ObjectDataParser.SCALE_Y, 1.0);
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser.prototype._parseColorTransform = function (rawData, color) {
|
||
color.alphaMultiplier = ObjectDataParser._getNumber(rawData, ObjectDataParser.ALPHA_MULTIPLIER, 100) * 0.01;
|
||
color.redMultiplier = ObjectDataParser._getNumber(rawData, ObjectDataParser.RED_MULTIPLIER, 100) * 0.01;
|
||
color.greenMultiplier = ObjectDataParser._getNumber(rawData, ObjectDataParser.GREEN_MULTIPLIER, 100) * 0.01;
|
||
color.blueMultiplier = ObjectDataParser._getNumber(rawData, ObjectDataParser.BLUE_MULTIPLIER, 100) * 0.01;
|
||
color.alphaOffset = ObjectDataParser._getNumber(rawData, ObjectDataParser.ALPHA_OFFSET, 0);
|
||
color.redOffset = ObjectDataParser._getNumber(rawData, ObjectDataParser.RED_OFFSET, 0);
|
||
color.greenOffset = ObjectDataParser._getNumber(rawData, ObjectDataParser.GREEN_OFFSET, 0);
|
||
color.blueOffset = ObjectDataParser._getNumber(rawData, ObjectDataParser.BLUE_OFFSET, 0);
|
||
};
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
ObjectDataParser.prototype.parseDragonBonesData = function (rawData, scale) {
|
||
if (scale === void 0) { scale = 1; }
|
||
if (rawData) {
|
||
var version = ObjectDataParser._getString(rawData, ObjectDataParser.VERSION, null);
|
||
var compatibleVersion = ObjectDataParser._getString(rawData, ObjectDataParser.COMPATIBLE_VERSION, null);
|
||
this._isOldData = version === ObjectDataParser.DATA_VERSION_2_3 || version === ObjectDataParser.DATA_VERSION_3_0;
|
||
if (this._isOldData) {
|
||
this._isGlobalTransform = ObjectDataParser._getBoolean(rawData, ObjectDataParser.IS_GLOBAL, true);
|
||
}
|
||
else {
|
||
this._isGlobalTransform = false;
|
||
}
|
||
if (ObjectDataParser.DATA_VERSIONS.indexOf(version) >= 0 ||
|
||
ObjectDataParser.DATA_VERSIONS.indexOf(compatibleVersion) >= 0) {
|
||
var data = dragonBones.BaseObject.borrowObject(dragonBones.DragonBonesData);
|
||
data.version = version;
|
||
data.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
data.frameRate = ObjectDataParser._getNumber(rawData, ObjectDataParser.FRAME_RATE, 24);
|
||
if (data.frameRate === 0) {
|
||
data.frameRate = 24;
|
||
}
|
||
if (ObjectDataParser.ARMATURE in rawData) {
|
||
this._data = data;
|
||
var rawArmatures = rawData[ObjectDataParser.ARMATURE];
|
||
for (var i = 0, l = rawArmatures.length; i < l; ++i) {
|
||
data.addArmature(this._parseArmature(rawArmatures[i], scale));
|
||
}
|
||
this._data = null;
|
||
}
|
||
return data;
|
||
}
|
||
else {
|
||
throw new Error("Nonsupport data version.");
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
// return null;
|
||
};
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
ObjectDataParser.prototype.parseTextureAtlasData = function (rawData, textureAtlasData, scale) {
|
||
if (scale === void 0) { scale = 0.0; }
|
||
if (rawData) {
|
||
textureAtlasData.name = ObjectDataParser._getString(rawData, ObjectDataParser.NAME, null);
|
||
textureAtlasData.imagePath = ObjectDataParser._getString(rawData, ObjectDataParser.IMAGE_PATH, null);
|
||
textureAtlasData.width = ObjectDataParser._getNumber(rawData, ObjectDataParser.WIDTH, 0.0);
|
||
textureAtlasData.height = ObjectDataParser._getNumber(rawData, ObjectDataParser.HEIGHT, 0.0);
|
||
// Texture format.
|
||
if (scale > 0.0) {
|
||
textureAtlasData.scale = scale;
|
||
}
|
||
else {
|
||
scale = textureAtlasData.scale = ObjectDataParser._getNumber(rawData, ObjectDataParser.SCALE, textureAtlasData.scale);
|
||
}
|
||
scale = 1.0 / scale;
|
||
if (ObjectDataParser.SUB_TEXTURE in rawData) {
|
||
var rawTextures = rawData[ObjectDataParser.SUB_TEXTURE];
|
||
for (var i = 0, l = rawTextures.length; i < l; ++i) {
|
||
var rawTexture = rawTextures[i];
|
||
var textureData = textureAtlasData.generateTexture();
|
||
textureData.name = ObjectDataParser._getString(rawTexture, ObjectDataParser.NAME, null);
|
||
textureData.rotated = ObjectDataParser._getBoolean(rawTexture, ObjectDataParser.ROTATED, false);
|
||
textureData.region.x = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.X, 0.0) * scale;
|
||
textureData.region.y = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.Y, 0.0) * scale;
|
||
textureData.region.width = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.WIDTH, 0.0) * scale;
|
||
textureData.region.height = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.HEIGHT, 0.0) * scale;
|
||
var frameWidth = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.FRAME_WIDTH, -1.0);
|
||
var frameHeight = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.FRAME_HEIGHT, -1.0);
|
||
if (frameWidth > 0.0 && frameHeight > 0.0) {
|
||
textureData.frame = dragonBones.TextureData.generateRectangle();
|
||
textureData.frame.x = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.FRAME_X, 0.0) * scale;
|
||
textureData.frame.y = ObjectDataParser._getNumber(rawTexture, ObjectDataParser.FRAME_Y, 0.0) * scale;
|
||
textureData.frame.width = frameWidth * scale;
|
||
textureData.frame.height = frameHeight * scale;
|
||
}
|
||
textureAtlasData.addTexture(textureData);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.BaseFactory#parseDragonBonesData()
|
||
*/
|
||
ObjectDataParser.getInstance = function () {
|
||
if (!ObjectDataParser._instance) {
|
||
ObjectDataParser._instance = new ObjectDataParser();
|
||
}
|
||
return ObjectDataParser._instance;
|
||
};
|
||
return ObjectDataParser;
|
||
}(dragonBones.DataParser));
|
||
/**
|
||
* @private
|
||
*/
|
||
ObjectDataParser._instance = null;
|
||
dragonBones.ObjectDataParser = ObjectDataParser;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 基础变换对象。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
var TransformObject = (function (_super) {
|
||
__extends(TransformObject, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function TransformObject() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @language zh_CN
|
||
* 相对于骨架坐标系的矩阵。
|
||
* @readOnly
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.globalTransformMatrix = new dragonBones.Matrix();
|
||
/**
|
||
* @language zh_CN
|
||
* 相对于骨架坐标系的变换。
|
||
* @see dragonBones.Transform
|
||
* @readOnly
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.global = new dragonBones.Transform();
|
||
/**
|
||
* @language zh_CN
|
||
* 相对于骨架或父骨骼坐标系的偏移变换。
|
||
* @see dragonBones.Transform
|
||
* @version DragonBones 3.0
|
||
*/
|
||
_this.offset = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
TransformObject.prototype._onClear = function () {
|
||
this.name = null;
|
||
this.global.identity();
|
||
this.offset.identity();
|
||
this.globalTransformMatrix.identity();
|
||
this.origin = null;
|
||
this.userData = null;
|
||
this._armature = null;
|
||
this._parent = null;
|
||
this._globalDirty = false;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
TransformObject.prototype._setArmature = function (value) {
|
||
this._armature = value;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
TransformObject.prototype._setParent = function (value) {
|
||
this._parent = value;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
TransformObject.prototype.updateGlobalTransform = function () {
|
||
if (this._globalDirty) {
|
||
this._globalDirty = false;
|
||
this.global.fromMatrix(this.globalTransformMatrix);
|
||
}
|
||
};
|
||
Object.defineProperty(TransformObject.prototype, "armature", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所属的骨架。
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._armature;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(TransformObject.prototype, "parent", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所属的父骨骼。
|
||
* @see dragonBones.Bone
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._parent;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return TransformObject;
|
||
}(dragonBones.BaseObject));
|
||
/**
|
||
* @private
|
||
*/
|
||
TransformObject._helpPoint = new dragonBones.Point();
|
||
/**
|
||
* @private
|
||
*/
|
||
TransformObject._helpTransform = new dragonBones.Transform();
|
||
/**
|
||
* @private
|
||
*/
|
||
TransformObject._helpMatrix = new dragonBones.Matrix();
|
||
dragonBones.TransformObject = TransformObject;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 骨骼,一个骨架中可以包含多个骨骼,骨骼以树状结构组成骨架。
|
||
* 骨骼在骨骼动画体系中是最重要的逻辑单元之一,负责动画中的平移旋转缩放的实现。
|
||
* @see dragonBones.BoneData
|
||
* @see dragonBones.Armature
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Bone = (function (_super) {
|
||
__extends(Bone, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function Bone() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
_this._animationPose = new dragonBones.Transform();
|
||
_this._bones = [];
|
||
_this._slots = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
Bone.toString = function () {
|
||
return "[class dragonBones.Bone]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Bone.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.ikBendPositive = false;
|
||
this.ikWeight = 0.0;
|
||
this._ikChain = 0;
|
||
this._ikChainIndex = 0;
|
||
this._ik = null;
|
||
this._transformDirty = false;
|
||
this._childrenTransformDirty = false;
|
||
this._blendDirty = false;
|
||
this._visible = true;
|
||
this._cachedFrameIndex = -1;
|
||
this._blendLayer = 0;
|
||
this._blendLeftWeight = 1.0;
|
||
this._blendTotalWeight = 0.0;
|
||
this._animationPose.identity();
|
||
this._bones.length = 0;
|
||
this._slots.length = 0;
|
||
this._boneData = null;
|
||
this._cachedFrameIndices = null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Bone.prototype._updateGlobalTransformMatrix = function (isCache) {
|
||
var flipX = this._armature.flipX;
|
||
var flipY = this._armature.flipY === dragonBones.DragonBones.yDown;
|
||
var dR = 0.0;
|
||
this.global.x = this.origin.x + this.offset.x + this._animationPose.x;
|
||
this.global.y = this.origin.y + this.offset.y + this._animationPose.y;
|
||
this.global.skewX = this.origin.skewX + this.offset.skewX + this._animationPose.skewX;
|
||
this.global.skewY = this.origin.skewY + this.offset.skewY + this._animationPose.skewY;
|
||
this.global.scaleX = this.origin.scaleX * this.offset.scaleX * this._animationPose.scaleX;
|
||
this.global.scaleY = this.origin.scaleY * this.offset.scaleY * this._animationPose.scaleY;
|
||
if (this._parent) {
|
||
var parentMatrix = this._parent.globalTransformMatrix;
|
||
if (this._boneData.inheritScale) {
|
||
if (!this._boneData.inheritRotation) {
|
||
this._parent.updateGlobalTransform();
|
||
dR = this._parent.global.skewY; //
|
||
this.global.skewX -= dR;
|
||
this.global.skewY -= dR;
|
||
}
|
||
this.global.toMatrix(this.globalTransformMatrix);
|
||
this.globalTransformMatrix.concat(parentMatrix);
|
||
if (this._boneData.inheritTranslation) {
|
||
this.global.x = this.globalTransformMatrix.tx;
|
||
this.global.y = this.globalTransformMatrix.ty;
|
||
}
|
||
else {
|
||
this.globalTransformMatrix.tx = this.global.x;
|
||
this.globalTransformMatrix.ty = this.global.y;
|
||
}
|
||
if (isCache) {
|
||
this.global.fromMatrix(this.globalTransformMatrix);
|
||
}
|
||
else {
|
||
this._globalDirty = true;
|
||
}
|
||
}
|
||
else {
|
||
if (this._boneData.inheritTranslation) {
|
||
var x = this.global.x;
|
||
var y = this.global.y;
|
||
this.global.x = parentMatrix.a * x + parentMatrix.c * y + parentMatrix.tx;
|
||
this.global.y = parentMatrix.d * y + parentMatrix.b * x + parentMatrix.ty;
|
||
}
|
||
else {
|
||
if (flipX) {
|
||
this.global.x = -this.global.x;
|
||
}
|
||
if (flipY) {
|
||
this.global.y = -this.global.y;
|
||
}
|
||
}
|
||
if (this._boneData.inheritRotation) {
|
||
this._parent.updateGlobalTransform();
|
||
dR = this._parent.global.skewY;
|
||
if (this._armature._armatureData.isRightTransform && parentMatrix.a * parentMatrix.d - parentMatrix.b * parentMatrix.c < 0.0) {
|
||
dR -= this.global.skewY * 2.0;
|
||
if (this._parent.global.scaleX < 0.0) {
|
||
dR += Math.PI;
|
||
}
|
||
if (flipX != flipY || this._boneData.inheritReflection) {
|
||
this.global.skewX += Math.PI;
|
||
}
|
||
}
|
||
this.global.skewX += dR;
|
||
this.global.skewY += dR;
|
||
}
|
||
else if (flipX || flipY) {
|
||
if (flipX && flipY) {
|
||
dR = Math.PI;
|
||
}
|
||
else {
|
||
dR = -this.global.skewY * 2.0;
|
||
if (flipX) {
|
||
dR += Math.PI;
|
||
}
|
||
this.global.skewX += Math.PI;
|
||
}
|
||
this.global.skewX += dR;
|
||
this.global.skewY += dR;
|
||
}
|
||
this.global.toMatrix(this.globalTransformMatrix);
|
||
}
|
||
}
|
||
else {
|
||
if (flipX || flipY) {
|
||
if (flipX) {
|
||
this.global.x = -this.global.x;
|
||
}
|
||
if (flipY) {
|
||
this.global.y = -this.global.y;
|
||
}
|
||
if (flipX && flipY) {
|
||
dR = Math.PI;
|
||
}
|
||
else {
|
||
dR = -this.global.skewY * 2.0;
|
||
if (flipX) {
|
||
dR += Math.PI;
|
||
}
|
||
this.global.skewX += Math.PI;
|
||
}
|
||
this.global.skewX += dR;
|
||
this.global.skewY += dR;
|
||
}
|
||
this.global.toMatrix(this.globalTransformMatrix);
|
||
}
|
||
//
|
||
if (this._ik && this._ikChainIndex === this._ikChain && this.ikWeight > 0) {
|
||
if (this._boneData.inheritTranslation && this._ikChain > 0 && this._parent) {
|
||
this._computeIKB();
|
||
}
|
||
else {
|
||
this._computeIKA();
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Bone.prototype._computeIKA = function () {
|
||
this.updateGlobalTransform();
|
||
var boneLength = this._boneData.length;
|
||
var ikGlobal = this._ik.global;
|
||
var x = this.globalTransformMatrix.a * boneLength;
|
||
var y = this.globalTransformMatrix.b * boneLength;
|
||
var ikRadian = Math.atan2(ikGlobal.y - this.global.y, ikGlobal.x - this.global.x);
|
||
if (this.global.scaleX < 0.0) {
|
||
ikRadian += Math.PI;
|
||
}
|
||
var dR = (ikRadian - this.global.skewY) * this.ikWeight;
|
||
this.global.skewX += dR;
|
||
this.global.skewY += dR;
|
||
this.global.toMatrix(this.globalTransformMatrix);
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Bone.prototype._computeIKB = function () {
|
||
this._parent.updateGlobalTransform();
|
||
this.updateGlobalTransform();
|
||
var boneLength = this._boneData.length;
|
||
var parentGlobal = this._parent.global;
|
||
var ikGlobal = this._ik.global;
|
||
var x = this.globalTransformMatrix.a * boneLength;
|
||
var y = this.globalTransformMatrix.b * boneLength;
|
||
var lLL = x * x + y * y;
|
||
var lL = Math.sqrt(lLL);
|
||
var dX = this.global.x - parentGlobal.x;
|
||
var dY = this.global.y - parentGlobal.y;
|
||
var lPP = dX * dX + dY * dY;
|
||
var lP = Math.sqrt(lPP);
|
||
var rawRadianA = Math.atan2(dY, dX);
|
||
dX = ikGlobal.x - parentGlobal.x;
|
||
dY = ikGlobal.y - parentGlobal.y;
|
||
var lTT = dX * dX + dY * dY;
|
||
var lT = Math.sqrt(lTT);
|
||
var ikRadianA = 0.0;
|
||
if (lL + lP <= lT || lT + lL <= lP || lT + lP <= lL) {
|
||
ikRadianA = Math.atan2(ikGlobal.y - parentGlobal.y, ikGlobal.x - parentGlobal.x);
|
||
if (lL + lP <= lT) {
|
||
}
|
||
else if (lP < lL) {
|
||
ikRadianA += Math.PI;
|
||
}
|
||
}
|
||
else {
|
||
var h = (lPP - lLL + lTT) / (2.0 * lTT);
|
||
var r = Math.sqrt(lPP - h * h * lTT) / lT;
|
||
var hX = parentGlobal.x + (dX * h);
|
||
var hY = parentGlobal.y + (dY * h);
|
||
var rX = -dY * r;
|
||
var rY = dX * r;
|
||
var isPPR = false;
|
||
if (this._parent._parent) {
|
||
var parentParentMatrix = this._parent._parent.globalTransformMatrix;
|
||
isPPR = parentParentMatrix.a * parentParentMatrix.d - parentParentMatrix.b * parentParentMatrix.c < 0.0;
|
||
}
|
||
if (isPPR !== this.ikBendPositive) {
|
||
this.global.x = hX - rX;
|
||
this.global.y = hY - rY;
|
||
}
|
||
else {
|
||
this.global.x = hX + rX;
|
||
this.global.y = hY + rY;
|
||
}
|
||
ikRadianA = Math.atan2(this.global.y - parentGlobal.y, this.global.x - parentGlobal.x);
|
||
}
|
||
var dR = (ikRadianA - rawRadianA) * this.ikWeight;
|
||
parentGlobal.skewX += dR;
|
||
parentGlobal.skewY += dR;
|
||
parentGlobal.toMatrix(this._parent.globalTransformMatrix);
|
||
this._parent._childrenTransformDirty = true;
|
||
if (this._parent._cachedFrameIndex >= 0) {
|
||
this._armature._armatureData.setCacheFrame(this._parent.globalTransformMatrix, parentGlobal, this._parent._cachedFrameIndex);
|
||
}
|
||
var parentRadian = rawRadianA + dR;
|
||
this.global.x = parentGlobal.x + Math.cos(parentRadian) * lP;
|
||
this.global.y = parentGlobal.y + Math.sin(parentRadian) * lP;
|
||
var ikRadianB = Math.atan2(ikGlobal.y - this.global.y, ikGlobal.x - this.global.x);
|
||
if (this.global.scaleX < 0.0) {
|
||
ikRadianB += Math.PI;
|
||
}
|
||
dR = (ikRadianB - this.global.skewY) * this.ikWeight;
|
||
this.global.skewX += dR;
|
||
this.global.skewY += dR;
|
||
this.global.toMatrix(this.globalTransformMatrix);
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Bone.prototype._init = function (boneData) {
|
||
if (this._boneData) {
|
||
return;
|
||
}
|
||
this._boneData = boneData;
|
||
this.name = this._boneData.name;
|
||
this.origin = this._boneData.transform;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Bone.prototype._setArmature = function (value) {
|
||
if (this._armature === value) {
|
||
return;
|
||
}
|
||
this._ik = null;
|
||
var oldSlots = null;
|
||
var oldBones = null;
|
||
if (this._armature) {
|
||
oldSlots = this.getSlots();
|
||
oldBones = this.getBones();
|
||
this._armature._removeBoneFromBoneList(this);
|
||
}
|
||
this._armature = value;
|
||
if (this._armature) {
|
||
this._armature._addBoneToBoneList(this);
|
||
}
|
||
if (oldSlots) {
|
||
for (var i = 0, l = oldSlots.length; i < l; ++i) {
|
||
var slot = oldSlots[i];
|
||
if (slot.parent === this) {
|
||
slot._setArmature(this._armature);
|
||
}
|
||
}
|
||
}
|
||
if (oldBones) {
|
||
for (var i = 0, l = oldBones.length; i < l; ++i) {
|
||
var bone = oldBones[i];
|
||
if (bone.parent === this) {
|
||
bone._setArmature(this._armature);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Bone.prototype._setIK = function (value, chain, chainIndex) {
|
||
if (value) {
|
||
if (chain === chainIndex) {
|
||
var chainEnd = this._parent;
|
||
if (chain && chainEnd) {
|
||
chain = 1;
|
||
}
|
||
else {
|
||
chain = 0;
|
||
chainIndex = 0;
|
||
chainEnd = this;
|
||
}
|
||
if (chainEnd === value || chainEnd.contains(value)) {
|
||
value = null;
|
||
chain = 0;
|
||
chainIndex = 0;
|
||
}
|
||
else {
|
||
var ancestor = value;
|
||
while (ancestor.ik && ancestor.ikChain) {
|
||
if (chainEnd.contains(ancestor.ik)) {
|
||
value = null;
|
||
chain = 0;
|
||
chainIndex = 0;
|
||
break;
|
||
}
|
||
ancestor = ancestor.parent;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
chain = 0;
|
||
chainIndex = 0;
|
||
}
|
||
this._ik = value;
|
||
this._ikChain = chain;
|
||
this._ikChainIndex = chainIndex;
|
||
if (this._armature) {
|
||
this._armature._bonesDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Bone.prototype._update = function (cacheFrameIndex) {
|
||
this._blendDirty = false;
|
||
if (cacheFrameIndex >= 0 && this._cachedFrameIndices) {
|
||
var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex];
|
||
if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) {
|
||
this._transformDirty = false;
|
||
}
|
||
else if (cachedFrameIndex >= 0) {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = cachedFrameIndex;
|
||
}
|
||
else if (this._transformDirty ||
|
||
(this._parent && this._parent._childrenTransformDirty) ||
|
||
(this._ik && this.ikWeight > 0 && this._ik._childrenTransformDirty)) {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
else if (this._cachedFrameIndex >= 0) {
|
||
this._transformDirty = false;
|
||
this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex;
|
||
}
|
||
else {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
}
|
||
else if (this._transformDirty ||
|
||
(this._parent && this._parent._childrenTransformDirty) ||
|
||
(this._ik && this.ikWeight > 0 && this._ik._childrenTransformDirty)) {
|
||
cacheFrameIndex = -1;
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
if (this._transformDirty) {
|
||
this._transformDirty = false;
|
||
this._childrenTransformDirty = true;
|
||
if (this._cachedFrameIndex < 0) {
|
||
var isCache = cacheFrameIndex >= 0;
|
||
this._updateGlobalTransformMatrix(isCache);
|
||
if (isCache) {
|
||
this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global);
|
||
}
|
||
}
|
||
else {
|
||
this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
|
||
}
|
||
}
|
||
else if (this._childrenTransformDirty) {
|
||
this._childrenTransformDirty = false;
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 下一帧更新变换。 (当骨骼没有动画状态或动画状态播放完成时,骨骼将不在更新)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Bone.prototype.invalidUpdate = function () {
|
||
this._transformDirty = true;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 是否包含骨骼或插槽。
|
||
* @returns
|
||
* @see dragonBones.TransformObject
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Bone.prototype.contains = function (child) {
|
||
if (child) {
|
||
if (child === this) {
|
||
return false;
|
||
}
|
||
var ancestor = child;
|
||
while (ancestor !== this && ancestor) {
|
||
ancestor = ancestor.parent;
|
||
}
|
||
return ancestor === this;
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 所有的子骨骼。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Bone.prototype.getBones = function () {
|
||
this._bones.length = 0;
|
||
var bones = this._armature.getBones();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (bone.parent === this) {
|
||
this._bones.push(bone);
|
||
}
|
||
}
|
||
return this._bones;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 所有的插槽。
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Bone.prototype.getSlots = function () {
|
||
this._slots.length = 0;
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slot = slots[i];
|
||
if (slot.parent === this) {
|
||
this._slots.push(slot);
|
||
}
|
||
}
|
||
return this._slots;
|
||
};
|
||
Object.defineProperty(Bone.prototype, "boneData", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
return this._boneData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "visible", {
|
||
/**
|
||
* @language zh_CN
|
||
* 控制此骨骼所有插槽的可见。
|
||
* @default true
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._visible;
|
||
},
|
||
set: function (value) {
|
||
if (this._visible === value) {
|
||
return;
|
||
}
|
||
this._visible = value;
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slot = slots[i];
|
||
if (slot._parent === this) {
|
||
slot._updateVisible();
|
||
}
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "length", {
|
||
/**
|
||
* @deprecated
|
||
* @see #boneData
|
||
* @see #dragonBones.BoneData#length
|
||
*/
|
||
get: function () {
|
||
return this.boneData.length;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "slot", {
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.Armature#getSlot()
|
||
*/
|
||
get: function () {
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slot = slots[i];
|
||
if (slot.parent === this) {
|
||
return slot;
|
||
}
|
||
}
|
||
return null;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "ikChain", {
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
get: function () {
|
||
return this._ikChain;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "ikChainIndex", {
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
get: function () {
|
||
return this._ikChainIndex;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Bone.prototype, "ik", {
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
get: function () {
|
||
return this._ik;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return Bone;
|
||
}(dragonBones.TransformObject));
|
||
dragonBones.Bone = Bone;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 插槽,附着在骨骼上,控制显示对象的显示状态和属性。
|
||
* 一个骨骼上可以包含多个插槽。
|
||
* 一个插槽中可以包含多个显示对象,同一时间只能显示其中的一个显示对象,但可以在动画播放的过程中切换显示对象实现帧动画。
|
||
* 显示对象可以是普通的图片纹理,也可以是子骨架的显示容器,网格显示对象,还可以是自定义的其他显示对象。
|
||
* @see dragonBones.Armature
|
||
* @see dragonBones.Bone
|
||
* @see dragonBones.SlotData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Slot = (function (_super) {
|
||
__extends(Slot, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function Slot() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._localMatrix = new dragonBones.Matrix();
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._colorTransform = new dragonBones.ColorTransform();
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._ffdVertices = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._displayList = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._textureDatas = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._replacedDisplayDatas = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._meshBones = [];
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
var disposeDisplayList = [];
|
||
for (var i = 0, l = this._displayList.length; i < l; ++i) {
|
||
var eachDisplay = this._displayList[i];
|
||
if (eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay &&
|
||
disposeDisplayList.indexOf(eachDisplay) < 0) {
|
||
disposeDisplayList.push(eachDisplay);
|
||
}
|
||
}
|
||
for (var i = 0, l = disposeDisplayList.length; i < l; ++i) {
|
||
var eachDisplay = disposeDisplayList[i];
|
||
if (eachDisplay instanceof dragonBones.Armature) {
|
||
eachDisplay.dispose();
|
||
}
|
||
else {
|
||
this._disposeDisplay(eachDisplay);
|
||
}
|
||
}
|
||
if (this._meshDisplay && this._meshDisplay !== this._rawDisplay) {
|
||
this._disposeDisplay(this._meshDisplay);
|
||
}
|
||
if (this._rawDisplay) {
|
||
this._disposeDisplay(this._rawDisplay);
|
||
}
|
||
this.displayController = null;
|
||
this._displayDirty = false;
|
||
this._zOrderDirty = false;
|
||
this._blendModeDirty = false;
|
||
this._colorDirty = false;
|
||
this._meshDirty = false;
|
||
this._transformDirty = false;
|
||
this._blendMode = 0 /* Normal */;
|
||
this._displayIndex = -1;
|
||
this._zOrder = 0;
|
||
this._cachedFrameIndex = -1;
|
||
this._pivotX = 0.0;
|
||
this._pivotY = 0.0;
|
||
this._localMatrix.identity();
|
||
this._colorTransform.identity();
|
||
this._ffdVertices.length = 0;
|
||
this._displayList.length = 0;
|
||
this._textureDatas.length = 0;
|
||
this._replacedDisplayDatas.length = 0;
|
||
this._meshBones.length = 0;
|
||
this._skinSlotData = null;
|
||
this._displayData = null;
|
||
this._replacedDisplayData = null;
|
||
this._textureData = null;
|
||
this._meshData = null;
|
||
this._boundingBoxData = null;
|
||
this._rawDisplay = null;
|
||
this._meshDisplay = null;
|
||
this._display = null;
|
||
this._childArmature = null;
|
||
this._cachedFrameIndices = null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._isMeshBonesUpdate = function () {
|
||
for (var i = 0, l = this._meshBones.length; i < l; ++i) {
|
||
if (this._meshBones[i]._childrenTransformDirty) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._updateDisplayData = function () {
|
||
var prevDisplayData = this._displayData;
|
||
var prevReplaceDisplayData = this._replacedDisplayData;
|
||
var prevTextureData = this._textureData;
|
||
var prevMeshData = this._meshData;
|
||
var currentDisplay = this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? this._displayList[this._displayIndex] : null;
|
||
if (this._displayIndex >= 0 && this._displayIndex < this._skinSlotData.displays.length) {
|
||
this._displayData = this._skinSlotData.displays[this._displayIndex];
|
||
}
|
||
else {
|
||
this._displayData = null;
|
||
}
|
||
if (this._displayIndex >= 0 && this._displayIndex < this._replacedDisplayDatas.length) {
|
||
this._replacedDisplayData = this._replacedDisplayDatas[this._displayIndex];
|
||
}
|
||
else {
|
||
this._replacedDisplayData = null;
|
||
}
|
||
if (this._displayData !== prevDisplayData || this._replacedDisplayData !== prevReplaceDisplayData || this._display != currentDisplay) {
|
||
var currentDisplayData = this._replacedDisplayData ? this._replacedDisplayData : this._displayData;
|
||
if (currentDisplayData && (currentDisplay === this._rawDisplay || currentDisplay === this._meshDisplay)) {
|
||
if (this._replacedDisplayData) {
|
||
this._textureData = this._replacedDisplayData.texture;
|
||
}
|
||
else if (this._displayIndex < this._textureDatas.length && this._textureDatas[this._displayIndex]) {
|
||
this._textureData = this._textureDatas[this._displayIndex];
|
||
}
|
||
else {
|
||
this._textureData = this._displayData.texture;
|
||
}
|
||
if (currentDisplay === this._meshDisplay) {
|
||
if (this._replacedDisplayData && this._replacedDisplayData.mesh) {
|
||
this._meshData = this._replacedDisplayData.mesh;
|
||
}
|
||
else {
|
||
this._meshData = this._displayData.mesh;
|
||
}
|
||
}
|
||
else {
|
||
this._meshData = null;
|
||
}
|
||
// Update pivot offset.
|
||
if (this._meshData) {
|
||
this._pivotX = 0.0;
|
||
this._pivotY = 0.0;
|
||
}
|
||
else if (this._textureData) {
|
||
var scale = this._armature.armatureData.scale;
|
||
this._pivotX = currentDisplayData.pivot.x;
|
||
this._pivotY = currentDisplayData.pivot.y;
|
||
if (currentDisplayData.isRelativePivot) {
|
||
var rect = this._textureData.frame ? this._textureData.frame : this._textureData.region;
|
||
var width = rect.width * scale;
|
||
var height = rect.height * scale;
|
||
if (this._textureData.rotated) {
|
||
width = rect.height;
|
||
height = rect.width;
|
||
}
|
||
this._pivotX *= width;
|
||
this._pivotY *= height;
|
||
}
|
||
if (this._textureData.frame) {
|
||
this._pivotX += this._textureData.frame.x * scale;
|
||
this._pivotY += this._textureData.frame.y * scale;
|
||
}
|
||
}
|
||
else {
|
||
this._pivotX = 0.0;
|
||
this._pivotY = 0.0;
|
||
}
|
||
if (this._displayData && currentDisplayData !== this._displayData &&
|
||
(!this._meshData || this._meshData !== this._displayData.mesh)) {
|
||
this._displayData.transform.toMatrix(Slot._helpMatrix);
|
||
Slot._helpMatrix.invert();
|
||
Slot._helpMatrix.transformPoint(0.0, 0.0, Slot._helpPoint);
|
||
this._pivotX -= Slot._helpPoint.x;
|
||
this._pivotY -= Slot._helpPoint.y;
|
||
currentDisplayData.transform.toMatrix(Slot._helpMatrix);
|
||
Slot._helpMatrix.invert();
|
||
Slot._helpMatrix.transformPoint(0.0, 0.0, Slot._helpPoint);
|
||
this._pivotX += Slot._helpPoint.x;
|
||
this._pivotY += Slot._helpPoint.y;
|
||
}
|
||
if (this._meshData !== prevMeshData) {
|
||
if (this._meshData && this._displayData && this._meshData === this._displayData.mesh) {
|
||
if (this._meshData.skinned) {
|
||
this._meshBones.length = this._meshData.bones.length;
|
||
for (var i = 0, l = this._meshBones.length; i < l; ++i) {
|
||
this._meshBones[i] = this._armature.getBone(this._meshData.bones[i].name);
|
||
}
|
||
var ffdVerticesCount = 0;
|
||
for (var i = 0, l = this._meshData.boneIndices.length; i < l; ++i) {
|
||
ffdVerticesCount += this._meshData.boneIndices[i].length;
|
||
}
|
||
this._ffdVertices.length = ffdVerticesCount * 2;
|
||
}
|
||
else {
|
||
this._meshBones.length = 0;
|
||
this._ffdVertices.length = this._meshData.vertices.length;
|
||
}
|
||
for (var i = 0, l = this._ffdVertices.length; i < l; ++i) {
|
||
this._ffdVertices[i] = 0.0;
|
||
}
|
||
this._meshDirty = true;
|
||
}
|
||
else {
|
||
this._meshBones.length = 0;
|
||
this._ffdVertices.length = 0;
|
||
}
|
||
}
|
||
else if (this._textureData !== prevTextureData) {
|
||
this._meshDirty = true;
|
||
}
|
||
}
|
||
else {
|
||
this._textureData = null;
|
||
this._meshData = null;
|
||
this._pivotX = 0.0;
|
||
this._pivotY = 0.0;
|
||
this._meshBones.length = 0;
|
||
this._ffdVertices.length = 0;
|
||
}
|
||
this._displayDirty = true;
|
||
this._transformDirty = true;
|
||
if (this._displayData) {
|
||
this.origin = this._displayData.transform;
|
||
}
|
||
else if (this._replacedDisplayData) {
|
||
this.origin = this._replacedDisplayData.transform;
|
||
}
|
||
}
|
||
// Update bounding box data.
|
||
if (this._replacedDisplayData) {
|
||
this._boundingBoxData = this._replacedDisplayData.boundingBox;
|
||
}
|
||
else if (this._displayData) {
|
||
this._boundingBoxData = this._displayData.boundingBox;
|
||
}
|
||
else {
|
||
this._boundingBoxData = null;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._updateDisplay = function () {
|
||
var prevDisplay = this._display || this._rawDisplay;
|
||
var prevChildArmature = this._childArmature;
|
||
if (this._displayIndex >= 0 && this._displayIndex < this._displayList.length) {
|
||
this._display = this._displayList[this._displayIndex];
|
||
if (this._display instanceof dragonBones.Armature) {
|
||
this._childArmature = this._display;
|
||
this._display = this._childArmature.display;
|
||
}
|
||
else {
|
||
this._childArmature = null;
|
||
}
|
||
}
|
||
else {
|
||
this._display = null;
|
||
this._childArmature = null;
|
||
}
|
||
var currentDisplay = this._display ? this._display : this._rawDisplay;
|
||
if (currentDisplay !== prevDisplay) {
|
||
this._onUpdateDisplay();
|
||
this._replaceDisplay(prevDisplay);
|
||
this._blendModeDirty = true;
|
||
this._colorDirty = true;
|
||
}
|
||
// Update frame.
|
||
if (currentDisplay === this._rawDisplay || currentDisplay === this._meshDisplay) {
|
||
this._updateFrame();
|
||
}
|
||
// Update child armature.
|
||
if (this._childArmature !== prevChildArmature) {
|
||
if (prevChildArmature) {
|
||
prevChildArmature._parent = null; // Update child armature parent.
|
||
prevChildArmature.clock = null;
|
||
if (prevChildArmature.inheritAnimation) {
|
||
prevChildArmature.animation.reset();
|
||
}
|
||
}
|
||
if (this._childArmature) {
|
||
this._childArmature._parent = this; // Update child armature parent.
|
||
this._childArmature.clock = this._armature.clock;
|
||
if (this._childArmature.inheritAnimation) {
|
||
if (this._childArmature.cacheFrameRate === 0) {
|
||
var cacheFrameRate = this._armature.cacheFrameRate;
|
||
if (cacheFrameRate !== 0) {
|
||
this._childArmature.cacheFrameRate = cacheFrameRate;
|
||
}
|
||
}
|
||
// Child armature action.
|
||
var actions = this._skinSlotData.slot.actions.length > 0 ? this._skinSlotData.slot.actions : this._childArmature.armatureData.actions;
|
||
if (actions.length > 0) {
|
||
for (var i = 0, l = actions.length; i < l; ++i) {
|
||
this._childArmature._bufferAction(actions[i]);
|
||
}
|
||
}
|
||
else {
|
||
this._childArmature.animation.play();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._updateGlobalTransformMatrix = function (isCache) {
|
||
this.globalTransformMatrix.copyFrom(this._localMatrix);
|
||
this.globalTransformMatrix.concat(this._parent.globalTransformMatrix);
|
||
if (isCache) {
|
||
this.global.fromMatrix(this.globalTransformMatrix);
|
||
}
|
||
else {
|
||
this._globalDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._init = function (skinSlotData, rawDisplay, meshDisplay) {
|
||
if (this._skinSlotData) {
|
||
return;
|
||
}
|
||
this._skinSlotData = skinSlotData;
|
||
var slotData = this._skinSlotData.slot;
|
||
this.name = slotData.name;
|
||
this._zOrder = slotData.zOrder;
|
||
this._blendMode = slotData.blendMode;
|
||
this._colorTransform.copyFrom(slotData.color);
|
||
this._rawDisplay = rawDisplay;
|
||
this._meshDisplay = meshDisplay;
|
||
this._blendModeDirty = true;
|
||
this._colorDirty = true;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Slot.prototype._setArmature = function (value) {
|
||
if (this._armature === value) {
|
||
return;
|
||
}
|
||
if (this._armature) {
|
||
this._armature._removeSlotFromSlotList(this);
|
||
}
|
||
this._armature = value;
|
||
this._onUpdateDisplay();
|
||
if (this._armature) {
|
||
this._armature._addSlotToSlotList(this);
|
||
this._addDisplay();
|
||
}
|
||
else {
|
||
this._removeDisplay();
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Slot.prototype._update = function (cacheFrameIndex) {
|
||
if (this._displayDirty) {
|
||
this._displayDirty = false;
|
||
this._updateDisplay();
|
||
if (this._transformDirty) {
|
||
if (this.origin) {
|
||
this.global.copyFrom(this.origin).add(this.offset).toMatrix(this._localMatrix);
|
||
}
|
||
else {
|
||
this.global.copyFrom(this.offset).toMatrix(this._localMatrix);
|
||
}
|
||
}
|
||
}
|
||
if (this._zOrderDirty) {
|
||
this._zOrderDirty = false;
|
||
this._updateZOrder();
|
||
}
|
||
if (cacheFrameIndex >= 0 && this._cachedFrameIndices) {
|
||
var cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex];
|
||
if (cachedFrameIndex >= 0 && this._cachedFrameIndex === cachedFrameIndex) {
|
||
this._transformDirty = false;
|
||
}
|
||
else if (cachedFrameIndex >= 0) {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = cachedFrameIndex;
|
||
}
|
||
else if (this._transformDirty || this._parent._childrenTransformDirty) {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
else if (this._cachedFrameIndex >= 0) {
|
||
this._transformDirty = false;
|
||
this._cachedFrameIndices[cacheFrameIndex] = this._cachedFrameIndex;
|
||
}
|
||
else {
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
}
|
||
else if (this._transformDirty || this._parent._childrenTransformDirty) {
|
||
cacheFrameIndex = -1;
|
||
this._transformDirty = true;
|
||
this._cachedFrameIndex = -1;
|
||
}
|
||
if (!this._display) {
|
||
return;
|
||
}
|
||
if (this._blendModeDirty) {
|
||
this._blendModeDirty = false;
|
||
this._updateBlendMode();
|
||
}
|
||
if (this._colorDirty) {
|
||
this._colorDirty = false;
|
||
this._updateColor();
|
||
}
|
||
if (this._meshData && this._displayData && this._meshData === this._displayData.mesh) {
|
||
if (this._meshDirty || (this._meshData.skinned && this._isMeshBonesUpdate())) {
|
||
this._meshDirty = false;
|
||
this._updateMesh();
|
||
}
|
||
if (this._meshData.skinned) {
|
||
if (this._transformDirty) {
|
||
this._transformDirty = false;
|
||
this._updateTransform(true);
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
if (this._transformDirty) {
|
||
this._transformDirty = false;
|
||
if (this._cachedFrameIndex < 0) {
|
||
var isCache = cacheFrameIndex >= 0;
|
||
this._updateGlobalTransformMatrix(isCache);
|
||
if (isCache) {
|
||
this._cachedFrameIndex = this._cachedFrameIndices[cacheFrameIndex] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global);
|
||
}
|
||
}
|
||
else {
|
||
this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
|
||
}
|
||
this._updateTransform(false);
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Slot.prototype._updateTransformAndMatrix = function () {
|
||
if (this._transformDirty) {
|
||
this._transformDirty = false;
|
||
this._updateGlobalTransformMatrix(false);
|
||
}
|
||
};
|
||
/**
|
||
* @private Factory
|
||
*/
|
||
Slot.prototype._setDisplayList = function (value) {
|
||
if (value && value.length > 0) {
|
||
if (this._displayList.length !== value.length) {
|
||
this._displayList.length = value.length;
|
||
}
|
||
for (var i = 0, l = value.length; i < l; ++i) {
|
||
var eachDisplay = value[i];
|
||
if (eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay &&
|
||
!(eachDisplay instanceof dragonBones.Armature) && this._displayList.indexOf(eachDisplay) < 0) {
|
||
this._initDisplay(eachDisplay);
|
||
}
|
||
this._displayList[i] = eachDisplay;
|
||
}
|
||
}
|
||
else if (this._displayList.length > 0) {
|
||
this._displayList.length = 0;
|
||
}
|
||
if (this._displayIndex >= 0 && this._displayIndex < this._displayList.length) {
|
||
this._displayDirty = this._display !== this._displayList[this._displayIndex];
|
||
}
|
||
else {
|
||
this._displayDirty = this._display != null;
|
||
}
|
||
this._updateDisplayData();
|
||
return this._displayDirty;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Slot.prototype._setDisplayIndex = function (value) {
|
||
if (this._displayIndex === value) {
|
||
return false;
|
||
}
|
||
this._displayIndex = value;
|
||
this._displayDirty = true;
|
||
this._updateDisplayData();
|
||
return this._displayDirty;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Slot.prototype._setZorder = function (value) {
|
||
if (this._zOrder === value) {
|
||
//return false;
|
||
}
|
||
this._zOrder = value;
|
||
this._zOrderDirty = true;
|
||
return this._zOrderDirty;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Slot.prototype._setColor = function (value) {
|
||
this._colorTransform.copyFrom(value);
|
||
this._colorDirty = true;
|
||
return true;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 判断指定的点是否在插槽的自定义包围盒内。
|
||
* @param x 点的水平坐标。(骨架内坐标系)
|
||
* @param y 点的垂直坐标。(骨架内坐标系)
|
||
* @param color 指定的包围盒颜色。 [0: 与所有包围盒进行判断, N: 仅当包围盒的颜色为 N 时才进行判断]
|
||
* @version DragonBones 5.0
|
||
*/
|
||
Slot.prototype.containsPoint = function (x, y) {
|
||
if (!this._boundingBoxData) {
|
||
return false;
|
||
}
|
||
this._updateTransformAndMatrix();
|
||
Slot._helpMatrix.copyFrom(this.globalTransformMatrix);
|
||
Slot._helpMatrix.invert();
|
||
Slot._helpMatrix.transformPoint(x, y, Slot._helpPoint);
|
||
return this._boundingBoxData.containsPoint(Slot._helpPoint.x, Slot._helpPoint.y);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 判断指定的线段与插槽的自定义包围盒是否相交。
|
||
* @param xA 线段起点的水平坐标。(骨架内坐标系)
|
||
* @param yA 线段起点的垂直坐标。(骨架内坐标系)
|
||
* @param xB 线段终点的水平坐标。(骨架内坐标系)
|
||
* @param yB 线段终点的垂直坐标。(骨架内坐标系)
|
||
* @param intersectionPointA 线段从起点到终点与包围盒相交的第一个交点。(骨架内坐标系)
|
||
* @param intersectionPointB 线段从终点到起点与包围盒相交的第一个交点。(骨架内坐标系)
|
||
* @param normalRadians 碰撞点处包围盒切线的法线弧度。 [x: 第一个碰撞点处切线的法线弧度, y: 第二个碰撞点处切线的法线弧度]
|
||
* @returns 相交的情况。 [-1: 不相交且线段在包围盒内, 0: 不相交, 1: 相交且有一个交点且终点在包围盒内, 2: 相交且有一个交点且起点在包围盒内, 3: 相交且有两个交点, N: 相交且有 N 个交点]
|
||
* @version DragonBones 5.0
|
||
*/
|
||
Slot.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
if (!this._boundingBoxData) {
|
||
return 0;
|
||
}
|
||
this._updateTransformAndMatrix();
|
||
Slot._helpMatrix.copyFrom(this.globalTransformMatrix);
|
||
Slot._helpMatrix.invert();
|
||
Slot._helpMatrix.transformPoint(xA, yA, Slot._helpPoint);
|
||
xA = Slot._helpPoint.x;
|
||
yA = Slot._helpPoint.y;
|
||
Slot._helpMatrix.transformPoint(xB, yB, Slot._helpPoint);
|
||
xB = Slot._helpPoint.x;
|
||
yB = Slot._helpPoint.y;
|
||
var intersectionCount = this._boundingBoxData.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians);
|
||
if (intersectionCount > 0) {
|
||
if (intersectionCount === 1 || intersectionCount === 2) {
|
||
if (intersectionPointA) {
|
||
this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA);
|
||
if (intersectionPointB) {
|
||
intersectionPointB.x = intersectionPointA.x;
|
||
intersectionPointB.y = intersectionPointA.y;
|
||
}
|
||
}
|
||
else if (intersectionPointB) {
|
||
this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB);
|
||
}
|
||
}
|
||
else {
|
||
if (intersectionPointA) {
|
||
this.globalTransformMatrix.transformPoint(intersectionPointA.x, intersectionPointA.y, intersectionPointA);
|
||
}
|
||
if (intersectionPointB) {
|
||
this.globalTransformMatrix.transformPoint(intersectionPointB.x, intersectionPointB.y, intersectionPointB);
|
||
}
|
||
}
|
||
if (normalRadians) {
|
||
this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.x), Math.sin(normalRadians.x), Slot._helpPoint, true);
|
||
normalRadians.x = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x);
|
||
this.globalTransformMatrix.transformPoint(Math.cos(normalRadians.y), Math.sin(normalRadians.y), Slot._helpPoint, true);
|
||
normalRadians.y = Math.atan2(Slot._helpPoint.y, Slot._helpPoint.x);
|
||
}
|
||
}
|
||
return intersectionCount;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 在下一帧更新显示对象的状态。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Slot.prototype.invalidUpdate = function () {
|
||
this._displayDirty = true;
|
||
this._transformDirty = true;
|
||
};
|
||
Object.defineProperty(Slot.prototype, "skinSlotData", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
return this._skinSlotData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "boundingBoxData", {
|
||
/**
|
||
* @language zh_CN
|
||
* 插槽此时的自定义包围盒数据。
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._boundingBoxData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "rawDisplay", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
return this._rawDisplay;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "meshDisplay", {
|
||
/**
|
||
* @private
|
||
*/
|
||
get: function () {
|
||
return this._meshDisplay;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "displayIndex", {
|
||
/**
|
||
* @language zh_CN
|
||
* 此时显示的显示对象在显示列表中的索引。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._displayIndex;
|
||
},
|
||
set: function (value) {
|
||
if (this._setDisplayIndex(value)) {
|
||
this._update(-1);
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "displayList", {
|
||
/**
|
||
* @language zh_CN
|
||
* 包含显示对象或子骨架的显示列表。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._displayList.concat();
|
||
},
|
||
set: function (value) {
|
||
var backupDisplayList = this._displayList.concat(); // Copy.
|
||
var disposeDisplayList = [];
|
||
if (this._setDisplayList(value)) {
|
||
this._update(-1);
|
||
}
|
||
// Release replaced render displays.
|
||
for (var i = 0, l = backupDisplayList.length; i < l; ++i) {
|
||
var eachDisplay = backupDisplayList[i];
|
||
if (eachDisplay && eachDisplay !== this._rawDisplay && eachDisplay !== this._meshDisplay &&
|
||
this._displayList.indexOf(eachDisplay) < 0 &&
|
||
disposeDisplayList.indexOf(eachDisplay) < 0) {
|
||
disposeDisplayList.push(eachDisplay);
|
||
}
|
||
}
|
||
for (var i = 0, l = disposeDisplayList.length; i < l; ++i) {
|
||
var eachDisplay = disposeDisplayList[i];
|
||
if (eachDisplay instanceof dragonBones.Armature) {
|
||
eachDisplay.dispose();
|
||
}
|
||
else {
|
||
this._disposeDisplay(eachDisplay);
|
||
}
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "display", {
|
||
/**
|
||
* @language zh_CN
|
||
* 此时显示的显示对象。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._display;
|
||
},
|
||
set: function (value) {
|
||
if (this._display === value) {
|
||
return;
|
||
}
|
||
var displayListLength = this._displayList.length;
|
||
if (this._displayIndex < 0 && displayListLength === 0) {
|
||
this._displayIndex = 0;
|
||
}
|
||
if (this._displayIndex < 0) {
|
||
return;
|
||
}
|
||
else {
|
||
var replaceDisplayList = this.displayList; // Copy.
|
||
if (displayListLength <= this._displayIndex) {
|
||
replaceDisplayList.length = this._displayIndex + 1;
|
||
}
|
||
replaceDisplayList[this._displayIndex] = value;
|
||
this.displayList = replaceDisplayList;
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Slot.prototype, "childArmature", {
|
||
/**
|
||
* @language zh_CN
|
||
* 此时显示的子骨架。
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._childArmature;
|
||
},
|
||
set: function (value) {
|
||
if (this._childArmature === value) {
|
||
return;
|
||
}
|
||
this.display = value;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/**
|
||
* @deprecated
|
||
* @see #display
|
||
*/
|
||
Slot.prototype.getDisplay = function () {
|
||
return this._display;
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see #display
|
||
*/
|
||
Slot.prototype.setDisplay = function (value) {
|
||
this.display = value;
|
||
};
|
||
return Slot;
|
||
}(dragonBones.TransformObject));
|
||
dragonBones.Slot = Slot;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 骨架,是骨骼动画系统的核心,由显示容器、骨骼、插槽、动画、事件系统构成。
|
||
* @see dragonBones.ArmatureData
|
||
* @see dragonBones.Bone
|
||
* @see dragonBones.Slot
|
||
* @see dragonBones.Animation
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Armature = (function (_super) {
|
||
__extends(Armature, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function Armature() {
|
||
var _this = _super.call(this) || this;
|
||
_this._bones = [];
|
||
_this._slots = [];
|
||
_this._actions = [];
|
||
_this._events = [];
|
||
/**
|
||
* @deprecated
|
||
* @see #cacheFrameRate
|
||
*/
|
||
_this.enableCache = false;
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
Armature.toString = function () {
|
||
return "[class dragonBones.Armature]";
|
||
};
|
||
Armature._onSortSlots = function (a, b) {
|
||
return a._zOrder > b._zOrder ? 1 : -1;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Armature.prototype._onClear = function () {
|
||
for (var i = 0, l = this._bones.length; i < l; ++i) {
|
||
this._bones[i].returnToPool();
|
||
}
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
this._slots[i].returnToPool();
|
||
}
|
||
for (var i = 0, l = this._events.length; i < l; ++i) {
|
||
this._events[i].returnToPool();
|
||
}
|
||
if (this._clock) {
|
||
this._clock.remove(this);
|
||
}
|
||
if (this._proxy) {
|
||
this._proxy._onClear();
|
||
}
|
||
if (this._replaceTextureAtlasData) {
|
||
this._replaceTextureAtlasData.returnToPool();
|
||
}
|
||
if (this._animation) {
|
||
this._animation.returnToPool();
|
||
}
|
||
this.inheritAnimation = true;
|
||
this.debugDraw = false;
|
||
this.userData = null;
|
||
this._debugDraw = false;
|
||
this._delayDispose = false;
|
||
this._lockDispose = false;
|
||
this._bonesDirty = false;
|
||
this._slotsDirty = false;
|
||
this._zOrderDirty = false;
|
||
this._flipX = false;
|
||
this._flipY = false;
|
||
this._bones.length = 0;
|
||
this._slots.length = 0;
|
||
this._actions.length = 0;
|
||
this._events.length = 0;
|
||
this._armatureData = null;
|
||
this._skinData = null;
|
||
this._animation = null;
|
||
this._proxy = null;
|
||
this._display = null;
|
||
this._eventManager = null;
|
||
this._parent = null;
|
||
this._clock = null;
|
||
this._replaceTextureAtlasData = null;
|
||
this._replacedTexture = null;
|
||
};
|
||
Armature.prototype._sortBones = function () {
|
||
var total = this._bones.length;
|
||
if (total <= 0) {
|
||
return;
|
||
}
|
||
var sortHelper = this._bones.concat();
|
||
var index = 0;
|
||
var count = 0;
|
||
this._bones.length = 0;
|
||
while (count < total) {
|
||
var bone = sortHelper[index++];
|
||
if (index >= total) {
|
||
index = 0;
|
||
}
|
||
if (this._bones.indexOf(bone) >= 0) {
|
||
continue;
|
||
}
|
||
if (bone.parent && this._bones.indexOf(bone.parent) < 0) {
|
||
continue;
|
||
}
|
||
if (bone.ik && this._bones.indexOf(bone.ik) < 0) {
|
||
continue;
|
||
}
|
||
if (bone.ik && bone.ikChain > 0 && bone.ikChainIndex === bone.ikChain) {
|
||
this._bones.splice(this._bones.indexOf(bone.parent) + 1, 0, bone); // ik, parent, bone, children
|
||
}
|
||
else {
|
||
this._bones.push(bone);
|
||
}
|
||
count++;
|
||
}
|
||
};
|
||
Armature.prototype._sortSlots = function () {
|
||
this._slots.sort(Armature._onSortSlots);
|
||
};
|
||
Armature.prototype._doAction = function (value) {
|
||
switch (value.type) {
|
||
case 0 /* Play */:
|
||
this._animation.playConfig(value.animationConfig);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Armature.prototype._init = function (armatureData, skinData, proxy, display, eventManager) {
|
||
if (this._armatureData) {
|
||
return;
|
||
}
|
||
this._armatureData = armatureData;
|
||
this._skinData = skinData;
|
||
this._animation = dragonBones.BaseObject.borrowObject(dragonBones.Animation);
|
||
this._proxy = proxy;
|
||
this._display = display;
|
||
this._eventManager = eventManager;
|
||
this._animation._init(this);
|
||
this._animation.animations = this._armatureData.animations;
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Armature.prototype._addBoneToBoneList = function (value) {
|
||
if (this._bones.indexOf(value) < 0) {
|
||
this._bonesDirty = true;
|
||
this._bones.push(value);
|
||
this._animation._timelineStateDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Armature.prototype._removeBoneFromBoneList = function (value) {
|
||
var index = this._bones.indexOf(value);
|
||
if (index >= 0) {
|
||
this._bones.splice(index, 1);
|
||
this._animation._timelineStateDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Armature.prototype._addSlotToSlotList = function (value) {
|
||
if (this._slots.indexOf(value) < 0) {
|
||
this._slotsDirty = true;
|
||
this._slots.push(value);
|
||
this._animation._timelineStateDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Armature.prototype._removeSlotFromSlotList = function (value) {
|
||
var index = this._slots.indexOf(value);
|
||
if (index >= 0) {
|
||
this._slots.splice(index, 1);
|
||
this._animation._timelineStateDirty = true;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Armature.prototype._sortZOrder = function (slotIndices) {
|
||
var slots = this._armatureData.sortedSlots;
|
||
var isOriginal = !slotIndices || slotIndices.length < 1;
|
||
if (this._zOrderDirty || !isOriginal) {
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slotIndex = isOriginal ? i : slotIndices[i];
|
||
var slotData = slots[slotIndex];
|
||
if (slotData) {
|
||
var slot = this.getSlot(slotData.name);
|
||
if (slot) {
|
||
slot._setZorder(i);
|
||
}
|
||
}
|
||
}
|
||
this._slotsDirty = true;
|
||
this._zOrderDirty = !isOriginal;
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Armature.prototype._bufferAction = function (value) {
|
||
this._actions.push(value);
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Armature.prototype._bufferEvent = function (value, type) {
|
||
value.type = type;
|
||
value.armature = this;
|
||
this._events.push(value);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 释放骨架。 (回收到对象池)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.dispose = function () {
|
||
if (this._armatureData) {
|
||
if (this._lockDispose) {
|
||
this._delayDispose = true;
|
||
}
|
||
else {
|
||
this.returnToPool();
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 更新骨架和动画。
|
||
* @param passedTime 两帧之间的时间间隔。 (以秒为单位)
|
||
* @see dragonBones.IAnimateble
|
||
* @see dragonBones.WorldClock
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.advanceTime = function (passedTime) {
|
||
if (!this._armatureData) {
|
||
throw new Error("The armature has been disposed.");
|
||
//return;
|
||
}
|
||
else if (!this._armatureData.parent) {
|
||
throw new Error("The armature data has been disposed.");
|
||
//return;
|
||
}
|
||
var prevCacheFrameIndex = this._animation._cacheFrameIndex;
|
||
// Update nimation.
|
||
this._animation._advanceTime(passedTime);
|
||
var currentCacheFrameIndex = this._animation._cacheFrameIndex;
|
||
// Sort bones and slots.
|
||
if (this._bonesDirty) {
|
||
this._bonesDirty = false;
|
||
this._sortBones();
|
||
}
|
||
if (this._slotsDirty) {
|
||
this._slotsDirty = false;
|
||
this._sortSlots();
|
||
}
|
||
var i = 0, l = 0;
|
||
// Update bones and slots.
|
||
if (currentCacheFrameIndex < 0 || currentCacheFrameIndex !== prevCacheFrameIndex) {
|
||
for (i = 0, l = this._bones.length; i < l; ++i) {
|
||
this._bones[i]._update(currentCacheFrameIndex);
|
||
}
|
||
for (i = 0, l = this._slots.length; i < l; ++i) {
|
||
this._slots[i]._update(currentCacheFrameIndex);
|
||
}
|
||
}
|
||
//
|
||
var drawed = this.debugDraw || dragonBones.DragonBones.debugDraw;
|
||
if (drawed || this._debugDraw) {
|
||
this._debugDraw = drawed;
|
||
this._proxy._debugDraw(this._debugDraw);
|
||
}
|
||
if (!this._lockDispose) {
|
||
this._lockDispose = true;
|
||
// Events. (Dispatch event before action.)
|
||
l = this._events.length;
|
||
if (l > 0) {
|
||
for (i = 0; i < l; ++i) {
|
||
var eventObject = this._events[i];
|
||
this._proxy._dispatchEvent(eventObject.type, eventObject);
|
||
if (eventObject.type === dragonBones.EventObject.SOUND_EVENT) {
|
||
this._eventManager._dispatchEvent(eventObject.type, eventObject);
|
||
}
|
||
eventObject.returnToPool();
|
||
}
|
||
this._events.length = 0;
|
||
}
|
||
// Actions.
|
||
l = this._actions.length;
|
||
if (l > 0) {
|
||
for (i = 0; i < l; ++i) {
|
||
var action = this._actions[i];
|
||
if (action.slot) {
|
||
var slot = this.getSlot(action.slot.name);
|
||
if (slot) {
|
||
var childArmature = slot.childArmature;
|
||
if (childArmature) {
|
||
childArmature._doAction(action);
|
||
}
|
||
}
|
||
}
|
||
else if (action.bone) {
|
||
for (var iA = 0, lA = this._slots.length; iA < lA; ++iA) {
|
||
var childArmature = this._slots[iA].childArmature;
|
||
if (childArmature) {
|
||
childArmature._doAction(action);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
this._doAction(action);
|
||
}
|
||
}
|
||
this._actions.length = 0;
|
||
}
|
||
this._lockDispose = false;
|
||
}
|
||
if (this._delayDispose) {
|
||
this.returnToPool();
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 更新骨骼和插槽。 (当骨骼没有动画状态或动画状态播放完成时,骨骼将不在更新)
|
||
* @param boneName 指定的骨骼名称,如果未设置,将更新所有骨骼。
|
||
* @param updateSlotDisplay 是否更新插槽的显示对象。
|
||
* @see dragonBones.Bone
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.invalidUpdate = function (boneName, updateSlotDisplay) {
|
||
if (boneName === void 0) { boneName = null; }
|
||
if (updateSlotDisplay === void 0) { updateSlotDisplay = false; }
|
||
if (boneName) {
|
||
var bone = this.getBone(boneName);
|
||
if (bone) {
|
||
bone.invalidUpdate();
|
||
if (updateSlotDisplay) {
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
if (slot.parent === bone) {
|
||
slot.invalidUpdate();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
for (var i = 0, l = this._bones.length; i < l; ++i) {
|
||
this._bones[i].invalidUpdate();
|
||
}
|
||
if (updateSlotDisplay) {
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
this._slots[i].invalidUpdate();
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 判断点是否在所有插槽的自定义包围盒内。
|
||
* @param x 点的水平坐标。(骨架内坐标系)
|
||
* @param y 点的垂直坐标。(骨架内坐标系)
|
||
* @version DragonBones 5.0
|
||
*/
|
||
Armature.prototype.containsPoint = function (x, y) {
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
if (slot.containsPoint(x, y)) {
|
||
return slot;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 判断线段是否与骨架的所有插槽的自定义包围盒相交。
|
||
* @param xA 线段起点的水平坐标。(骨架内坐标系)
|
||
* @param yA 线段起点的垂直坐标。(骨架内坐标系)
|
||
* @param xB 线段终点的水平坐标。(骨架内坐标系)
|
||
* @param yB 线段终点的垂直坐标。(骨架内坐标系)
|
||
* @param intersectionPointA 线段从起点到终点与包围盒相交的第一个交点。(骨架内坐标系)
|
||
* @param intersectionPointB 线段从终点到起点与包围盒相交的第一个交点。(骨架内坐标系)
|
||
* @param normalRadians 碰撞点处包围盒切线的法线弧度。 [x: 第一个碰撞点处切线的法线弧度, y: 第二个碰撞点处切线的法线弧度]
|
||
* @returns 线段从起点到终点相交的第一个自定义包围盒的插槽。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
Armature.prototype.intersectsSegment = function (xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians) {
|
||
if (intersectionPointA === void 0) { intersectionPointA = null; }
|
||
if (intersectionPointB === void 0) { intersectionPointB = null; }
|
||
if (normalRadians === void 0) { normalRadians = null; }
|
||
var isV = xA === xB;
|
||
var dMin = 0.0;
|
||
var dMax = 0.0;
|
||
var intXA = 0.0;
|
||
var intYA = 0.0;
|
||
var intXB = 0.0;
|
||
var intYB = 0.0;
|
||
var intAN = 0.0;
|
||
var intBN = 0.0;
|
||
var intSlotA = null;
|
||
var intSlotB = null;
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
var intersectionCount = slot.intersectsSegment(xA, yA, xB, yB, intersectionPointA, intersectionPointB, normalRadians);
|
||
if (intersectionCount > 0) {
|
||
if (intersectionPointA || intersectionPointB) {
|
||
if (intersectionPointA) {
|
||
var d = isV ? intersectionPointA.y - yA : intersectionPointA.x - xA;
|
||
if (d < 0.0) {
|
||
d = -d;
|
||
}
|
||
if (!intSlotA || d < dMin) {
|
||
dMin = d;
|
||
intXA = intersectionPointA.x;
|
||
intYA = intersectionPointA.y;
|
||
intSlotA = slot;
|
||
if (normalRadians) {
|
||
intAN = normalRadians.x;
|
||
}
|
||
}
|
||
}
|
||
if (intersectionPointB) {
|
||
var d = intersectionPointB.x - xA;
|
||
if (d < 0.0) {
|
||
d = -d;
|
||
}
|
||
if (!intSlotB || d > dMax) {
|
||
dMax = d;
|
||
intXB = intersectionPointB.x;
|
||
intYB = intersectionPointB.y;
|
||
intSlotB = slot;
|
||
if (normalRadians) {
|
||
intBN = normalRadians.y;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
intSlotA = slot;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (intSlotA && intersectionPointA) {
|
||
intersectionPointA.x = intXA;
|
||
intersectionPointA.y = intYA;
|
||
if (normalRadians) {
|
||
normalRadians.x = intAN;
|
||
}
|
||
}
|
||
if (intSlotB && intersectionPointB) {
|
||
intersectionPointB.x = intXB;
|
||
intersectionPointB.y = intYB;
|
||
if (normalRadians) {
|
||
normalRadians.y = intBN;
|
||
}
|
||
}
|
||
return intSlotA;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取指定名称的骨骼。
|
||
* @param name 骨骼的名称。
|
||
* @returns 骨骼。
|
||
* @see dragonBones.Bone
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getBone = function (name) {
|
||
for (var i = 0, l = this._bones.length; i < l; ++i) {
|
||
var bone = this._bones[i];
|
||
if (bone.name === name) {
|
||
return bone;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 通过显示对象获取骨骼。
|
||
* @param display 显示对象。
|
||
* @returns 包含这个显示对象的骨骼。
|
||
* @see dragonBones.Bone
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getBoneByDisplay = function (display) {
|
||
var slot = this.getSlotByDisplay(display);
|
||
return slot ? slot.parent : null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取插槽。
|
||
* @param name 插槽的名称。
|
||
* @returns 插槽。
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getSlot = function (name) {
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
if (slot.name === name) {
|
||
return slot;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 通过显示对象获取插槽。
|
||
* @param display 显示对象。
|
||
* @returns 包含这个显示对象的插槽。
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getSlotByDisplay = function (display) {
|
||
if (display) {
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
if (slot.display === display) {
|
||
return slot;
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
Armature.prototype.addBone = function (value, parentName) {
|
||
if (parentName === void 0) { parentName = null; }
|
||
if (value) {
|
||
value._setArmature(this);
|
||
value._setParent(parentName ? this.getBone(parentName) : null);
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
Armature.prototype.removeBone = function (value) {
|
||
if (value && value.armature === this) {
|
||
value._setParent(null);
|
||
value._setArmature(null);
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
Armature.prototype.addSlot = function (value, parentName) {
|
||
var bone = this.getBone(parentName);
|
||
if (bone) {
|
||
value._setArmature(this);
|
||
value._setParent(bone);
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
Armature.prototype.removeSlot = function (value) {
|
||
if (value && value.armature === this) {
|
||
value._setParent(null);
|
||
value._setArmature(null);
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 替换骨架的主贴图,根据渲染引擎的不同,提供不同的贴图类型。
|
||
* @param texture 贴图。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Armature.prototype.replaceTexture = function (texture) {
|
||
this.replacedTexture = texture;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取所有骨骼。
|
||
* @see dragonBones.Bone
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getBones = function () {
|
||
return this._bones;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取所有插槽。
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Armature.prototype.getSlots = function () {
|
||
return this._slots;
|
||
};
|
||
Object.defineProperty(Armature.prototype, "name", {
|
||
/**
|
||
* @language zh_CN
|
||
* 骨架名称。
|
||
* @see dragonBones.ArmatureData#name
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._armatureData ? this._armatureData.name : null;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "armatureData", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获取骨架数据。
|
||
* @see dragonBones.ArmatureData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._armatureData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "animation", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获得动画控制器。
|
||
* @see dragonBones.Animation
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._animation;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "eventDispatcher", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获取事件监听器。
|
||
* @version DragonBones 5.0
|
||
*/
|
||
get: function () {
|
||
return this._proxy;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "display", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获取显示容器,插槽的显示对象都会以此显示容器为父级,根据渲染平台的不同,类型会不同,通常是 DisplayObjectContainer 类型。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._display;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "parent", {
|
||
/**
|
||
* @language zh_CN
|
||
* 获取父插槽。 (当此骨架是某个骨架的子骨架时,可以通过此属性向上查找从属关系)
|
||
* @see dragonBones.Slot
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._parent;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "flipX", {
|
||
get: function () {
|
||
return this._flipX;
|
||
},
|
||
set: function (value) {
|
||
if (this._flipX === value) {
|
||
return;
|
||
}
|
||
this._flipX = value;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "flipY", {
|
||
get: function () {
|
||
return this._flipY;
|
||
},
|
||
set: function (value) {
|
||
if (this._flipY === value) {
|
||
return;
|
||
}
|
||
this._flipY = value;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "cacheFrameRate", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画缓存帧率,当设置的值大于 0 的时,将会开启动画缓存。
|
||
* 通过将动画数据缓存在内存中来提高运行性能,会有一定的内存开销。
|
||
* 帧率不宜设置的过高,通常跟动画的帧率相当且低于程序运行的帧率。
|
||
* 开启动画缓存后,某些功能将会失效,比如 Bone 和 Slot 的 offset 属性等。
|
||
* @see dragonBones.DragonBonesData#frameRate
|
||
* @see dragonBones.ArmatureData#frameRate
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._armatureData.cacheFrameRate;
|
||
},
|
||
set: function (value) {
|
||
if (this._armatureData.cacheFrameRate !== value) {
|
||
this._armatureData.cacheFrames(value);
|
||
// Set child armature frameRate.
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var childArmature = this._slots[i].childArmature;
|
||
if (childArmature) {
|
||
childArmature.cacheFrameRate = value;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "clock", {
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
get: function () {
|
||
return this._clock;
|
||
},
|
||
set: function (value) {
|
||
if (this._clock === value) {
|
||
return;
|
||
}
|
||
var prevClock = this._clock;
|
||
if (prevClock) {
|
||
prevClock.remove(this);
|
||
}
|
||
this._clock = value;
|
||
if (this._clock) {
|
||
this._clock.add(this);
|
||
}
|
||
// Update childArmature clock.
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var childArmature = this._slots[i].childArmature;
|
||
if (childArmature) {
|
||
childArmature.clock = this._clock;
|
||
}
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Armature.prototype, "replacedTexture", {
|
||
/**
|
||
* @language zh_CN
|
||
* 替换骨架的主贴图,根据渲染引擎的不同,提供不同的贴图数据。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._replacedTexture;
|
||
},
|
||
set: function (value) {
|
||
if (this._replacedTexture === value) {
|
||
return;
|
||
}
|
||
if (this._replaceTextureAtlasData) {
|
||
this._replaceTextureAtlasData.returnToPool();
|
||
this._replaceTextureAtlasData = null;
|
||
}
|
||
this._replacedTexture = value;
|
||
for (var i = 0, l = this._slots.length; i < l; ++i) {
|
||
var slot = this._slots[i];
|
||
slot.invalidUpdate();
|
||
slot._update(-1);
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.Armature#eventDispatcher
|
||
*/
|
||
Armature.prototype.hasEventListener = function (type) {
|
||
return this._proxy.hasEvent(type);
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.Armature#eventDispatcher
|
||
*/
|
||
Armature.prototype.addEventListener = function (type, listener, target) {
|
||
this._proxy.addEvent(type, listener, target);
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.Armature#eventDispatcher
|
||
*/
|
||
Armature.prototype.removeEventListener = function (type, listener, target) {
|
||
this._proxy.removeEvent(type, listener, target);
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see #cacheFrameRate
|
||
*/
|
||
Armature.prototype.enableAnimationCache = function (frameRate) {
|
||
this.cacheFrameRate = frameRate;
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see #display
|
||
*/
|
||
Armature.prototype.getDisplay = function () {
|
||
return this._display;
|
||
};
|
||
return Armature;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.Armature = Armature;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画控制器,用来播放动画数据,管理动画状态。
|
||
* @see dragonBones.AnimationData
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var Animation = (function (_super) {
|
||
__extends(Animation, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function Animation() {
|
||
var _this = _super.call(this) || this;
|
||
_this._animationNames = [];
|
||
_this._animations = {};
|
||
_this._animationStates = [];
|
||
return _this;
|
||
}
|
||
Animation._sortAnimationState = function (a, b) {
|
||
return a.layer > b.layer ? -1 : 1;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Animation.toString = function () {
|
||
return "[class dragonBones.Animation]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
Animation.prototype._onClear = function () {
|
||
for (var i = 0, l = this._animationStates.length; i < l; ++i) {
|
||
this._animationStates[i].returnToPool();
|
||
}
|
||
if (this._animationConfig) {
|
||
this._animationConfig.returnToPool();
|
||
}
|
||
for (var k in this._animations) {
|
||
delete this._animations[k];
|
||
}
|
||
this.timeScale = 1.0;
|
||
this._isPlaying = false;
|
||
this._animationStateDirty = false;
|
||
this._timelineStateDirty = false;
|
||
this._cacheFrameIndex = -1;
|
||
this._animationNames.length = 0;
|
||
//this._animations.clear();
|
||
this._animationStates.length = 0;
|
||
this._armature = null;
|
||
this._lastAnimationState = null;
|
||
this._animationConfig = null;
|
||
};
|
||
Animation.prototype._fadeOut = function (animationConfig) {
|
||
var i = 0, l = this._animationStates.length;
|
||
var animationState = null;
|
||
switch (animationConfig.fadeOutMode) {
|
||
case 1 /* SameLayer */:
|
||
for (; i < l; ++i) {
|
||
animationState = this._animationStates[i];
|
||
if (animationState.layer === animationConfig.layer) {
|
||
animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
|
||
}
|
||
}
|
||
break;
|
||
case 2 /* SameGroup */:
|
||
for (; i < l; ++i) {
|
||
animationState = this._animationStates[i];
|
||
if (animationState.group === animationConfig.group) {
|
||
animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
|
||
}
|
||
}
|
||
break;
|
||
case 3 /* SameLayerAndGroup */:
|
||
for (; i < l; ++i) {
|
||
animationState = this._animationStates[i];
|
||
if (animationState.layer === animationConfig.layer &&
|
||
animationState.group === animationConfig.group) {
|
||
animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
|
||
}
|
||
}
|
||
break;
|
||
case 4 /* All */:
|
||
for (; i < l; ++i) {
|
||
animationState = this._animationStates[i];
|
||
animationState.fadeOut(animationConfig.fadeOutTime, animationConfig.pauseFadeOut);
|
||
}
|
||
break;
|
||
case 0 /* None */:
|
||
default:
|
||
break;
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Animation.prototype._init = function (armature) {
|
||
if (this._armature) {
|
||
return;
|
||
}
|
||
this._armature = armature;
|
||
this._animationConfig = dragonBones.BaseObject.borrowObject(dragonBones.AnimationConfig);
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
Animation.prototype._advanceTime = function (passedTime) {
|
||
if (!this._isPlaying) {
|
||
return;
|
||
}
|
||
if (passedTime < 0.0) {
|
||
passedTime = -passedTime;
|
||
}
|
||
if (this._armature.inheritAnimation && this._armature._parent) {
|
||
passedTime *= this._armature._parent._armature.animation.timeScale;
|
||
}
|
||
if (this.timeScale !== 1.0) {
|
||
passedTime *= this.timeScale;
|
||
}
|
||
var animationStateCount = this._animationStates.length;
|
||
if (animationStateCount === 1) {
|
||
var animationState = this._animationStates[0];
|
||
if (animationState._fadeState > 0 && animationState._subFadeState > 0) {
|
||
animationState.returnToPool();
|
||
this._animationStates.length = 0;
|
||
this._animationStateDirty = true;
|
||
this._lastAnimationState = null;
|
||
}
|
||
else {
|
||
var animationData = animationState.animationData;
|
||
var cacheFrameRate = animationData.cacheFrameRate;
|
||
if (this._animationStateDirty && cacheFrameRate > 0.0) {
|
||
this._animationStateDirty = false;
|
||
var bones = this._armature.getBones();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
bone._cachedFrameIndices = animationData.getBoneCachedFrameIndices(bone.name);
|
||
}
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slot = slots[i];
|
||
slot._cachedFrameIndices = animationData.getSlotCachedFrameIndices(slot.name);
|
||
}
|
||
}
|
||
if (this._timelineStateDirty) {
|
||
animationState._updateTimelineStates();
|
||
}
|
||
animationState._advanceTime(passedTime, cacheFrameRate);
|
||
}
|
||
}
|
||
else if (animationStateCount > 1) {
|
||
for (var i = 0, r = 0; i < animationStateCount; ++i) {
|
||
var animationState = this._animationStates[i];
|
||
if (animationState._fadeState > 0 && animationState._subFadeState > 0) {
|
||
r++;
|
||
animationState.returnToPool();
|
||
this._animationStateDirty = true;
|
||
if (this._lastAnimationState === animationState) {
|
||
this._lastAnimationState = null;
|
||
}
|
||
}
|
||
else {
|
||
if (r > 0) {
|
||
this._animationStates[i - r] = animationState;
|
||
}
|
||
if (this._timelineStateDirty) {
|
||
animationState._updateTimelineStates();
|
||
}
|
||
animationState._advanceTime(passedTime, 0.0);
|
||
}
|
||
if (i === animationStateCount - 1 && r > 0) {
|
||
this._animationStates.length -= r;
|
||
if (!this._lastAnimationState && this._animationStates.length > 0) {
|
||
this._lastAnimationState = this._animationStates[this._animationStates.length - 1];
|
||
}
|
||
}
|
||
}
|
||
this._cacheFrameIndex = -1;
|
||
}
|
||
else {
|
||
this._cacheFrameIndex = -1;
|
||
}
|
||
this._timelineStateDirty = false;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 清除所有动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.reset = function () {
|
||
for (var i = 0, l = this._animationStates.length; i < l; ++i) {
|
||
this._animationStates[i].returnToPool();
|
||
}
|
||
this._isPlaying = false;
|
||
this._animationStateDirty = false;
|
||
this._timelineStateDirty = false;
|
||
this._cacheFrameIndex = -1;
|
||
this._animationConfig.clear();
|
||
this._animationStates.length = 0;
|
||
this._lastAnimationState = null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 暂停播放动画。
|
||
* @param animationName 动画状态的名称,如果未设置,则暂停所有动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Animation.prototype.stop = function (animationName) {
|
||
if (animationName === void 0) { animationName = null; }
|
||
if (animationName) {
|
||
var animationState = this.getState(animationName);
|
||
if (animationState) {
|
||
animationState.stop();
|
||
}
|
||
}
|
||
else {
|
||
this._isPlaying = false;
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* @beta
|
||
* 通过动画配置来播放动画。
|
||
* @param animationConfig 动画配置。
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationConfig
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 5.0
|
||
*/
|
||
Animation.prototype.playConfig = function (animationConfig) {
|
||
if (!animationConfig) {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
//return null;
|
||
}
|
||
var animationName = animationConfig.animation ? animationConfig.animation : animationConfig.name;
|
||
var animationData = this._animations[animationName];
|
||
if (!animationData) {
|
||
console.warn("Non-existent animation.\n", "DragonBones name: " + this._armature.armatureData.parent.name, "Armature name: " + this._armature.name, "Animation name: " + animationName);
|
||
return null;
|
||
}
|
||
this._isPlaying = true;
|
||
if (animationConfig.fadeInTime < 0.0 || animationConfig.fadeInTime !== animationConfig.fadeInTime) {
|
||
if (this._lastAnimationState) {
|
||
animationConfig.fadeInTime = animationData.fadeInTime;
|
||
}
|
||
else {
|
||
animationConfig.fadeInTime = 0.0;
|
||
}
|
||
}
|
||
if (animationConfig.fadeOutTime < 0.0 || animationConfig.fadeOutTime !== animationConfig.fadeOutTime) {
|
||
animationConfig.fadeOutTime = animationConfig.fadeInTime;
|
||
}
|
||
if (animationConfig.timeScale <= -100.0 || animationConfig.timeScale !== animationConfig.timeScale) {
|
||
animationConfig.timeScale = 1.0 / animationData.scale;
|
||
}
|
||
if (animationData.frameCount > 1) {
|
||
if (animationConfig.position !== animationConfig.position) {
|
||
animationConfig.position = 0.0;
|
||
}
|
||
else if (animationConfig.position < 0.0) {
|
||
animationConfig.position %= animationData.duration;
|
||
animationConfig.position = animationData.duration - animationConfig.position;
|
||
}
|
||
else if (animationConfig.position === animationData.duration) {
|
||
animationConfig.position -= 0.000001;
|
||
}
|
||
else if (animationConfig.position > animationData.duration) {
|
||
animationConfig.position %= animationData.duration;
|
||
}
|
||
if (animationConfig.duration > 0.0 && animationConfig.position + animationConfig.duration > animationData.duration) {
|
||
animationConfig.duration = animationData.duration - animationConfig.position;
|
||
}
|
||
if (animationConfig.playTimes < 0) {
|
||
animationConfig.playTimes = animationData.playTimes;
|
||
}
|
||
}
|
||
else {
|
||
animationConfig.playTimes = 1;
|
||
animationConfig.position = 0.0;
|
||
if (animationConfig.duration > 0.0) {
|
||
animationConfig.duration = 0.0;
|
||
}
|
||
}
|
||
var isStop = false;
|
||
if (animationConfig.duration === 0.0) {
|
||
animationConfig.duration = -1.0;
|
||
isStop = true;
|
||
}
|
||
this._fadeOut(animationConfig);
|
||
this._lastAnimationState = dragonBones.BaseObject.borrowObject(dragonBones.AnimationState);
|
||
this._lastAnimationState._init(this._armature, animationData, animationConfig);
|
||
this._animationStates.push(this._lastAnimationState);
|
||
this._animationStateDirty = true;
|
||
this._cacheFrameIndex = -1;
|
||
if (this._animationStates.length > 1) {
|
||
this._animationStates.sort(Animation._sortAnimationState);
|
||
}
|
||
// Child armature play same name animation.
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var childArmature = slots[i].childArmature;
|
||
if (childArmature && childArmature.inheritAnimation &&
|
||
childArmature.animation.hasAnimation(animationName) &&
|
||
!childArmature.animation.getState(animationName)) {
|
||
childArmature.animation.fadeIn(animationName); //
|
||
}
|
||
}
|
||
if (animationConfig.fadeInTime <= 0.0) {
|
||
this._armature.advanceTime(0.0);
|
||
}
|
||
if (isStop) {
|
||
this._lastAnimationState.stop();
|
||
}
|
||
return this._lastAnimationState;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 淡入播放动画。
|
||
* @param animationName 动画数据名称。
|
||
* @param playTimes 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
|
||
* @param fadeInTime 淡入时间。 [-1: 使用动画数据默认值, [0~N]: 淡入时间] (以秒为单位)
|
||
* @param layer 混合图层,图层高会优先获取混合权重。
|
||
* @param group 混合组,用于动画状态编组,方便控制淡出。
|
||
* @param fadeOutMode 淡出模式。
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationFadeOutMode
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.fadeIn = function (animationName, fadeInTime, playTimes, layer, group, fadeOutMode) {
|
||
if (fadeInTime === void 0) { fadeInTime = -1.0; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
if (layer === void 0) { layer = 0; }
|
||
if (group === void 0) { group = null; }
|
||
if (fadeOutMode === void 0) { fadeOutMode = 3 /* SameLayerAndGroup */; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.fadeOutMode = fadeOutMode;
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.layer = layer;
|
||
this._animationConfig.fadeInTime = fadeInTime;
|
||
this._animationConfig.animation = animationName;
|
||
this._animationConfig.group = group;
|
||
return this.playConfig(this._animationConfig);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 播放动画。
|
||
* @param animationName 动画数据名称,如果未设置,则播放默认动画,或将暂停状态切换为播放状态,或重新播放上一个正在播放的动画。
|
||
* @param playTimes 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Animation.prototype.play = function (animationName, playTimes) {
|
||
if (animationName === void 0) { animationName = null; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.fadeInTime = 0.0;
|
||
this._animationConfig.animation = animationName;
|
||
if (animationName) {
|
||
this.playConfig(this._animationConfig);
|
||
}
|
||
else if (!this._lastAnimationState) {
|
||
var defaultAnimation = this._armature.armatureData.defaultAnimation;
|
||
if (defaultAnimation) {
|
||
this._animationConfig.animation = defaultAnimation.name;
|
||
this.playConfig(this._animationConfig);
|
||
}
|
||
}
|
||
else if (!this._isPlaying || (!this._lastAnimationState.isPlaying && !this._lastAnimationState.isCompleted)) {
|
||
this._isPlaying = true;
|
||
this._lastAnimationState.play();
|
||
}
|
||
else {
|
||
this._animationConfig.animation = this._lastAnimationState.name;
|
||
this.playConfig(this._animationConfig);
|
||
}
|
||
return this._lastAnimationState;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 从指定时间开始播放动画。
|
||
* @param animationName 动画数据的名称。
|
||
* @param time 开始时间。 (以秒为单位)
|
||
* @param playTimes 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndPlayByTime = function (animationName, time, playTimes) {
|
||
if (time === void 0) { time = 0.0; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.position = time;
|
||
this._animationConfig.fadeInTime = 0.0;
|
||
this._animationConfig.animation = animationName;
|
||
return this.playConfig(this._animationConfig);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 从指定帧开始播放动画。
|
||
* @param animationName 动画数据的名称。
|
||
* @param frame 帧。
|
||
* @param playTimes 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndPlayByFrame = function (animationName, frame, playTimes) {
|
||
if (frame === void 0) { frame = 0; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.fadeInTime = 0.0;
|
||
this._animationConfig.animation = animationName;
|
||
var animationData = this._animations[animationName];
|
||
if (animationData) {
|
||
this._animationConfig.position = animationData.duration * frame / animationData.frameCount;
|
||
}
|
||
return this.playConfig(this._animationConfig);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 从指定进度开始播放动画。
|
||
* @param animationName 动画数据的名称。
|
||
* @param progress 进度。 [0~1]
|
||
* @param playTimes 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndPlayByProgress = function (animationName, progress, playTimes) {
|
||
if (progress === void 0) { progress = 0.0; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.fadeInTime = 0.0;
|
||
this._animationConfig.animation = animationName;
|
||
var animationData = this._animations[animationName];
|
||
if (animationData) {
|
||
this._animationConfig.position = animationData.duration * (progress > 0.0 ? progress : 0.0);
|
||
}
|
||
return this.playConfig(this._animationConfig);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将动画停止到指定的时间。
|
||
* @param animationName 动画数据的名称。
|
||
* @param time 时间。 (以秒为单位)
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndStopByTime = function (animationName, time) {
|
||
if (time === void 0) { time = 0.0; }
|
||
var animationState = this.gotoAndPlayByTime(animationName, time, 1);
|
||
if (animationState) {
|
||
animationState.stop();
|
||
}
|
||
return animationState;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将动画停止到指定的帧。
|
||
* @param animationName 动画数据的名称。
|
||
* @param frame 帧。
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndStopByFrame = function (animationName, frame) {
|
||
if (frame === void 0) { frame = 0; }
|
||
var animationState = this.gotoAndPlayByFrame(animationName, frame, 1);
|
||
if (animationState) {
|
||
animationState.stop();
|
||
}
|
||
return animationState;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将动画停止到指定的进度。
|
||
* @param animationName 动画数据的名称。
|
||
* @param progress 进度。 [0 ~ 1]
|
||
* @returns 对应的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 4.5
|
||
*/
|
||
Animation.prototype.gotoAndStopByProgress = function (animationName, progress) {
|
||
if (progress === void 0) { progress = 0.0; }
|
||
var animationState = this.gotoAndPlayByProgress(animationName, progress, 1);
|
||
if (animationState) {
|
||
animationState.stop();
|
||
}
|
||
return animationState;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取动画状态。
|
||
* @param animationName 动画状态的名称。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Animation.prototype.getState = function (animationName) {
|
||
for (var i = 0, l = this._animationStates.length; i < l; ++i) {
|
||
var animationState = this._animationStates[i];
|
||
if (animationState.name === animationName) {
|
||
return animationState;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 是否包含动画数据。
|
||
* @param animationName 动画数据的名称。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
Animation.prototype.hasAnimation = function (animationName) {
|
||
return this._animations[animationName] != null;
|
||
};
|
||
Object.defineProperty(Animation.prototype, "isPlaying", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画是否处于播放状态。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
if (this._animationStates.length > 1) {
|
||
return this._isPlaying && !this.isCompleted;
|
||
}
|
||
else if (this._lastAnimationState) {
|
||
return this._isPlaying && this._lastAnimationState.isPlaying;
|
||
}
|
||
return this._isPlaying;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "isCompleted", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所有动画状态是否均已播放完毕。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
if (this._lastAnimationState) {
|
||
if (!this._lastAnimationState.isCompleted) {
|
||
return false;
|
||
}
|
||
for (var i = 0, l = this._animationStates.length; i < l; ++i) {
|
||
if (!this._animationStates[i].isCompleted) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "lastAnimationName", {
|
||
/**
|
||
* @language zh_CN
|
||
* 上一个正在播放的动画状态名称。
|
||
* @see #lastAnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._lastAnimationState ? this._lastAnimationState.name : null;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "lastAnimationState", {
|
||
/**
|
||
* @language zh_CN
|
||
* 上一个正在播放的动画状态。
|
||
* @see dragonBones.AnimationState
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._lastAnimationState;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "animationConfig", {
|
||
/**
|
||
* @language zh_CN
|
||
* 一个可以快速使用的动画配置实例。
|
||
* @see dragonBones.AnimationConfig
|
||
* @version DragonBones 5.0
|
||
*/
|
||
get: function () {
|
||
this._animationConfig.clear();
|
||
return this._animationConfig;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "animationNames", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所有动画数据名称。
|
||
* @see #animations
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._animationNames;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "animations", {
|
||
/**
|
||
* @language zh_CN
|
||
* 所有动画数据。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
get: function () {
|
||
return this._animations;
|
||
},
|
||
set: function (value) {
|
||
if (this._animations === value) {
|
||
return;
|
||
}
|
||
this._animationNames.length = 0;
|
||
for (var k in this._animations) {
|
||
delete this._animations[k];
|
||
}
|
||
if (value) {
|
||
for (var k in value) {
|
||
this._animations[k] = value[k];
|
||
this._animationNames.push(k);
|
||
}
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/**
|
||
* @deprecated
|
||
* @see #play()
|
||
* @see #fadeIn()
|
||
* @see #gotoAndPlayByTime()
|
||
* @see #gotoAndPlayByFrame()
|
||
* @see #gotoAndPlayByProgress()
|
||
*/
|
||
Animation.prototype.gotoAndPlay = function (animationName, fadeInTime, duration, playTimes, layer, group, fadeOutMode, pauseFadeOut, pauseFadeIn) {
|
||
if (fadeInTime === void 0) { fadeInTime = -1; }
|
||
if (duration === void 0) { duration = -1; }
|
||
if (playTimes === void 0) { playTimes = -1; }
|
||
if (layer === void 0) { layer = 0; }
|
||
if (group === void 0) { group = null; }
|
||
if (fadeOutMode === void 0) { fadeOutMode = 3 /* SameLayerAndGroup */; }
|
||
if (pauseFadeOut === void 0) { pauseFadeOut = true; }
|
||
if (pauseFadeIn === void 0) { pauseFadeIn = true; }
|
||
this._animationConfig.clear();
|
||
this._animationConfig.fadeOutMode = fadeOutMode;
|
||
this._animationConfig.playTimes = playTimes;
|
||
this._animationConfig.layer = layer;
|
||
this._animationConfig.fadeInTime = fadeInTime;
|
||
this._animationConfig.animation = animationName;
|
||
this._animationConfig.group = group;
|
||
var animationData = this._animations[animationName];
|
||
if (animationData && duration > 0.0) {
|
||
this._animationConfig.timeScale = animationData.duration / duration;
|
||
}
|
||
return this.playConfig(this._animationConfig);
|
||
};
|
||
/**
|
||
* @deprecated
|
||
* @see #gotoAndStopByTime()
|
||
* @see #gotoAndStopByFrame()
|
||
* @see #gotoAndStopByProgress()
|
||
*/
|
||
Animation.prototype.gotoAndStop = function (animationName, time) {
|
||
if (time === void 0) { time = 0; }
|
||
return this.gotoAndStopByTime(animationName, time);
|
||
};
|
||
Object.defineProperty(Animation.prototype, "animationList", {
|
||
/**
|
||
* @deprecated
|
||
* @see #animationNames
|
||
* @see #animations
|
||
*/
|
||
get: function () {
|
||
return this._animationNames;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(Animation.prototype, "animationDataList", {
|
||
/**
|
||
* @deprecated
|
||
* @see #animationNames
|
||
* @see #animations
|
||
*/
|
||
get: function () {
|
||
var list = [];
|
||
for (var i = 0, l = this._animationNames.length; i < l; ++i) {
|
||
list.push(this._animations[this._animationNames[i]]);
|
||
}
|
||
return list;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return Animation;
|
||
}(dragonBones.BaseObject));
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.AnimationFadeOutMode.None
|
||
*/
|
||
Animation.None = 0 /* None */;
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.AnimationFadeOutMode.SameLayer
|
||
*/
|
||
Animation.SameLayer = 1 /* SameLayer */;
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.AnimationFadeOutMode.SameGroup
|
||
*/
|
||
Animation.SameGroup = 2 /* SameGroup */;
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.AnimationFadeOutMode.SameLayerAndGroup
|
||
*/
|
||
Animation.SameLayerAndGroup = 3 /* SameLayerAndGroup */;
|
||
/**
|
||
* @deprecated
|
||
* @see dragonBones.AnimationFadeOutMode.All
|
||
*/
|
||
Animation.All = 4 /* All */;
|
||
dragonBones.Animation = Animation;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画状态,播放动画时产生,可以对每个播放的动画进行更细致的控制和调节。
|
||
* @see dragonBones.Animation
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var AnimationState = (function (_super) {
|
||
__extends(AnimationState, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function AnimationState() {
|
||
var _this = _super.call(this) || this;
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._boneMask = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._animationNames = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._boneTimelines = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._slotTimelines = [];
|
||
/**
|
||
* @private
|
||
*/
|
||
_this._ffdTimelines = [];
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
_this.autoTween = false;
|
||
return _this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationState.toString = function () {
|
||
return "[class dragonBones.AnimationState]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
AnimationState.prototype._onClear = function () {
|
||
for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
|
||
this._boneTimelines[i].returnToPool();
|
||
}
|
||
for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
|
||
this._slotTimelines[i].returnToPool();
|
||
}
|
||
for (var i = 0, l = this._ffdTimelines.length; i < l; ++i) {
|
||
this._ffdTimelines[i].returnToPool();
|
||
}
|
||
if (this._timeline) {
|
||
this._timeline.returnToPool();
|
||
}
|
||
if (this._zOrderTimeline) {
|
||
this._zOrderTimeline.returnToPool();
|
||
}
|
||
this.displayControl = true;
|
||
this.additiveBlending = false;
|
||
this.actionEnabled = false;
|
||
this.playTimes = 1;
|
||
this.timeScale = 1.0;
|
||
this.weight = 1.0;
|
||
this.autoFadeOutTime = -1.0;
|
||
this.fadeTotalTime = 0.0;
|
||
this._playheadState = 0;
|
||
this._fadeState = -1;
|
||
this._subFadeState = -1;
|
||
this._layer = 0;
|
||
this._position = 0.0;
|
||
this._duration = 0.0;
|
||
this._fadeTime = 0.0;
|
||
this._time = 0.0;
|
||
this._fadeProgress = 0.0;
|
||
this._weightResult = 0.0;
|
||
this._name = null;
|
||
this._group = null;
|
||
this._boneMask.length = 0;
|
||
this._animationNames.length = 0;
|
||
this._boneTimelines.length = 0;
|
||
this._slotTimelines.length = 0;
|
||
this._ffdTimelines.length = 0;
|
||
this._animationData = null;
|
||
this._armature = null;
|
||
this._timeline = null;
|
||
this._zOrderTimeline = null;
|
||
};
|
||
AnimationState.prototype._advanceFadeTime = function (passedTime) {
|
||
var isFadeOut = this._fadeState > 0;
|
||
if (this._subFadeState < 0) {
|
||
this._subFadeState = 0;
|
||
var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT : dragonBones.EventObject.FADE_IN;
|
||
if (this._armature.eventDispatcher.hasEvent(eventType)) {
|
||
var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
eventObject.animationState = this;
|
||
this._armature._bufferEvent(eventObject, eventType);
|
||
}
|
||
}
|
||
if (passedTime < 0.0) {
|
||
passedTime = -passedTime;
|
||
}
|
||
this._fadeTime += passedTime;
|
||
if (this._fadeTime >= this.fadeTotalTime) {
|
||
this._subFadeState = 1;
|
||
this._fadeProgress = isFadeOut ? 0.0 : 1.0;
|
||
}
|
||
else if (this._fadeTime > 0.0) {
|
||
this._fadeProgress = isFadeOut ? (1.0 - this._fadeTime / this.fadeTotalTime) : (this._fadeTime / this.fadeTotalTime);
|
||
}
|
||
else {
|
||
this._fadeProgress = isFadeOut ? 1.0 : 0.0;
|
||
}
|
||
if (this._subFadeState > 0) {
|
||
if (!isFadeOut) {
|
||
this._playheadState |= 1; // x1
|
||
this._fadeState = 0;
|
||
}
|
||
var eventType = isFadeOut ? dragonBones.EventObject.FADE_OUT_COMPLETE : dragonBones.EventObject.FADE_IN_COMPLETE;
|
||
if (this._armature.eventDispatcher.hasEvent(eventType)) {
|
||
var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
eventObject.animationState = this;
|
||
this._armature._bufferEvent(eventObject, eventType);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
AnimationState.prototype._init = function (armature, animationData, animationConfig) {
|
||
this._armature = armature;
|
||
this._animationData = animationData;
|
||
this._name = animationConfig.name ? animationConfig.name : animationConfig.animation;
|
||
this.actionEnabled = animationConfig.actionEnabled;
|
||
this.additiveBlending = animationConfig.additiveBlending;
|
||
this.displayControl = animationConfig.displayControl;
|
||
this.playTimes = animationConfig.playTimes;
|
||
this.timeScale = animationConfig.timeScale;
|
||
this.fadeTotalTime = animationConfig.fadeInTime;
|
||
this.autoFadeOutTime = animationConfig.autoFadeOutTime;
|
||
this.weight = animationConfig.weight;
|
||
if (animationConfig.pauseFadeIn) {
|
||
this._playheadState = 2; // 10
|
||
}
|
||
else {
|
||
this._playheadState = 3; // 11
|
||
}
|
||
this._fadeState = -1;
|
||
this._subFadeState = -1;
|
||
this._layer = animationConfig.layer;
|
||
this._group = animationConfig.group;
|
||
if (animationConfig.duration < 0.0) {
|
||
this._position = 0.0;
|
||
this._duration = this._animationData.duration;
|
||
if (animationConfig.position !== 0.0) {
|
||
if (this.timeScale >= 0.0) {
|
||
this._time = animationConfig.position;
|
||
}
|
||
else {
|
||
this._time = animationConfig.position - this._duration;
|
||
}
|
||
}
|
||
else {
|
||
this._time = 0.0;
|
||
}
|
||
}
|
||
else {
|
||
this._position = animationConfig.position;
|
||
this._duration = animationConfig.duration;
|
||
this._time = 0.0;
|
||
}
|
||
if (this.timeScale < 0.0 && this._time === 0.0) {
|
||
this._time = -0.000001; // Can not cross last frame event.
|
||
}
|
||
if (this.fadeTotalTime <= 0.0) {
|
||
this._fadeProgress = 0.999999;
|
||
}
|
||
if (animationConfig.boneMask.length > 0) {
|
||
this._boneMask.length = animationConfig.boneMask.length;
|
||
for (var i = 0, l = this._boneMask.length; i < l; ++i) {
|
||
this._boneMask[i] = animationConfig.boneMask[i];
|
||
}
|
||
}
|
||
if (animationConfig.animationNames.length > 0) {
|
||
this._animationNames.length = animationConfig.animationNames.length;
|
||
for (var i = 0, l = this._animationNames.length; i < l; ++i) {
|
||
this._animationNames[i] = animationConfig.animationNames[i];
|
||
}
|
||
}
|
||
this._timeline = dragonBones.BaseObject.borrowObject(dragonBones.AnimationTimelineState);
|
||
this._timeline._init(this._armature, this, this._animationData);
|
||
if (this._animationData.zOrderTimeline) {
|
||
this._zOrderTimeline = dragonBones.BaseObject.borrowObject(dragonBones.ZOrderTimelineState);
|
||
this._zOrderTimeline._init(this._armature, this, this._animationData.zOrderTimeline);
|
||
}
|
||
this._updateTimelineStates();
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
AnimationState.prototype._updateTimelineStates = function () {
|
||
var boneTimelineStates = {};
|
||
var slotTimelineStates = {};
|
||
var ffdTimelineStates = {};
|
||
for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
|
||
var boneTimelineState = this._boneTimelines[i];
|
||
boneTimelineStates[boneTimelineState.bone.name] = boneTimelineState;
|
||
}
|
||
var bones = this._armature.getBones();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
var boneTimelineName = bone.name;
|
||
if (this.containsBoneMask(boneTimelineName)) {
|
||
var boneTimelineData = this._animationData.getBoneTimeline(boneTimelineName);
|
||
if (boneTimelineData) {
|
||
if (boneTimelineStates[boneTimelineName]) {
|
||
delete boneTimelineStates[boneTimelineName];
|
||
}
|
||
else {
|
||
var boneTimelineState = dragonBones.BaseObject.borrowObject(dragonBones.BoneTimelineState);
|
||
boneTimelineState.bone = bone;
|
||
boneTimelineState._init(this._armature, this, boneTimelineData);
|
||
this._boneTimelines.push(boneTimelineState);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
for (var k in boneTimelineStates) {
|
||
var boneTimelineState = boneTimelineStates[k];
|
||
boneTimelineState.bone.invalidUpdate(); //
|
||
this._boneTimelines.splice(this._boneTimelines.indexOf(boneTimelineState), 1);
|
||
boneTimelineState.returnToPool();
|
||
}
|
||
for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
|
||
var slotTimelineState = this._slotTimelines[i];
|
||
slotTimelineStates[slotTimelineState.slot.name] = slotTimelineState;
|
||
}
|
||
for (var i = 0, l = this._ffdTimelines.length; i < l; ++i) {
|
||
var ffdTimelineState = this._ffdTimelines[i];
|
||
var display = ffdTimelineState._timelineData.display;
|
||
var meshName = display.inheritAnimation ? display.mesh.name : display.name;
|
||
ffdTimelineStates[meshName] = ffdTimelineState;
|
||
}
|
||
var slots = this._armature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slot = slots[i];
|
||
var slotTimelineName = slot.name;
|
||
var parentTimelineName = slot.parent.name;
|
||
var resetFFDVertices = false;
|
||
if (this.containsBoneMask(parentTimelineName)) {
|
||
var slotTimelineData = this._animationData.getSlotTimeline(slotTimelineName);
|
||
if (slotTimelineData) {
|
||
if (slotTimelineStates[slotTimelineName]) {
|
||
delete slotTimelineStates[slotTimelineName];
|
||
}
|
||
else {
|
||
var slotTimelineState = dragonBones.BaseObject.borrowObject(dragonBones.SlotTimelineState);
|
||
slotTimelineState.slot = slot;
|
||
slotTimelineState._init(this._armature, this, slotTimelineData);
|
||
this._slotTimelines.push(slotTimelineState);
|
||
}
|
||
}
|
||
var ffdTimelineDatas = this._animationData.getFFDTimeline(this._armature._skinData.name, slotTimelineName);
|
||
if (ffdTimelineDatas) {
|
||
for (var k in ffdTimelineDatas) {
|
||
if (ffdTimelineStates[k]) {
|
||
delete ffdTimelineStates[k];
|
||
}
|
||
else {
|
||
var ffdTimelineState = dragonBones.BaseObject.borrowObject(dragonBones.FFDTimelineState);
|
||
ffdTimelineState.slot = slot;
|
||
ffdTimelineState._init(this._armature, this, ffdTimelineDatas[k]);
|
||
this._ffdTimelines.push(ffdTimelineState);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
resetFFDVertices = true;
|
||
}
|
||
}
|
||
else {
|
||
resetFFDVertices = true;
|
||
}
|
||
if (resetFFDVertices) {
|
||
for (var iA = 0, lA = slot._ffdVertices.length; iA < lA; ++iA) {
|
||
slot._ffdVertices[iA] = 0.0;
|
||
}
|
||
slot._meshDirty = true;
|
||
}
|
||
}
|
||
for (var k in slotTimelineStates) {
|
||
var slotTimelineState = slotTimelineStates[k];
|
||
this._slotTimelines.splice(this._slotTimelines.indexOf(slotTimelineState), 1);
|
||
slotTimelineState.returnToPool();
|
||
}
|
||
for (var k in ffdTimelineStates) {
|
||
var ffdTimelineState = ffdTimelineStates[k];
|
||
this._ffdTimelines.splice(this._ffdTimelines.indexOf(ffdTimelineState), 1);
|
||
ffdTimelineState.returnToPool();
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
AnimationState.prototype._advanceTime = function (passedTime, cacheFrameRate) {
|
||
// Update fade time.
|
||
if (this._fadeState !== 0 || this._subFadeState !== 0) {
|
||
this._advanceFadeTime(passedTime);
|
||
}
|
||
// Update time.
|
||
if (this.timeScale !== 1.0) {
|
||
passedTime *= this.timeScale;
|
||
}
|
||
if (passedTime !== 0.0 && this._playheadState === 3) {
|
||
this._time += passedTime;
|
||
}
|
||
// Weight.
|
||
if (this.weight !== 0.0) {
|
||
var isCacheEnabled = this._fadeState === 0 && cacheFrameRate > 0.0;
|
||
var isUpdatesTimeline = true;
|
||
var isUpdatesBoneTimeline = true;
|
||
var time = this._time;
|
||
this._weightResult = this.weight * this._fadeProgress;
|
||
// Update main timeline.
|
||
this._timeline.update(time);
|
||
// Cache time internval.
|
||
if (isCacheEnabled) {
|
||
var internval = cacheFrameRate * 2.0;
|
||
this._timeline._currentTime = Math.floor(this._timeline._currentTime * internval) / internval;
|
||
}
|
||
// Update zOrder timeline.
|
||
if (this._zOrderTimeline) {
|
||
this._zOrderTimeline.update(time);
|
||
}
|
||
// Update cache.
|
||
if (isCacheEnabled) {
|
||
var cacheFrameIndex = Math.floor(this._timeline._currentTime * cacheFrameRate); // uint
|
||
if (this._armature.animation._cacheFrameIndex === cacheFrameIndex) {
|
||
isUpdatesTimeline = false;
|
||
isUpdatesBoneTimeline = false;
|
||
}
|
||
else {
|
||
this._armature.animation._cacheFrameIndex = cacheFrameIndex;
|
||
if (this._animationData.cachedFrames[cacheFrameIndex]) {
|
||
isUpdatesBoneTimeline = false;
|
||
}
|
||
else {
|
||
this._animationData.cachedFrames[cacheFrameIndex] = true;
|
||
}
|
||
}
|
||
}
|
||
// Update timelines.
|
||
if (isUpdatesTimeline) {
|
||
if (isUpdatesBoneTimeline) {
|
||
for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
|
||
this._boneTimelines[i].update(time);
|
||
}
|
||
}
|
||
for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
|
||
this._slotTimelines[i].update(time);
|
||
}
|
||
for (var i = 0, l = this._ffdTimelines.length; i < l; ++i) {
|
||
this._ffdTimelines[i].update(time);
|
||
}
|
||
}
|
||
}
|
||
if (this._fadeState === 0) {
|
||
if (this._subFadeState > 0) {
|
||
this._subFadeState = 0;
|
||
}
|
||
if (this._timeline._playState > 0) {
|
||
// Auto fade out.
|
||
if (this.autoFadeOutTime >= 0.0) {
|
||
this.fadeOut(this.autoFadeOutTime);
|
||
}
|
||
if (this._animationNames.length > 0) {
|
||
// TODO
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
AnimationState.prototype._isDisabled = function (slot) {
|
||
if (this.displayControl &&
|
||
(!slot.displayController ||
|
||
slot.displayController === this._name ||
|
||
slot.displayController === this._group)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 继续播放。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.play = function () {
|
||
this._playheadState = 3; // 11
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 暂停播放。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.stop = function () {
|
||
this._playheadState &= 1; // 0x
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 淡出动画。
|
||
* @param fadeOutTime 淡出时间。 (以秒为单位)
|
||
* @param pausePlayhead 淡出时是否暂停动画。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.fadeOut = function (fadeOutTime, pausePlayhead) {
|
||
if (pausePlayhead === void 0) { pausePlayhead = true; }
|
||
if (fadeOutTime < 0.0 || fadeOutTime !== fadeOutTime) {
|
||
fadeOutTime = 0.0;
|
||
}
|
||
if (pausePlayhead) {
|
||
this._playheadState &= 2; // x0
|
||
}
|
||
if (this._fadeState > 0) {
|
||
if (fadeOutTime > this.fadeTotalTime - this._fadeTime) {
|
||
// If the animation is already in fade out, the new fade out will be ignored.
|
||
return;
|
||
}
|
||
}
|
||
else {
|
||
this._fadeState = 1;
|
||
this._subFadeState = -1;
|
||
if (fadeOutTime <= 0.0 || this._fadeProgress <= 0.0) {
|
||
this._fadeProgress = 0.000001; // Modify _fadeProgress to different value.
|
||
}
|
||
for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
|
||
this._boneTimelines[i].fadeOut();
|
||
}
|
||
for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
|
||
this._slotTimelines[i].fadeOut();
|
||
}
|
||
for (var i = 0, l = this._ffdTimelines.length; i < l; ++i) {
|
||
this._ffdTimelines[i].fadeOut();
|
||
}
|
||
}
|
||
this.displayControl = false; //
|
||
this.fadeTotalTime = this._fadeProgress > 0.000001 ? fadeOutTime / this._fadeProgress : 0.0;
|
||
this._fadeTime = this.fadeTotalTime * (1.0 - this._fadeProgress);
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 是否包含骨骼遮罩。
|
||
* @param name 指定的骨骼名称。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.containsBoneMask = function (name) {
|
||
return this._boneMask.length === 0 || this._boneMask.indexOf(name) >= 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 添加骨骼遮罩。
|
||
* @param boneName 指定的骨骼名称。
|
||
* @param recursive 是否为该骨骼的子骨骼添加遮罩。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.addBoneMask = function (name, recursive) {
|
||
if (recursive === void 0) { recursive = true; }
|
||
var currentBone = this._armature.getBone(name);
|
||
if (!currentBone) {
|
||
return;
|
||
}
|
||
if (this._boneMask.indexOf(name) < 0) {
|
||
this._boneMask.push(name);
|
||
}
|
||
if (recursive) {
|
||
var bones = this._armature.getBones();
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (this._boneMask.indexOf(bone.name) < 0 && currentBone.contains(bone)) {
|
||
this._boneMask.push(bone.name);
|
||
}
|
||
}
|
||
}
|
||
this._updateTimelineStates();
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 删除骨骼遮罩。
|
||
* @param boneName 指定的骨骼名称。
|
||
* @param recursive 是否删除该骨骼的子骨骼遮罩。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.removeBoneMask = function (name, recursive) {
|
||
if (recursive === void 0) { recursive = true; }
|
||
var index = this._boneMask.indexOf(name);
|
||
if (index >= 0) {
|
||
this._boneMask.splice(index, 1);
|
||
}
|
||
if (recursive) {
|
||
var currentBone = this._armature.getBone(name);
|
||
if (currentBone) {
|
||
var bones = this._armature.getBones();
|
||
if (this._boneMask.length > 0) {
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
var index_2 = this._boneMask.indexOf(bone.name);
|
||
if (index_2 >= 0 && currentBone.contains(bone)) {
|
||
this._boneMask.splice(index_2, 1);
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var bone = bones[i];
|
||
if (!currentBone.contains(bone)) {
|
||
this._boneMask.push(bone.name);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
this._updateTimelineStates();
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 删除所有骨骼遮罩。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
AnimationState.prototype.removeAllBoneMask = function () {
|
||
this._boneMask.length = 0;
|
||
this._updateTimelineStates();
|
||
};
|
||
Object.defineProperty(AnimationState.prototype, "layer", {
|
||
/**
|
||
* @language zh_CN
|
||
* 混合图层。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._layer;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "group", {
|
||
/**
|
||
* @language zh_CN
|
||
* 混合组。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._group;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "name", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画名称。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._name;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "animationData", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画数据。
|
||
* @see dragonBones.AnimationData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._animationData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "isCompleted", {
|
||
/**
|
||
* @language zh_CN
|
||
* 是否播放完毕。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._timeline._playState > 0;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "isPlaying", {
|
||
/**
|
||
* @language zh_CN
|
||
* 是否正在播放。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return (this._playheadState & 2) && this._timeline._playState <= 0;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "currentPlayTimes", {
|
||
/**
|
||
* @language zh_CN
|
||
* 当前播放次数。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._timeline._currentPlayTimes;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "totalTime", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画的总时间。 (以秒为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._duration;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "currentTime", {
|
||
/**
|
||
* @language zh_CN
|
||
* 动画播放的时间。 (以秒为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
return this._timeline._currentTime;
|
||
},
|
||
set: function (value) {
|
||
if (value !== value) {
|
||
value = 0.0;
|
||
}
|
||
var currentPlayTimes = this._timeline._currentPlayTimes - (this._timeline._playState > 0 ? 1 : 0);
|
||
value = (value % this._duration) + currentPlayTimes * this._duration;
|
||
if (value < 0) {
|
||
value += this._duration;
|
||
}
|
||
if (this._time === value) {
|
||
return;
|
||
}
|
||
this._time = value;
|
||
this._timeline.setCurrentTime(this._time);
|
||
if (this._zOrderTimeline) {
|
||
this._zOrderTimeline._playState = -1;
|
||
}
|
||
for (var i = 0, l = this._boneTimelines.length; i < l; ++i) {
|
||
this._boneTimelines[i]._playState = -1;
|
||
}
|
||
for (var i = 0, l = this._slotTimelines.length; i < l; ++i) {
|
||
this._slotTimelines[i]._playState = -1;
|
||
}
|
||
for (var i = 0, l = this._ffdTimelines.length; i < l; ++i) {
|
||
this._ffdTimelines[i]._playState = -1;
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(AnimationState.prototype, "clip", {
|
||
/**
|
||
* @deprecated
|
||
* @see #animationData
|
||
*/
|
||
get: function () {
|
||
return this._animationData;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return AnimationState;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.AnimationState = AnimationState;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var TimelineState = (function (_super) {
|
||
__extends(TimelineState, _super);
|
||
function TimelineState() {
|
||
return _super.call(this) || this;
|
||
}
|
||
TimelineState.prototype._onClear = function () {
|
||
this._playState = -1;
|
||
this._currentPlayTimes = 0;
|
||
this._currentTime = -1.0;
|
||
this._timelineData = null;
|
||
this._frameRate = 0;
|
||
this._frameCount = 0;
|
||
this._position = 0.0;
|
||
this._duration = 0.0;
|
||
this._animationDutation = 0.0;
|
||
this._timeScale = 1.0;
|
||
this._timeOffset = 0.0;
|
||
this._currentFrame = null;
|
||
this._armature = null;
|
||
this._animationState = null;
|
||
this._mainTimeline = null;
|
||
};
|
||
TimelineState.prototype._onUpdateFrame = function () { };
|
||
TimelineState.prototype._onArriveAtFrame = function () { };
|
||
TimelineState.prototype._setCurrentTime = function (passedTime) {
|
||
var prevState = this._playState;
|
||
var currentPlayTimes = 0;
|
||
var currentTime = 0.0;
|
||
if (this._mainTimeline && this._frameCount === 1) {
|
||
this._playState = this._mainTimeline._playState >= 0 ? 1 : -1;
|
||
currentPlayTimes = 1;
|
||
currentTime = this._mainTimeline._currentTime;
|
||
}
|
||
else if (!this._mainTimeline || this._timeScale !== 1.0 || this._timeOffset !== 0.0) {
|
||
var playTimes = this._animationState.playTimes;
|
||
var totalTime = playTimes * this._duration;
|
||
passedTime *= this._timeScale;
|
||
if (this._timeOffset !== 0.0) {
|
||
passedTime += this._timeOffset * this._animationDutation;
|
||
}
|
||
if (playTimes > 0 && (passedTime >= totalTime || passedTime <= -totalTime)) {
|
||
if (this._playState <= 0 && this._animationState._playheadState === 3) {
|
||
this._playState = 1;
|
||
}
|
||
currentPlayTimes = playTimes;
|
||
if (passedTime < 0.0) {
|
||
currentTime = 0.0;
|
||
}
|
||
else {
|
||
currentTime = this._duration;
|
||
}
|
||
}
|
||
else {
|
||
if (this._playState !== 0 && this._animationState._playheadState === 3) {
|
||
this._playState = 0;
|
||
}
|
||
if (passedTime < 0.0) {
|
||
passedTime = -passedTime;
|
||
currentPlayTimes = Math.floor(passedTime / this._duration);
|
||
currentTime = this._duration - (passedTime % this._duration);
|
||
}
|
||
else {
|
||
currentPlayTimes = Math.floor(passedTime / this._duration);
|
||
currentTime = passedTime % this._duration;
|
||
}
|
||
}
|
||
currentTime += this._position;
|
||
}
|
||
else {
|
||
this._playState = this._mainTimeline._playState;
|
||
currentPlayTimes = this._mainTimeline._currentPlayTimes;
|
||
currentTime = this._mainTimeline._currentTime;
|
||
}
|
||
if (this._currentPlayTimes === currentPlayTimes && this._currentTime === currentTime) {
|
||
return false;
|
||
}
|
||
// Clear frame flag when timeline start or loopComplete.
|
||
if ((prevState < 0 && this._playState !== prevState) ||
|
||
(this._playState <= 0 && this._currentPlayTimes !== currentPlayTimes)) {
|
||
this._currentFrame = null;
|
||
}
|
||
this._currentPlayTimes = currentPlayTimes;
|
||
this._currentTime = currentTime;
|
||
return true;
|
||
};
|
||
TimelineState.prototype._init = function (armature, animationState, timelineData) {
|
||
this._armature = armature;
|
||
this._animationState = animationState;
|
||
this._timelineData = timelineData;
|
||
this._mainTimeline = this._animationState._timeline;
|
||
if (this === this._mainTimeline) {
|
||
this._mainTimeline = null;
|
||
}
|
||
this._frameRate = this._armature.armatureData.frameRate;
|
||
this._frameCount = this._timelineData.frames.length;
|
||
this._position = this._animationState._position;
|
||
this._duration = this._animationState._duration;
|
||
this._animationDutation = this._animationState.animationData.duration;
|
||
this._timeScale = !this._mainTimeline ? 1.0 : (1.0 / this._timelineData.scale);
|
||
this._timeOffset = !this._mainTimeline ? 0.0 : this._timelineData.offset;
|
||
};
|
||
TimelineState.prototype.fadeOut = function () { };
|
||
TimelineState.prototype.update = function (passedTime) {
|
||
if (this._playState <= 0 && this._setCurrentTime(passedTime)) {
|
||
var currentFrameIndex = this._frameCount > 1 ? Math.floor(this._currentTime * this._frameRate) : 0; // uint
|
||
var currentFrame = this._timelineData.frames[currentFrameIndex];
|
||
if (this._currentFrame !== currentFrame) {
|
||
this._currentFrame = currentFrame;
|
||
this._onArriveAtFrame();
|
||
}
|
||
this._onUpdateFrame();
|
||
}
|
||
};
|
||
return TimelineState;
|
||
}(dragonBones.BaseObject));
|
||
dragonBones.TimelineState = TimelineState;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var TweenTimelineState = (function (_super) {
|
||
__extends(TweenTimelineState, _super);
|
||
function TweenTimelineState() {
|
||
return _super.call(this) || this;
|
||
}
|
||
TweenTimelineState._getEasingValue = function (progress, easing) {
|
||
if (progress <= 0.0) {
|
||
return 0.0;
|
||
}
|
||
else if (progress >= 1.0) {
|
||
return 1.0;
|
||
}
|
||
var value = 1.0;
|
||
if (easing > 2.0) {
|
||
return progress;
|
||
}
|
||
else if (easing > 1.0) {
|
||
value = 0.5 * (1.0 - Math.cos(progress * Math.PI));
|
||
easing -= 1.0;
|
||
}
|
||
else if (easing > 0.0) {
|
||
value = 1.0 - Math.pow(1.0 - progress, 2.0);
|
||
}
|
||
else if (easing >= -1.0) {
|
||
easing *= -1.0;
|
||
value = Math.pow(progress, 2.0);
|
||
}
|
||
else if (easing >= -2.0) {
|
||
easing *= -1.0;
|
||
value = Math.acos(1.0 - progress * 2.0) / Math.PI;
|
||
easing -= 1.0;
|
||
}
|
||
else {
|
||
return progress;
|
||
}
|
||
return (value - progress) * easing + progress;
|
||
};
|
||
TweenTimelineState._getEasingCurveValue = function (progress, samples) {
|
||
if (progress <= 0.0) {
|
||
return 0.0;
|
||
}
|
||
else if (progress >= 1.0) {
|
||
return 1.0;
|
||
}
|
||
var segmentCount = samples.length + 1; // + 2 - 1
|
||
var valueIndex = Math.floor(progress * segmentCount);
|
||
var fromValue = valueIndex === 0 ? 0.0 : samples[valueIndex - 1];
|
||
var toValue = (valueIndex === segmentCount - 1) ? 1.0 : samples[valueIndex];
|
||
return fromValue + (toValue - fromValue) * (progress * segmentCount - valueIndex);
|
||
};
|
||
TweenTimelineState.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this._tweenProgress = 0.0;
|
||
this._tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
this._curve = null;
|
||
};
|
||
TweenTimelineState.prototype._onArriveAtFrame = function () {
|
||
if (this._frameCount > 1 &&
|
||
(this._currentFrame.next !== this._timelineData.frames[0] ||
|
||
this._animationState.playTimes === 0 ||
|
||
this._animationState.currentPlayTimes < this._animationState.playTimes - 1)) {
|
||
this._tweenEasing = this._currentFrame.tweenEasing;
|
||
this._curve = this._currentFrame.curve;
|
||
}
|
||
else {
|
||
this._tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
this._curve = null;
|
||
}
|
||
};
|
||
TweenTimelineState.prototype._onUpdateFrame = function () {
|
||
if (this._tweenEasing !== dragonBones.DragonBones.NO_TWEEN) {
|
||
this._tweenProgress = (this._currentTime - this._currentFrame.position) / this._currentFrame.duration;
|
||
if (this._tweenEasing !== 0.0) {
|
||
this._tweenProgress = TweenTimelineState._getEasingValue(this._tweenProgress, this._tweenEasing);
|
||
}
|
||
}
|
||
else if (this._curve) {
|
||
this._tweenProgress = (this._currentTime - this._currentFrame.position) / this._currentFrame.duration;
|
||
this._tweenProgress = TweenTimelineState._getEasingCurveValue(this._tweenProgress, this._curve);
|
||
}
|
||
else {
|
||
this._tweenProgress = 0.0;
|
||
}
|
||
};
|
||
return TweenTimelineState;
|
||
}(TimelineState));
|
||
dragonBones.TweenTimelineState = TweenTimelineState;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var AnimationTimelineState = (function (_super) {
|
||
__extends(AnimationTimelineState, _super);
|
||
function AnimationTimelineState() {
|
||
return _super.call(this) || this;
|
||
}
|
||
AnimationTimelineState.toString = function () {
|
||
return "[class dragonBones.AnimationTimelineState]";
|
||
};
|
||
AnimationTimelineState.prototype._onCrossFrame = function (frame) {
|
||
if (this._animationState.actionEnabled) {
|
||
var actions = frame.actions;
|
||
for (var i = 0, l = actions.length; i < l; ++i) {
|
||
this._armature._bufferAction(actions[i]);
|
||
}
|
||
}
|
||
var eventDispatcher = this._armature.eventDispatcher;
|
||
var events = frame.events;
|
||
for (var i = 0, l = events.length; i < l; ++i) {
|
||
var eventData = events[i];
|
||
var eventType = null;
|
||
switch (eventData.type) {
|
||
case 10 /* Frame */:
|
||
eventType = dragonBones.EventObject.FRAME_EVENT;
|
||
break;
|
||
case 11 /* Sound */:
|
||
eventType = dragonBones.EventObject.SOUND_EVENT;
|
||
break;
|
||
}
|
||
if (eventDispatcher.hasEvent(eventType) || eventData.type === 11 /* Sound */) {
|
||
var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
eventObject.name = eventData.name;
|
||
eventObject.frame = frame;
|
||
eventObject.data = eventData.data;
|
||
eventObject.animationState = this._animationState;
|
||
if (eventData.bone) {
|
||
eventObject.bone = this._armature.getBone(eventData.bone.name);
|
||
}
|
||
if (eventData.slot) {
|
||
eventObject.slot = this._armature.getSlot(eventData.slot.name);
|
||
}
|
||
this._armature._bufferEvent(eventObject, eventType);
|
||
}
|
||
}
|
||
};
|
||
AnimationTimelineState.prototype.update = function (passedTime) {
|
||
var prevState = this._playState;
|
||
var prevPlayTimes = this._currentPlayTimes;
|
||
var prevTime = this._currentTime;
|
||
if (this._playState <= 0 && this._setCurrentTime(passedTime)) {
|
||
var eventDispatcher = this._armature.eventDispatcher;
|
||
if (prevState < 0 && this._playState !== prevState) {
|
||
if (this._animationState.displayControl) {
|
||
this._armature._sortZOrder(null);
|
||
}
|
||
if (eventDispatcher.hasEvent(dragonBones.EventObject.START)) {
|
||
var eventObject = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
eventObject.animationState = this._animationState;
|
||
this._armature._bufferEvent(eventObject, dragonBones.EventObject.START);
|
||
}
|
||
}
|
||
if (prevTime < 0.0) {
|
||
return;
|
||
}
|
||
var isReverse = false;
|
||
var loopCompleteEvent = null;
|
||
var completeEvent = null;
|
||
if (this._currentPlayTimes !== prevPlayTimes) {
|
||
if (eventDispatcher.hasEvent(dragonBones.EventObject.LOOP_COMPLETE)) {
|
||
loopCompleteEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
loopCompleteEvent.animationState = this._animationState;
|
||
}
|
||
if (this._playState > 0) {
|
||
if (eventDispatcher.hasEvent(dragonBones.EventObject.COMPLETE)) {
|
||
completeEvent = dragonBones.BaseObject.borrowObject(dragonBones.EventObject);
|
||
completeEvent.animationState = this._animationState;
|
||
}
|
||
isReverse = prevTime > this._currentTime;
|
||
}
|
||
else {
|
||
isReverse = prevTime < this._currentTime;
|
||
}
|
||
}
|
||
else {
|
||
isReverse = prevTime > this._currentTime;
|
||
}
|
||
if (this._frameCount > 1) {
|
||
var currentFrameIndex = Math.floor(this._currentTime * this._frameRate); // uint
|
||
var currentFrame = this._timelineData.frames[currentFrameIndex];
|
||
if (this._currentFrame !== currentFrame) {
|
||
var crossedFrame = this._currentFrame;
|
||
this._currentFrame = currentFrame;
|
||
if (isReverse) {
|
||
if (!crossedFrame) {
|
||
var prevFrameIndex = Math.floor(prevTime * this._frameRate);
|
||
crossedFrame = this._timelineData.frames[prevFrameIndex];
|
||
if (this._currentPlayTimes === prevPlayTimes) {
|
||
if (crossedFrame === currentFrame) {
|
||
crossedFrame = null;
|
||
}
|
||
}
|
||
}
|
||
while (crossedFrame) {
|
||
if (this._position <= crossedFrame.position &&
|
||
crossedFrame.position <= this._position + this._duration) {
|
||
this._onCrossFrame(crossedFrame);
|
||
}
|
||
if (loopCompleteEvent && crossedFrame === this._timelineData.frames[0]) {
|
||
this._armature._bufferEvent(loopCompleteEvent, dragonBones.EventObject.LOOP_COMPLETE);
|
||
loopCompleteEvent = null;
|
||
}
|
||
crossedFrame = crossedFrame.prev;
|
||
if (crossedFrame === currentFrame) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
if (!crossedFrame) {
|
||
var prevFrameIndex = Math.floor(prevTime * this._frameRate);
|
||
crossedFrame = this._timelineData.frames[prevFrameIndex];
|
||
if (this._currentPlayTimes === prevPlayTimes) {
|
||
if (prevTime <= crossedFrame.position) {
|
||
crossedFrame = crossedFrame.prev;
|
||
}
|
||
else if (crossedFrame === currentFrame) {
|
||
crossedFrame = null;
|
||
}
|
||
}
|
||
}
|
||
while (crossedFrame) {
|
||
crossedFrame = crossedFrame.next;
|
||
if (loopCompleteEvent && crossedFrame === this._timelineData.frames[0]) {
|
||
this._armature._bufferEvent(loopCompleteEvent, dragonBones.EventObject.LOOP_COMPLETE);
|
||
loopCompleteEvent = null;
|
||
}
|
||
if (this._position <= crossedFrame.position &&
|
||
crossedFrame.position <= this._position + this._duration) {
|
||
this._onCrossFrame(crossedFrame);
|
||
}
|
||
if (crossedFrame === currentFrame) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (this._frameCount > 0 && !this._currentFrame) {
|
||
this._currentFrame = this._timelineData.frames[0];
|
||
if (this._currentPlayTimes === prevPlayTimes) {
|
||
if (prevTime <= this._currentFrame.position) {
|
||
this._onCrossFrame(this._currentFrame);
|
||
}
|
||
}
|
||
else if (this._position <= this._currentFrame.position) {
|
||
if (!isReverse && loopCompleteEvent) {
|
||
this._armature._bufferEvent(loopCompleteEvent, dragonBones.EventObject.LOOP_COMPLETE);
|
||
loopCompleteEvent = null;
|
||
}
|
||
this._onCrossFrame(this._currentFrame);
|
||
}
|
||
}
|
||
if (loopCompleteEvent) {
|
||
this._armature._bufferEvent(loopCompleteEvent, dragonBones.EventObject.LOOP_COMPLETE);
|
||
loopCompleteEvent = null;
|
||
}
|
||
if (completeEvent) {
|
||
this._armature._bufferEvent(completeEvent, dragonBones.EventObject.COMPLETE);
|
||
completeEvent = null;
|
||
}
|
||
}
|
||
};
|
||
AnimationTimelineState.prototype.setCurrentTime = function (value) {
|
||
this._setCurrentTime(value);
|
||
this._currentFrame = null;
|
||
};
|
||
return AnimationTimelineState;
|
||
}(dragonBones.TimelineState));
|
||
dragonBones.AnimationTimelineState = AnimationTimelineState;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var ZOrderTimelineState = (function (_super) {
|
||
__extends(ZOrderTimelineState, _super);
|
||
function ZOrderTimelineState() {
|
||
return _super.call(this) || this;
|
||
}
|
||
ZOrderTimelineState.toString = function () {
|
||
return "[class dragonBones.ZOrderTimelineState]";
|
||
};
|
||
ZOrderTimelineState.prototype._onArriveAtFrame = function () {
|
||
_super.prototype._onArriveAtFrame.call(this);
|
||
this._armature._sortZOrder(this._currentFrame.zOrder);
|
||
};
|
||
return ZOrderTimelineState;
|
||
}(dragonBones.TimelineState));
|
||
dragonBones.ZOrderTimelineState = ZOrderTimelineState;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var BoneTimelineState = (function (_super) {
|
||
__extends(BoneTimelineState, _super);
|
||
function BoneTimelineState() {
|
||
var _this = _super.call(this) || this;
|
||
_this._transform = new dragonBones.Transform();
|
||
_this._durationTransform = new dragonBones.Transform();
|
||
return _this;
|
||
}
|
||
BoneTimelineState.toString = function () {
|
||
return "[class dragonBones.BoneTimelineState]";
|
||
};
|
||
BoneTimelineState.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.bone = null;
|
||
this._transformDirty = false;
|
||
this._tweenTransform = 0 /* None */;
|
||
this._tweenRotate = 0 /* None */;
|
||
this._tweenScale = 0 /* None */;
|
||
this._transform.identity();
|
||
this._durationTransform.identity();
|
||
this._boneTransform = null;
|
||
this._originalTransform = null;
|
||
};
|
||
BoneTimelineState.prototype._onArriveAtFrame = function () {
|
||
_super.prototype._onArriveAtFrame.call(this);
|
||
this._tweenTransform = 1 /* Once */;
|
||
this._tweenRotate = 1 /* Once */;
|
||
this._tweenScale = 1 /* Once */;
|
||
if (this._frameCount > 1 && (this._tweenEasing !== dragonBones.DragonBones.NO_TWEEN || this._curve)) {
|
||
var currentTransform = this._currentFrame.transform;
|
||
var nextFrame = this._currentFrame.next;
|
||
var nextTransform = nextFrame.transform;
|
||
// Transform.
|
||
this._durationTransform.x = nextTransform.x - currentTransform.x;
|
||
this._durationTransform.y = nextTransform.y - currentTransform.y;
|
||
if (this._durationTransform.x !== 0.0 || this._durationTransform.y !== 0.0) {
|
||
this._tweenTransform = 2 /* Always */;
|
||
}
|
||
// Rotate.
|
||
var tweenRotate = this._currentFrame.tweenRotate;
|
||
if (tweenRotate !== dragonBones.DragonBones.NO_TWEEN) {
|
||
if (tweenRotate) {
|
||
if (tweenRotate > 0.0 ? nextTransform.skewY >= currentTransform.skewY : nextTransform.skewY <= currentTransform.skewY) {
|
||
tweenRotate = tweenRotate > 0.0 ? tweenRotate - 1.0 : tweenRotate + 1.0;
|
||
}
|
||
this._durationTransform.skewX = nextTransform.skewX - currentTransform.skewX + dragonBones.DragonBones.PI_D * tweenRotate;
|
||
this._durationTransform.skewY = nextTransform.skewY - currentTransform.skewY + dragonBones.DragonBones.PI_D * tweenRotate;
|
||
}
|
||
else {
|
||
this._durationTransform.skewX = dragonBones.Transform.normalizeRadian(nextTransform.skewX - currentTransform.skewX);
|
||
this._durationTransform.skewY = dragonBones.Transform.normalizeRadian(nextTransform.skewY - currentTransform.skewY);
|
||
}
|
||
if (this._durationTransform.skewX !== 0.0 || this._durationTransform.skewY !== 0.0) {
|
||
this._tweenRotate = 2 /* Always */;
|
||
}
|
||
}
|
||
else {
|
||
this._durationTransform.skewX = 0.0;
|
||
this._durationTransform.skewY = 0.0;
|
||
}
|
||
// Scale.
|
||
if (this._currentFrame.tweenScale) {
|
||
this._durationTransform.scaleX = nextTransform.scaleX - currentTransform.scaleX;
|
||
this._durationTransform.scaleY = nextTransform.scaleY - currentTransform.scaleY;
|
||
if (this._durationTransform.scaleX !== 0.0 || this._durationTransform.scaleY !== 0.0) {
|
||
this._tweenScale = 2 /* Always */;
|
||
}
|
||
}
|
||
else {
|
||
this._durationTransform.scaleX = 0.0;
|
||
this._durationTransform.scaleY = 0.0;
|
||
}
|
||
}
|
||
else {
|
||
this._durationTransform.x = 0.0;
|
||
this._durationTransform.y = 0.0;
|
||
this._durationTransform.skewX = 0.0;
|
||
this._durationTransform.skewY = 0.0;
|
||
this._durationTransform.scaleX = 0.0;
|
||
this._durationTransform.scaleY = 0.0;
|
||
}
|
||
};
|
||
BoneTimelineState.prototype._onUpdateFrame = function () {
|
||
_super.prototype._onUpdateFrame.call(this);
|
||
var tweenProgress = 0.0;
|
||
var currentTransform = this._currentFrame.transform;
|
||
if (this._tweenTransform !== 0 /* None */) {
|
||
if (this._tweenTransform === 1 /* Once */) {
|
||
this._tweenTransform = 0 /* None */;
|
||
tweenProgress = 0.0;
|
||
}
|
||
else {
|
||
tweenProgress = this._tweenProgress;
|
||
}
|
||
if (this._animationState.additiveBlending) {
|
||
this._transform.x = currentTransform.x + this._durationTransform.x * tweenProgress;
|
||
this._transform.y = currentTransform.y + this._durationTransform.y * tweenProgress;
|
||
}
|
||
else {
|
||
this._transform.x = this._originalTransform.x + currentTransform.x + this._durationTransform.x * tweenProgress;
|
||
this._transform.y = this._originalTransform.y + currentTransform.y + this._durationTransform.y * tweenProgress;
|
||
}
|
||
this._transformDirty = true;
|
||
}
|
||
if (this._tweenRotate !== 0 /* None */) {
|
||
if (this._tweenRotate === 1 /* Once */) {
|
||
this._tweenRotate = 0 /* None */;
|
||
tweenProgress = 0.0;
|
||
}
|
||
else {
|
||
tweenProgress = this._tweenProgress;
|
||
}
|
||
if (this._animationState.additiveBlending) {
|
||
this._transform.skewX = currentTransform.skewX + this._durationTransform.skewX * tweenProgress;
|
||
this._transform.skewY = currentTransform.skewY + this._durationTransform.skewY * tweenProgress;
|
||
}
|
||
else {
|
||
this._transform.skewX = dragonBones.Transform.normalizeRadian(this._originalTransform.skewX + currentTransform.skewX + this._durationTransform.skewX * tweenProgress);
|
||
this._transform.skewY = dragonBones.Transform.normalizeRadian(this._originalTransform.skewY + currentTransform.skewY + this._durationTransform.skewY * tweenProgress);
|
||
}
|
||
this._transformDirty = true;
|
||
}
|
||
if (this._tweenScale !== 0 /* None */) {
|
||
if (this._tweenScale === 1 /* Once */) {
|
||
this._tweenScale = 0 /* None */;
|
||
tweenProgress = 0.0;
|
||
}
|
||
else {
|
||
tweenProgress = this._tweenProgress;
|
||
}
|
||
if (this._animationState.additiveBlending) {
|
||
this._transform.scaleX = currentTransform.scaleX + this._durationTransform.scaleX * tweenProgress;
|
||
this._transform.scaleY = currentTransform.scaleY + this._durationTransform.scaleY * tweenProgress;
|
||
}
|
||
else {
|
||
this._transform.scaleX = this._originalTransform.scaleX * (currentTransform.scaleX + this._durationTransform.scaleX * tweenProgress);
|
||
this._transform.scaleY = this._originalTransform.scaleY * (currentTransform.scaleY + this._durationTransform.scaleY * tweenProgress);
|
||
}
|
||
this._transformDirty = true;
|
||
}
|
||
};
|
||
BoneTimelineState.prototype._init = function (armature, animationState, timelineData) {
|
||
_super.prototype._init.call(this, armature, animationState, timelineData);
|
||
this._originalTransform = this._timelineData.originalTransform;
|
||
this._boneTransform = this.bone._animationPose;
|
||
};
|
||
BoneTimelineState.prototype.fadeOut = function () {
|
||
this._transform.skewX = dragonBones.Transform.normalizeRadian(this._transform.skewX);
|
||
this._transform.skewY = dragonBones.Transform.normalizeRadian(this._transform.skewY);
|
||
};
|
||
BoneTimelineState.prototype.update = function (passedTime) {
|
||
// Blend animation state.
|
||
var animationLayer = this._animationState._layer;
|
||
var weight = this._animationState._weightResult;
|
||
if (!this.bone._blendDirty) {
|
||
_super.prototype.update.call(this, passedTime);
|
||
this.bone._blendLayer = animationLayer;
|
||
this.bone._blendLeftWeight = 1.0;
|
||
this.bone._blendTotalWeight = weight;
|
||
this._boneTransform.x = this._transform.x * weight;
|
||
this._boneTransform.y = this._transform.y * weight;
|
||
this._boneTransform.skewX = this._transform.skewX * weight;
|
||
this._boneTransform.skewY = this._transform.skewY * weight;
|
||
this._boneTransform.scaleX = (this._transform.scaleX - 1.0) * weight + 1.0;
|
||
this._boneTransform.scaleY = (this._transform.scaleY - 1.0) * weight + 1.0;
|
||
this.bone._blendDirty = true;
|
||
}
|
||
else if (this.bone._blendLeftWeight > 0.0) {
|
||
if (this.bone._blendLayer !== animationLayer) {
|
||
if (this.bone._blendTotalWeight >= this.bone._blendLeftWeight) {
|
||
this.bone._blendLeftWeight = 0.0;
|
||
}
|
||
else {
|
||
this.bone._blendLayer = animationLayer;
|
||
this.bone._blendLeftWeight -= this.bone._blendTotalWeight;
|
||
this.bone._blendTotalWeight = 0.0;
|
||
}
|
||
}
|
||
weight *= this.bone._blendLeftWeight;
|
||
if (weight >= 0.0) {
|
||
_super.prototype.update.call(this, passedTime);
|
||
this.bone._blendTotalWeight += weight;
|
||
this._boneTransform.x += this._transform.x * weight;
|
||
this._boneTransform.y += this._transform.y * weight;
|
||
this._boneTransform.skewX += this._transform.skewX * weight;
|
||
this._boneTransform.skewY += this._transform.skewY * weight;
|
||
this._boneTransform.scaleX += (this._transform.scaleX - 1) * weight;
|
||
this._boneTransform.scaleY += (this._transform.scaleY - 1) * weight;
|
||
}
|
||
}
|
||
if (this._transformDirty || this._animationState._fadeState !== 0 || this._animationState._subFadeState !== 0) {
|
||
this._transformDirty = false;
|
||
this.bone.invalidUpdate();
|
||
}
|
||
};
|
||
return BoneTimelineState;
|
||
}(dragonBones.TweenTimelineState));
|
||
dragonBones.BoneTimelineState = BoneTimelineState;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var SlotTimelineState = (function (_super) {
|
||
__extends(SlotTimelineState, _super);
|
||
function SlotTimelineState() {
|
||
var _this = _super.call(this) || this;
|
||
_this._color = new dragonBones.ColorTransform();
|
||
_this._durationColor = new dragonBones.ColorTransform();
|
||
return _this;
|
||
}
|
||
SlotTimelineState.toString = function () {
|
||
return "[class dragonBones.SlotTimelineState]";
|
||
};
|
||
SlotTimelineState.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.slot = null;
|
||
this._colorDirty = false;
|
||
this._tweenColor = 0 /* None */;
|
||
this._color.identity();
|
||
this._durationColor.identity();
|
||
this._slotColor = null;
|
||
};
|
||
SlotTimelineState.prototype._onArriveAtFrame = function () {
|
||
_super.prototype._onArriveAtFrame.call(this);
|
||
if (this._animationState._isDisabled(this.slot)) {
|
||
this._tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
this._curve = null;
|
||
this._tweenColor = 0 /* None */;
|
||
return;
|
||
}
|
||
var displayIndex = this._currentFrame.displayIndex;
|
||
if (this._playState >= 0 && this.slot.displayIndex !== displayIndex) {
|
||
this.slot._setDisplayIndex(displayIndex);
|
||
}
|
||
if (displayIndex >= 0) {
|
||
this._tweenColor = 0 /* None */;
|
||
var currentColor = this._currentFrame.color;
|
||
if (this._tweenEasing !== dragonBones.DragonBones.NO_TWEEN || this._curve) {
|
||
var nextFrame = this._currentFrame.next;
|
||
var nextColor = nextFrame.color;
|
||
if (currentColor !== nextColor) {
|
||
this._durationColor.alphaMultiplier = nextColor.alphaMultiplier - currentColor.alphaMultiplier;
|
||
this._durationColor.redMultiplier = nextColor.redMultiplier - currentColor.redMultiplier;
|
||
this._durationColor.greenMultiplier = nextColor.greenMultiplier - currentColor.greenMultiplier;
|
||
this._durationColor.blueMultiplier = nextColor.blueMultiplier - currentColor.blueMultiplier;
|
||
this._durationColor.alphaOffset = nextColor.alphaOffset - currentColor.alphaOffset;
|
||
this._durationColor.redOffset = nextColor.redOffset - currentColor.redOffset;
|
||
this._durationColor.greenOffset = nextColor.greenOffset - currentColor.greenOffset;
|
||
this._durationColor.blueOffset = nextColor.blueOffset - currentColor.blueOffset;
|
||
if (this._durationColor.alphaMultiplier !== 0.0 ||
|
||
this._durationColor.redMultiplier !== 0.0 ||
|
||
this._durationColor.greenMultiplier !== 0.0 ||
|
||
this._durationColor.blueMultiplier !== 0.0 ||
|
||
this._durationColor.alphaOffset !== 0 ||
|
||
this._durationColor.redOffset !== 0 ||
|
||
this._durationColor.greenOffset !== 0 ||
|
||
this._durationColor.blueOffset !== 0) {
|
||
this._tweenColor = 2 /* Always */;
|
||
}
|
||
}
|
||
}
|
||
if (this._tweenColor === 0 /* None */) {
|
||
if (this._slotColor.alphaMultiplier !== currentColor.alphaMultiplier ||
|
||
this._slotColor.redMultiplier !== currentColor.redMultiplier ||
|
||
this._slotColor.greenMultiplier !== currentColor.greenMultiplier ||
|
||
this._slotColor.blueMultiplier !== currentColor.blueMultiplier ||
|
||
this._slotColor.alphaOffset !== currentColor.alphaOffset ||
|
||
this._slotColor.redOffset !== currentColor.redOffset ||
|
||
this._slotColor.greenOffset !== currentColor.greenOffset ||
|
||
this._slotColor.blueOffset !== currentColor.blueOffset) {
|
||
this._tweenColor = 1 /* Once */;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
this._tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
this._curve = null;
|
||
this._tweenColor = 0 /* None */;
|
||
}
|
||
};
|
||
SlotTimelineState.prototype._onUpdateFrame = function () {
|
||
_super.prototype._onUpdateFrame.call(this);
|
||
var tweenProgress = 0.0;
|
||
if (this._tweenColor !== 0 /* None */ && this.slot.parent._blendLayer >= this._animationState._layer) {
|
||
if (this._tweenColor === 1 /* Once */) {
|
||
this._tweenColor = 0 /* None */;
|
||
tweenProgress = 0.0;
|
||
}
|
||
else {
|
||
tweenProgress = this._tweenProgress;
|
||
}
|
||
var currentColor = this._currentFrame.color;
|
||
this._color.alphaMultiplier = currentColor.alphaMultiplier + this._durationColor.alphaMultiplier * tweenProgress;
|
||
this._color.redMultiplier = currentColor.redMultiplier + this._durationColor.redMultiplier * tweenProgress;
|
||
this._color.greenMultiplier = currentColor.greenMultiplier + this._durationColor.greenMultiplier * tweenProgress;
|
||
this._color.blueMultiplier = currentColor.blueMultiplier + this._durationColor.blueMultiplier * tweenProgress;
|
||
this._color.alphaOffset = currentColor.alphaOffset + this._durationColor.alphaOffset * tweenProgress;
|
||
this._color.redOffset = currentColor.redOffset + this._durationColor.redOffset * tweenProgress;
|
||
this._color.greenOffset = currentColor.greenOffset + this._durationColor.greenOffset * tweenProgress;
|
||
this._color.blueOffset = currentColor.blueOffset + this._durationColor.blueOffset * tweenProgress;
|
||
this._colorDirty = true;
|
||
}
|
||
};
|
||
SlotTimelineState.prototype._init = function (armature, animationState, timelineData) {
|
||
_super.prototype._init.call(this, armature, animationState, timelineData);
|
||
this._slotColor = this.slot._colorTransform;
|
||
};
|
||
SlotTimelineState.prototype.fadeOut = function () {
|
||
this._tweenColor = 0 /* None */;
|
||
};
|
||
SlotTimelineState.prototype.update = function (passedTime) {
|
||
_super.prototype.update.call(this, passedTime);
|
||
// Fade animation.
|
||
if (this._tweenColor !== 0 /* None */ || this._colorDirty) {
|
||
if (this._animationState._fadeState !== 0 || this._animationState._subFadeState !== 0) {
|
||
var fadeProgress = Math.pow(this._animationState._fadeProgress, 4);
|
||
this._slotColor.alphaMultiplier += (this._color.alphaMultiplier - this._slotColor.alphaMultiplier) * fadeProgress;
|
||
this._slotColor.redMultiplier += (this._color.redMultiplier - this._slotColor.redMultiplier) * fadeProgress;
|
||
this._slotColor.greenMultiplier += (this._color.greenMultiplier - this._slotColor.greenMultiplier) * fadeProgress;
|
||
this._slotColor.blueMultiplier += (this._color.blueMultiplier - this._slotColor.blueMultiplier) * fadeProgress;
|
||
this._slotColor.alphaOffset += (this._color.alphaOffset - this._slotColor.alphaOffset) * fadeProgress;
|
||
this._slotColor.redOffset += (this._color.redOffset - this._slotColor.redOffset) * fadeProgress;
|
||
this._slotColor.greenOffset += (this._color.greenOffset - this._slotColor.greenOffset) * fadeProgress;
|
||
this._slotColor.blueOffset += (this._color.blueOffset - this._slotColor.blueOffset) * fadeProgress;
|
||
this.slot._colorDirty = true;
|
||
}
|
||
else if (this._colorDirty) {
|
||
this._colorDirty = false;
|
||
this._slotColor.alphaMultiplier = this._color.alphaMultiplier;
|
||
this._slotColor.redMultiplier = this._color.redMultiplier;
|
||
this._slotColor.greenMultiplier = this._color.greenMultiplier;
|
||
this._slotColor.blueMultiplier = this._color.blueMultiplier;
|
||
this._slotColor.alphaOffset = this._color.alphaOffset;
|
||
this._slotColor.redOffset = this._color.redOffset;
|
||
this._slotColor.greenOffset = this._color.greenOffset;
|
||
this._slotColor.blueOffset = this._color.blueOffset;
|
||
this.slot._colorDirty = true;
|
||
}
|
||
}
|
||
};
|
||
return SlotTimelineState;
|
||
}(dragonBones.TweenTimelineState));
|
||
dragonBones.SlotTimelineState = SlotTimelineState;
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
var FFDTimelineState = (function (_super) {
|
||
__extends(FFDTimelineState, _super);
|
||
function FFDTimelineState() {
|
||
var _this = _super.call(this) || this;
|
||
_this._ffdVertices = [];
|
||
_this._durationFFDVertices = [];
|
||
return _this;
|
||
}
|
||
FFDTimelineState.toString = function () {
|
||
return "[class dragonBones.FFDTimelineState]";
|
||
};
|
||
FFDTimelineState.prototype._onClear = function () {
|
||
_super.prototype._onClear.call(this);
|
||
this.slot = null;
|
||
this._ffdDirty = false;
|
||
this._tweenFFD = 0 /* None */;
|
||
this._ffdVertices.length = 0;
|
||
this._durationFFDVertices.length = 0;
|
||
this._slotFFDVertices = null;
|
||
};
|
||
FFDTimelineState.prototype._onArriveAtFrame = function () {
|
||
_super.prototype._onArriveAtFrame.call(this);
|
||
if (this.slot.displayIndex >= 0 && this._animationState._isDisabled(this.slot)) {
|
||
this._tweenEasing = dragonBones.DragonBones.NO_TWEEN;
|
||
this._curve = null;
|
||
this._tweenFFD = 0 /* None */;
|
||
return;
|
||
}
|
||
this._tweenFFD = 0 /* None */;
|
||
if (this._tweenEasing !== dragonBones.DragonBones.NO_TWEEN || this._curve) {
|
||
var currentFFDVertices = this._currentFrame.tweens;
|
||
var nextFFDVertices = this._currentFrame.next.tweens;
|
||
for (var i = 0, l = currentFFDVertices.length; i < l; ++i) {
|
||
var duration = nextFFDVertices[i] - currentFFDVertices[i];
|
||
this._durationFFDVertices[i] = duration;
|
||
if (duration !== 0.0) {
|
||
this._tweenFFD = 2 /* Always */;
|
||
}
|
||
}
|
||
}
|
||
//
|
||
if (this._tweenFFD === 0 /* None */) {
|
||
this._tweenFFD = 1 /* Once */;
|
||
for (var i = 0, l = this._durationFFDVertices.length; i < l; ++i) {
|
||
this._durationFFDVertices[i] = 0;
|
||
}
|
||
}
|
||
};
|
||
FFDTimelineState.prototype._onUpdateFrame = function () {
|
||
_super.prototype._onUpdateFrame.call(this);
|
||
var tweenProgress = 0.0;
|
||
if (this._tweenFFD !== 0 /* None */ && this.slot.parent._blendLayer >= this._animationState._layer) {
|
||
if (this._tweenFFD === 1 /* Once */) {
|
||
this._tweenFFD = 0 /* None */;
|
||
tweenProgress = 0.0;
|
||
}
|
||
else {
|
||
tweenProgress = this._tweenProgress;
|
||
}
|
||
var currentFFDVertices = this._currentFrame.tweens;
|
||
for (var i = 0, l = currentFFDVertices.length; i < l; ++i) {
|
||
this._ffdVertices[i] = currentFFDVertices[i] + this._durationFFDVertices[i] * tweenProgress;
|
||
}
|
||
this._ffdDirty = true;
|
||
}
|
||
};
|
||
FFDTimelineState.prototype._init = function (armature, animationState, timelineData) {
|
||
_super.prototype._init.call(this, armature, animationState, timelineData);
|
||
this._slotFFDVertices = this.slot._ffdVertices;
|
||
this._ffdVertices.length = this._timelineData.frames[0].tweens.length;
|
||
this._durationFFDVertices.length = this._ffdVertices.length;
|
||
for (var i = 0, l = this._ffdVertices.length; i < l; ++i) {
|
||
this._ffdVertices[i] = 0.0;
|
||
}
|
||
for (var i = 0, l = this._durationFFDVertices.length; i < l; ++i) {
|
||
this._durationFFDVertices[i] = 0.0;
|
||
}
|
||
};
|
||
FFDTimelineState.prototype.fadeOut = function () {
|
||
this._tweenFFD = 0 /* None */;
|
||
};
|
||
FFDTimelineState.prototype.update = function (passedTime) {
|
||
_super.prototype.update.call(this, passedTime);
|
||
if (this.slot._meshData !== this._timelineData.display.mesh) {
|
||
return;
|
||
}
|
||
// Fade animation.
|
||
if (this._tweenFFD !== 0 /* None */ || this._ffdDirty) {
|
||
if (this._animationState._fadeState !== 0 || this._animationState._subFadeState !== 0) {
|
||
var fadeProgress = Math.pow(this._animationState._fadeProgress, 4.0);
|
||
for (var i = 0, l = this._ffdVertices.length; i < l; ++i) {
|
||
this._slotFFDVertices[i] += (this._ffdVertices[i] - this._slotFFDVertices[i]) * fadeProgress;
|
||
}
|
||
this.slot._meshDirty = true;
|
||
}
|
||
else if (this._ffdDirty) {
|
||
this._ffdDirty = false;
|
||
for (var i = 0, l = this._ffdVertices.length; i < l; ++i) {
|
||
this._slotFFDVertices[i] = this._ffdVertices[i];
|
||
}
|
||
this.slot._meshDirty = true;
|
||
}
|
||
}
|
||
};
|
||
return FFDTimelineState;
|
||
}(dragonBones.TweenTimelineState));
|
||
dragonBones.FFDTimelineState = FFDTimelineState;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* WorldClock 提供时钟支持,为每个加入到时钟的 IAnimatable 对象更新时间。
|
||
* @see dragonBones.IAnimateble
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var WorldClock = (function () {
|
||
/**
|
||
* @language zh_CN
|
||
* 创建一个新的 WorldClock 实例。
|
||
* 通常并不需要单独创建 WorldClock 实例,可以直接使用 WorldClock.clock 静态实例。
|
||
* (创建更多独立的 WorldClock 实例可以更灵活的为需要更新的 IAnimateble 实例分组,用于控制不同组不同的播放速度)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
function WorldClock() {
|
||
/**
|
||
* @language zh_CN
|
||
* 当前时间。 (以秒为单位)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
this.time = new Date().getTime() / dragonBones.DragonBones.SECOND_TO_MILLISECOND;
|
||
/**
|
||
* @language zh_CN
|
||
* 时间流逝速度,用于控制动画变速播放。 [0: 停止播放, (0~1): 慢速播放, 1: 正常播放, (1~N): 快速播放]
|
||
* @default 1
|
||
* @version DragonBones 3.0
|
||
*/
|
||
this.timeScale = 1.0;
|
||
this._animatebles = [];
|
||
this._clock = null;
|
||
}
|
||
Object.defineProperty(WorldClock, "clock", {
|
||
/**
|
||
* @language zh_CN
|
||
* 一个可以直接使用的全局 WorldClock 实例.
|
||
* @version DragonBones 3.0
|
||
*/
|
||
get: function () {
|
||
if (!WorldClock._clock) {
|
||
WorldClock._clock = new WorldClock();
|
||
}
|
||
return WorldClock._clock;
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
/**
|
||
* @language zh_CN
|
||
* 为所有的 IAnimatable 实例更新时间。
|
||
* @param passedTime 前进的时间。 (以秒为单位,当设置为 -1 时将自动计算当前帧与上一帧的时间差)
|
||
* @version DragonBones 3.0
|
||
*/
|
||
WorldClock.prototype.advanceTime = function (passedTime) {
|
||
if (passedTime !== passedTime) {
|
||
passedTime = 0.0;
|
||
}
|
||
if (passedTime < 0.0) {
|
||
passedTime = new Date().getTime() / dragonBones.DragonBones.SECOND_TO_MILLISECOND - this.time;
|
||
}
|
||
if (this.timeScale !== 1.0) {
|
||
passedTime *= this.timeScale;
|
||
}
|
||
if (passedTime < 0.0) {
|
||
this.time -= passedTime;
|
||
}
|
||
else {
|
||
this.time += passedTime;
|
||
}
|
||
if (passedTime) {
|
||
var i = 0, r = 0, l = this._animatebles.length;
|
||
for (; i < l; ++i) {
|
||
var animateble = this._animatebles[i];
|
||
if (animateble) {
|
||
if (r > 0) {
|
||
this._animatebles[i - r] = animateble;
|
||
this._animatebles[i] = null;
|
||
}
|
||
animateble.advanceTime(passedTime);
|
||
}
|
||
else {
|
||
r++;
|
||
}
|
||
}
|
||
if (r > 0) {
|
||
l = this._animatebles.length;
|
||
for (; i < l; ++i) {
|
||
var animateble = this._animatebles[i];
|
||
if (animateble) {
|
||
this._animatebles[i - r] = animateble;
|
||
}
|
||
else {
|
||
r++;
|
||
}
|
||
}
|
||
this._animatebles.length -= r;
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* 是否包含 IAnimatable 实例
|
||
* @param value IAnimatable 实例。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
WorldClock.prototype.contains = function (value) {
|
||
return this._animatebles.indexOf(value) >= 0;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 添加 IAnimatable 实例。
|
||
* @param value IAnimatable 实例。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
WorldClock.prototype.add = function (value) {
|
||
if (value && this._animatebles.indexOf(value) < 0) {
|
||
this._animatebles.push(value);
|
||
value.clock = this;
|
||
if (dragonBones.DragonBones.debug && value instanceof dragonBones.Armature) {
|
||
dragonBones.DragonBones.addArmature(value);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 移除 IAnimatable 实例。
|
||
* @param value IAnimatable 实例。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
WorldClock.prototype.remove = function (value) {
|
||
var index = this._animatebles.indexOf(value);
|
||
if (index >= 0) {
|
||
this._animatebles[index] = null;
|
||
value.clock = null;
|
||
if (dragonBones.DragonBones.debug && value instanceof dragonBones.Armature) {
|
||
dragonBones.DragonBones.removeArmature(value);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 清除所有的 IAnimatable 实例。
|
||
* @version DragonBones 3.0
|
||
*/
|
||
WorldClock.prototype.clear = function () {
|
||
for (var i = 0, l = this._animatebles.length; i < l; ++i) {
|
||
var animateble = this._animatebles[i];
|
||
this._animatebles[i] = null;
|
||
if (animateble != null) {
|
||
animateble.clock = null;
|
||
}
|
||
}
|
||
};
|
||
Object.defineProperty(WorldClock.prototype, "clock", {
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
get: function () {
|
||
return this._clock;
|
||
},
|
||
set: function (value) {
|
||
if (this._clock === value) {
|
||
return;
|
||
}
|
||
var prevClock = this._clock;
|
||
if (prevClock) {
|
||
prevClock.remove(this);
|
||
}
|
||
this._clock = value;
|
||
if (this._clock) {
|
||
this._clock.add(this);
|
||
}
|
||
},
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
return WorldClock;
|
||
}());
|
||
WorldClock._clock = null;
|
||
dragonBones.WorldClock = WorldClock;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 事件数据。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
var EventObject = (function (_super) {
|
||
__extends(EventObject, _super);
|
||
/**
|
||
* @internal
|
||
* @private
|
||
*/
|
||
function EventObject() {
|
||
return _super.call(this) || this;
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
EventObject.toString = function () {
|
||
return "[class dragonBones.EventObject]";
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
EventObject.prototype._onClear = function () {
|
||
this.type = null;
|
||
this.name = null;
|
||
this.frame = null;
|
||
this.data = null;
|
||
this.armature = null;
|
||
this.bone = null;
|
||
this.slot = null;
|
||
this.animationState = null;
|
||
};
|
||
return EventObject;
|
||
}(dragonBones.BaseObject));
|
||
/**
|
||
* @language zh_CN
|
||
* 动画开始。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.START = "start";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画循环播放一次完成。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.LOOP_COMPLETE = "loopComplete";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画播放完成。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.COMPLETE = "complete";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画淡入开始。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.FADE_IN = "fadeIn";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画淡入完成。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.FADE_IN_COMPLETE = "fadeInComplete";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画淡出开始。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.FADE_OUT = "fadeOut";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画淡出完成。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.FADE_OUT_COMPLETE = "fadeOutComplete";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画帧事件。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.FRAME_EVENT = "frameEvent";
|
||
/**
|
||
* @language zh_CN
|
||
* 动画声音事件。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
EventObject.SOUND_EVENT = "soundEvent";
|
||
dragonBones.EventObject = EventObject;
|
||
})(dragonBones || (dragonBones = {}));
|
||
var dragonBones;
|
||
(function (dragonBones) {
|
||
/**
|
||
* @language zh_CN
|
||
* 创建骨架的基础工厂。 (通常只需要一个全局工厂实例)
|
||
* @see dragonBones.DragonBonesData
|
||
* @see dragonBones.TextureAtlasData
|
||
* @see dragonBones.ArmatureData
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
var BaseFactory = (function () {
|
||
/**
|
||
* @private
|
||
*/
|
||
function BaseFactory(dataParser) {
|
||
if (dataParser === void 0) { dataParser = null; }
|
||
/**
|
||
* @language zh_CN
|
||
* 是否开启共享搜索。
|
||
* 如果开启,创建一个骨架时,可以从多个龙骨数据中寻找骨架数据,或贴图集数据中寻找贴图数据。 (通常在有共享导出的数据时开启)
|
||
* @see dragonBones.DragonBonesData#autoSearch
|
||
* @see dragonBones.TextureAtlasData#autoSearch
|
||
* @version DragonBones 4.5
|
||
*/
|
||
this.autoSearch = false;
|
||
/**
|
||
* @private
|
||
*/
|
||
this._dragonBonesDataMap = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
this._textureAtlasDataMap = {};
|
||
/**
|
||
* @private
|
||
*/
|
||
this._dataParser = null;
|
||
this._dataParser = dataParser;
|
||
if (!this._dataParser) {
|
||
if (!BaseFactory._defaultParser) {
|
||
BaseFactory._defaultParser = new dragonBones.ObjectDataParser();
|
||
}
|
||
this._dataParser = BaseFactory._defaultParser;
|
||
}
|
||
}
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype._getTextureData = function (textureAtlasName, textureName) {
|
||
var textureAtlasDataList = this._textureAtlasDataMap[textureAtlasName];
|
||
if (textureAtlasDataList) {
|
||
for (var i = 0, l = textureAtlasDataList.length; i < l; ++i) {
|
||
var textureData = textureAtlasDataList[i].getTexture(textureName);
|
||
if (textureData) {
|
||
return textureData;
|
||
}
|
||
}
|
||
}
|
||
if (this.autoSearch) {
|
||
for (var textureAtlasName_1 in this._textureAtlasDataMap) {
|
||
textureAtlasDataList = this._textureAtlasDataMap[textureAtlasName_1];
|
||
for (var i = 0, l = textureAtlasDataList.length; i < l; ++i) {
|
||
var textureAtlasData = textureAtlasDataList[i];
|
||
if (textureAtlasData.autoSearch) {
|
||
var textureData = textureAtlasData.getTexture(textureName);
|
||
if (textureData) {
|
||
return textureData;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype._fillBuildArmaturePackage = function (dataPackage, dragonBonesName, armatureName, skinName, textureAtlasName) {
|
||
var dragonBonesData = null;
|
||
var armatureData = null;
|
||
if (dragonBonesName) {
|
||
dragonBonesData = this._dragonBonesDataMap[dragonBonesName];
|
||
if (dragonBonesData) {
|
||
armatureData = dragonBonesData.getArmature(armatureName);
|
||
}
|
||
}
|
||
if (!armatureData && (!dragonBonesName || this.autoSearch)) {
|
||
for (var eachDragonBonesName in this._dragonBonesDataMap) {
|
||
dragonBonesData = this._dragonBonesDataMap[eachDragonBonesName];
|
||
if (!dragonBonesName || dragonBonesData.autoSearch) {
|
||
armatureData = dragonBonesData.getArmature(armatureName);
|
||
if (armatureData) {
|
||
dragonBonesName = eachDragonBonesName;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (armatureData) {
|
||
dataPackage.dataName = dragonBonesName;
|
||
dataPackage.textureAtlasName = textureAtlasName;
|
||
dataPackage.data = dragonBonesData;
|
||
dataPackage.armature = armatureData;
|
||
dataPackage.skin = armatureData.getSkin(skinName);
|
||
if (!dataPackage.skin) {
|
||
dataPackage.skin = armatureData.defaultSkin;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype._buildBones = function (dataPackage, armature) {
|
||
var bones = dataPackage.armature.sortedBones;
|
||
for (var i = 0, l = bones.length; i < l; ++i) {
|
||
var boneData = bones[i];
|
||
var bone = dragonBones.BaseObject.borrowObject(dragonBones.Bone);
|
||
bone._init(boneData);
|
||
if (boneData.parent) {
|
||
armature.addBone(bone, boneData.parent.name);
|
||
}
|
||
else {
|
||
armature.addBone(bone);
|
||
}
|
||
if (boneData.ik) {
|
||
bone.ikBendPositive = boneData.bendPositive;
|
||
bone.ikWeight = boneData.weight;
|
||
bone._setIK(armature.getBone(boneData.ik.name), boneData.chain, boneData.chainIndex);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype._buildSlots = function (dataPackage, armature) {
|
||
var currentSkin = dataPackage.skin;
|
||
var defaultSkin = dataPackage.armature.defaultSkin;
|
||
if (!currentSkin || !defaultSkin) {
|
||
return;
|
||
}
|
||
var skinSlotDatas = {};
|
||
for (var k in defaultSkin.slots) {
|
||
var skinSlotData = defaultSkin.slots[k];
|
||
skinSlotDatas[skinSlotData.slot.name] = skinSlotData;
|
||
}
|
||
if (currentSkin !== defaultSkin) {
|
||
for (var k in currentSkin.slots) {
|
||
var skinSlotData = currentSkin.slots[k];
|
||
skinSlotDatas[skinSlotData.slot.name] = skinSlotData;
|
||
}
|
||
}
|
||
var slots = dataPackage.armature.sortedSlots;
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var slotData = slots[i];
|
||
var skinSlotData = skinSlotDatas[slotData.name];
|
||
if (!skinSlotData) {
|
||
continue;
|
||
}
|
||
var slot = this._generateSlot(dataPackage, skinSlotData, armature);
|
||
if (slot) {
|
||
armature.addSlot(slot, slotData.parent.name);
|
||
slot._setDisplayIndex(slotData.displayIndex);
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype._replaceSlotDisplay = function (dataPackage, displayData, slot, displayIndex) {
|
||
if (displayIndex < 0) {
|
||
displayIndex = slot.displayIndex;
|
||
}
|
||
if (displayIndex >= 0) {
|
||
var displayList = slot.displayList; // Copy.
|
||
if (displayList.length <= displayIndex) {
|
||
displayList.length = displayIndex + 1;
|
||
}
|
||
if (slot._replacedDisplayDatas.length <= displayIndex) {
|
||
slot._replacedDisplayDatas.length = displayIndex + 1;
|
||
}
|
||
slot._replacedDisplayDatas[displayIndex] = displayData;
|
||
if (displayData.type === 1 /* Armature */) {
|
||
var childArmature = this.buildArmature(displayData.path, dataPackage.dataName, null, dataPackage.textureAtlasName);
|
||
displayList[displayIndex] = childArmature;
|
||
}
|
||
else {
|
||
if (!displayData.texture || dataPackage.textureAtlasName) {
|
||
displayData.texture = this._getTextureData(dataPackage.textureAtlasName ? dataPackage.textureAtlasName : dataPackage.dataName, displayData.path);
|
||
}
|
||
var displayDatas = slot.skinSlotData.displays;
|
||
if (displayData.mesh ||
|
||
(displayIndex < displayDatas.length && displayDatas[displayIndex].mesh)) {
|
||
displayList[displayIndex] = slot.meshDisplay;
|
||
}
|
||
else {
|
||
displayList[displayIndex] = slot.rawDisplay;
|
||
}
|
||
}
|
||
slot.displayList = displayList;
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 解析并添加龙骨数据。
|
||
* @param rawData 需要解析的原始数据。 (JSON)
|
||
* @param name 为数据提供一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
|
||
* @returns DragonBonesData
|
||
* @see #getDragonBonesData()
|
||
* @see #addDragonBonesData()
|
||
* @see #removeDragonBonesData()
|
||
* @see dragonBones.DragonBonesData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.parseDragonBonesData = function (rawData, name, scale) {
|
||
if (name === void 0) { name = null; }
|
||
if (scale === void 0) { scale = 1.0; }
|
||
var dragonBonesData = this._dataParser.parseDragonBonesData(rawData, scale);
|
||
this.addDragonBonesData(dragonBonesData, name);
|
||
return dragonBonesData;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 解析并添加贴图集数据。
|
||
* @param rawData 需要解析的原始数据。 (JSON)
|
||
* @param textureAtlas 贴图。
|
||
* @param name 为数据指定一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
|
||
* @param scale 为贴图集设置一个缩放值。
|
||
* @returns 贴图集数据
|
||
* @see #getTextureAtlasData()
|
||
* @see #addTextureAtlasData()
|
||
* @see #removeTextureAtlasData()
|
||
* @see dragonBones.TextureAtlasData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.parseTextureAtlasData = function (rawData, textureAtlas, name, scale) {
|
||
if (name === void 0) { name = null; }
|
||
if (scale === void 0) { scale = 0.0; }
|
||
var textureAtlasData = this._generateTextureAtlasData(null, null);
|
||
this._dataParser.parseTextureAtlasData(rawData, textureAtlasData, scale);
|
||
this._generateTextureAtlasData(textureAtlasData, textureAtlas);
|
||
this.addTextureAtlasData(textureAtlasData, name);
|
||
return textureAtlasData;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取指定名称的龙骨数据。
|
||
* @param name 数据名称。
|
||
* @returns DragonBonesData
|
||
* @see #parseDragonBonesData()
|
||
* @see #addDragonBonesData()
|
||
* @see #removeDragonBonesData()
|
||
* @see dragonBones.DragonBonesData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.getDragonBonesData = function (name) {
|
||
return this._dragonBonesDataMap[name];
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 添加龙骨数据。
|
||
* @param data 龙骨数据。
|
||
* @param name 为数据指定一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
|
||
* @see #parseDragonBonesData()
|
||
* @see #getDragonBonesData()
|
||
* @see #removeDragonBonesData()
|
||
* @see dragonBones.DragonBonesData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.addDragonBonesData = function (data, name) {
|
||
if (name === void 0) { name = null; }
|
||
if (data) {
|
||
name = name || data.name;
|
||
if (name) {
|
||
if (!this._dragonBonesDataMap[name]) {
|
||
this._dragonBonesDataMap[name] = data;
|
||
}
|
||
else {
|
||
console.warn("Same name data.", name);
|
||
}
|
||
}
|
||
else {
|
||
console.warn("Unnamed data.");
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 移除龙骨数据。
|
||
* @param name 数据名称。
|
||
* @param disposeData 是否释放数据。
|
||
* @see #parseDragonBonesData()
|
||
* @see #getDragonBonesData()
|
||
* @see #addDragonBonesData()
|
||
* @see dragonBones.DragonBonesData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.removeDragonBonesData = function (name, disposeData) {
|
||
if (disposeData === void 0) { disposeData = true; }
|
||
var dragonBonesData = this._dragonBonesDataMap[name];
|
||
if (dragonBonesData) {
|
||
if (disposeData) {
|
||
dragonBonesData.returnToPool();
|
||
}
|
||
delete this._dragonBonesDataMap[name];
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 获取指定名称的贴图集数据列表。
|
||
* @param name 数据名称。
|
||
* @returns 贴图集数据列表。
|
||
* @see #parseTextureAtlasData()
|
||
* @see #addTextureAtlasData()
|
||
* @see #removeTextureAtlasData()
|
||
* @see dragonBones.textures.TextureAtlasData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.getTextureAtlasData = function (name) {
|
||
return this._textureAtlasDataMap[name];
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 添加贴图集数据。
|
||
* @param data 贴图集数据。
|
||
* @param name 为数据指定一个名称,以便可以通过这个名称获取数据,如果未设置,则使用数据中的名称。
|
||
* @see #parseTextureAtlasData()
|
||
* @see #getTextureAtlasData()
|
||
* @see #removeTextureAtlasData()
|
||
* @see dragonBones.textures.TextureAtlasData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.addTextureAtlasData = function (data, name) {
|
||
if (name === void 0) { name = null; }
|
||
if (data) {
|
||
name = name || data.name;
|
||
if (name) {
|
||
var textureAtlasList = this._textureAtlasDataMap[name] ? this._textureAtlasDataMap[name] : (this._textureAtlasDataMap[name] = []);
|
||
if (textureAtlasList.indexOf(data) < 0) {
|
||
textureAtlasList.push(data);
|
||
}
|
||
}
|
||
else {
|
||
console.warn("Unnamed data.");
|
||
}
|
||
}
|
||
else {
|
||
throw new Error(dragonBones.DragonBones.ARGUMENT_ERROR);
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 移除贴图集数据。
|
||
* @param name 数据名称。
|
||
* @param disposeData 是否释放数据。
|
||
* @see #parseTextureAtlasData()
|
||
* @see #getTextureAtlasData()
|
||
* @see #addTextureAtlasData()
|
||
* @see dragonBones.textures.TextureAtlasData
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.removeTextureAtlasData = function (name, disposeData) {
|
||
if (disposeData === void 0) { disposeData = true; }
|
||
var textureAtlasDataList = this._textureAtlasDataMap[name];
|
||
if (textureAtlasDataList) {
|
||
if (disposeData) {
|
||
for (var i = 0, l = textureAtlasDataList.length; i < l; ++i) {
|
||
textureAtlasDataList[i].returnToPool();
|
||
}
|
||
}
|
||
delete this._textureAtlasDataMap[name];
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 清除所有的数据。
|
||
* @param disposeData 是否释放数据。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.clear = function (disposeData) {
|
||
if (disposeData === void 0) { disposeData = true; }
|
||
for (var k in this._dragonBonesDataMap) {
|
||
if (disposeData) {
|
||
this._dragonBonesDataMap[k].returnToPool();
|
||
}
|
||
delete this._dragonBonesDataMap[k];
|
||
}
|
||
for (var k in this._textureAtlasDataMap) {
|
||
if (disposeData) {
|
||
var textureAtlasDataList = this._textureAtlasDataMap[k];
|
||
for (var i = 0, l = textureAtlasDataList.length; i < l; ++i) {
|
||
textureAtlasDataList[i].returnToPool();
|
||
}
|
||
}
|
||
delete this._textureAtlasDataMap[k];
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 创建一个骨架。
|
||
* @param armatureName 骨架数据名称。
|
||
* @param dragonBonesName 龙骨数据名称,如果未设置,将检索所有的龙骨数据,当多个龙骨数据中包含同名的骨架数据时,可能无法创建出准确的骨架。
|
||
* @param skinName 皮肤名称,如果未设置,则使用默认皮肤。
|
||
* @param textureAtlasName 贴图集数据名称,如果未设置,则使用龙骨数据名称。
|
||
* @returns 骨架
|
||
* @see dragonBones.ArmatureData
|
||
* @see dragonBones.Armature
|
||
* @version DragonBones 3.0
|
||
*/
|
||
BaseFactory.prototype.buildArmature = function (armatureName, dragonBonesName, skinName, textureAtlasName) {
|
||
if (dragonBonesName === void 0) { dragonBonesName = null; }
|
||
if (skinName === void 0) { skinName = null; }
|
||
if (textureAtlasName === void 0) { textureAtlasName = null; }
|
||
var dataPackage = {};
|
||
if (this._fillBuildArmaturePackage(dataPackage, dragonBonesName, armatureName, skinName, textureAtlasName)) {
|
||
var armature = this._generateArmature(dataPackage);
|
||
this._buildBones(dataPackage, armature);
|
||
this._buildSlots(dataPackage, armature);
|
||
armature.invalidUpdate(null, true);
|
||
armature.advanceTime(0.0); // Update armature pose.
|
||
return armature;
|
||
}
|
||
console.warn("No armature data.", armatureName, dragonBonesName ? dragonBonesName : "");
|
||
return null;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 将骨架的动画替换成其他骨架的动画。 (通常这些骨架应该具有相同的骨架结构)
|
||
* @param toArmature 指定的骨架。
|
||
* @param fromArmatreName 其他骨架的名称。
|
||
* @param fromSkinName 其他骨架的皮肤名称,如果未设置,则使用默认皮肤。
|
||
* @param fromDragonBonesDataName 其他骨架属于的龙骨数据名称,如果未设置,则检索所有的龙骨数据。
|
||
* @param replaceOriginalAnimation 是否替换原有的同名动画。
|
||
* @returns 是否替换成功。
|
||
* @see dragonBones.Armature
|
||
* @see dragonBones.ArmatureData
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.copyAnimationsToArmature = function (toArmature, fromArmatreName, fromSkinName, fromDragonBonesDataName, replaceOriginalAnimation) {
|
||
if (fromSkinName === void 0) { fromSkinName = null; }
|
||
if (fromDragonBonesDataName === void 0) { fromDragonBonesDataName = null; }
|
||
if (replaceOriginalAnimation === void 0) { replaceOriginalAnimation = true; }
|
||
var dataPackage = {};
|
||
if (this._fillBuildArmaturePackage(dataPackage, fromDragonBonesDataName, fromArmatreName, fromSkinName, null)) {
|
||
var fromArmatureData = dataPackage.armature;
|
||
if (replaceOriginalAnimation) {
|
||
toArmature.animation.animations = fromArmatureData.animations;
|
||
}
|
||
else {
|
||
var animations = {};
|
||
for (var animationName in toArmature.animation.animations) {
|
||
animations[animationName] = toArmature.animation.animations[animationName];
|
||
}
|
||
for (var animationName in fromArmatureData.animations) {
|
||
animations[animationName] = fromArmatureData.animations[animationName];
|
||
}
|
||
toArmature.animation.animations = animations;
|
||
}
|
||
if (dataPackage.skin) {
|
||
var slots = toArmature.getSlots();
|
||
for (var i = 0, l = slots.length; i < l; ++i) {
|
||
var toSlot = slots[i];
|
||
var toSlotDisplayList = toSlot.displayList;
|
||
for (var iA = 0, lA = toSlotDisplayList.length; iA < lA; ++iA) {
|
||
var toDisplayObject = toSlotDisplayList[iA];
|
||
if (toDisplayObject instanceof dragonBones.Armature) {
|
||
var displays = dataPackage.skin.getSlot(toSlot.name).displays;
|
||
if (iA < displays.length) {
|
||
var fromDisplayData = displays[iA];
|
||
if (fromDisplayData.type === 1 /* Armature */) {
|
||
this.copyAnimationsToArmature(toDisplayObject, fromDisplayData.path, fromSkinName, fromDragonBonesDataName, replaceOriginalAnimation);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 用指定资源替换指定插槽的显示对象。(用 "dragonBonesName/armatureName/slotName/displayName" 的资源替换 "slot" 的显示对象)
|
||
* @param dragonBonesName 指定的龙骨数据名称。
|
||
* @param armatureName 指定的骨架名称。
|
||
* @param slotName 指定的插槽名称。
|
||
* @param displayName 指定的显示对象名称。
|
||
* @param slot 指定的插槽实例。
|
||
* @param displayIndex 要替换的显示对象的索引,如果未设置,则替换当前正在显示的显示对象。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.replaceSlotDisplay = function (dragonBonesName, armatureName, slotName, displayName, slot, displayIndex) {
|
||
if (displayIndex === void 0) { displayIndex = -1; }
|
||
var dataPackage = {};
|
||
if (this._fillBuildArmaturePackage(dataPackage, dragonBonesName, armatureName, null, null)) {
|
||
var skinSlotData = dataPackage.skin.getSlot(slotName);
|
||
if (skinSlotData) {
|
||
for (var i = 0, l = skinSlotData.displays.length; i < l; ++i) {
|
||
var displayData = skinSlotData.displays[i];
|
||
if (displayData.name === displayName) {
|
||
this._replaceSlotDisplay(dataPackage, displayData, slot, displayIndex);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @language zh_CN
|
||
* 用指定资源列表替换插槽的显示对象列表。
|
||
* @param dragonBonesName 指定的 DragonBonesData 名称。
|
||
* @param armatureName 指定的骨架名称。
|
||
* @param slotName 指定的插槽名称。
|
||
* @param slot 指定的插槽实例。
|
||
* @version DragonBones 4.5
|
||
*/
|
||
BaseFactory.prototype.replaceSlotDisplayList = function (dragonBonesName, armatureName, slotName, slot) {
|
||
var dataPackage = {};
|
||
if (this._fillBuildArmaturePackage(dataPackage, dragonBonesName, armatureName, null, null)) {
|
||
var skinSlotData = dataPackage.skin.getSlot(slotName);
|
||
if (skinSlotData) {
|
||
for (var i = 0, l = skinSlotData.displays.length; i < l; ++i) {
|
||
var displayData = skinSlotData.displays[i];
|
||
this._replaceSlotDisplay(dataPackage, displayData, slot, i);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype.getAllDragonBonesData = function () {
|
||
return this._dragonBonesDataMap;
|
||
};
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory.prototype.getAllTextureAtlasData = function () {
|
||
return this._textureAtlasDataMap;
|
||
};
|
||
return BaseFactory;
|
||
}());
|
||
/**
|
||
* @private
|
||
*/
|
||
BaseFactory._defaultParser = null;
|
||
dragonBones.BaseFactory = BaseFactory;
|
||
})(dragonBones || (dragonBones = {}));
|