UNPKG

ngx-spine

Version:

[![Build Status](https://travis-ci.org/PoiScript/ngx-spine.svg?branch=master)](https://travis-ci.org/PoiScript/ngx-spine)

914 lines 89 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /****************************************************************************** * Spine Runtimes License Agreement * Last updated May 1, 2019. Replaces all prior versions. * * Copyright (c) 2013-2019, Esoteric Software LLC * * Integration of the Spine Runtimes into software or otherwise creating * derivative works of the Spine Runtimes is permitted under the terms and * conditions of Section 2 of the Spine Editor License Agreement: * http://esotericsoftware.com/spine-editor-license * * Otherwise, it is permitted to integrate the Spine Runtimes into software * or otherwise create derivative works of the Spine Runtimes (collectively, * "Products"), provided that each user of the Products must obtain their own * Spine Editor license and redistribution of the Products in any form must * include this license and copyright notice. * * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { Color, Utils } from "./Utils"; import { Slot } from "./Slot"; import { Bone } from "./Bone"; import { IkConstraint } from "./IkConstraint"; import { TransformConstraint } from "./TransformConstraint"; import { PathConstraint } from "./PathConstraint"; import { PathAttachment } from "./attachments/PathAttachment"; import { RegionAttachment } from "./attachments/RegionAttachment"; import { MeshAttachment } from "./attachments/MeshAttachment"; var Skeleton = /** @class */ (function () { function Skeleton(data) { this._updateCache = new Array(); this.updateCacheReset = new Array(); this.time = 0; this.scaleX = 1; this.scaleY = 1; this.x = 0; this.y = 0; if (data == null) throw new Error("data cannot be null."); this.data = data; this.bones = new Array(); for (var i = 0; i < data.bones.length; i++) { /** @type {?} */ var boneData = data.bones[i]; /** @type {?} */ var bone = void 0; if (boneData.parent == null) bone = new Bone(boneData, this, null); else { /** @type {?} */ var parent_1 = this.bones[boneData.parent.index]; bone = new Bone(boneData, this, parent_1); parent_1.children.push(bone); } this.bones.push(bone); } this.slots = new Array(); this.drawOrder = new Array(); for (var i = 0; i < data.slots.length; i++) { /** @type {?} */ var slotData = data.slots[i]; /** @type {?} */ var bone = this.bones[slotData.boneData.index]; /** @type {?} */ var slot = new Slot(slotData, bone); this.slots.push(slot); this.drawOrder.push(slot); } this.ikConstraints = new Array(); for (var i = 0; i < data.ikConstraints.length; i++) { /** @type {?} */ var ikConstraintData = data.ikConstraints[i]; this.ikConstraints.push(new IkConstraint(ikConstraintData, this)); } this.transformConstraints = new Array(); for (var i = 0; i < data.transformConstraints.length; i++) { /** @type {?} */ var transformConstraintData = data.transformConstraints[i]; this.transformConstraints.push(new TransformConstraint(transformConstraintData, this)); } this.pathConstraints = new Array(); for (var i = 0; i < data.pathConstraints.length; i++) { /** @type {?} */ var pathConstraintData = data.pathConstraints[i]; this.pathConstraints.push(new PathConstraint(pathConstraintData, this)); } this.color = new Color(1, 1, 1, 1); this.updateCache(); } /** * @return {?} */ Skeleton.prototype.updateCache = /** * @return {?} */ function () { /** @type {?} */ var updateCache = this._updateCache; updateCache.length = 0; this.updateCacheReset.length = 0; /** @type {?} */ var bones = this.bones; for (var i = 0, n = bones.length; i < n; i++) { /** @type {?} */ var bone = bones[i]; bone.sorted = bone.data.skinRequired; bone.active = !bone.sorted; } if (this.skin != null) { /** @type {?} */ var skinBones = this.skin.bones; for (var i = 0, n = this.skin.bones.length; i < n; i++) { /** @type {?} */ var bone = this.bones[skinBones[i].index]; do { bone.sorted = false; bone.active = true; bone = bone.parent; } while (bone != null); } } // IK first, lowest hierarchy depth first. /** @type {?} */ var ikConstraints = this.ikConstraints; /** @type {?} */ var transformConstraints = this.transformConstraints; /** @type {?} */ var pathConstraints = this.pathConstraints; /** @type {?} */ var ikCount = ikConstraints.length; /** @type {?} */ var transformCount = transformConstraints.length; /** @type {?} */ var pathCount = pathConstraints.length; /** @type {?} */ var constraintCount = ikCount + transformCount + pathCount; outer: for (var i = 0; i < constraintCount; i++) { for (var ii = 0; ii < ikCount; ii++) { /** @type {?} */ var constraint = ikConstraints[ii]; if (constraint.data.order == i) { this.sortIkConstraint(constraint); continue outer; } } for (var ii = 0; ii < transformCount; ii++) { /** @type {?} */ var constraint = transformConstraints[ii]; if (constraint.data.order == i) { this.sortTransformConstraint(constraint); continue outer; } } for (var ii = 0; ii < pathCount; ii++) { /** @type {?} */ var constraint = pathConstraints[ii]; if (constraint.data.order == i) { this.sortPathConstraint(constraint); continue outer; } } } for (var i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]); }; /** * @param {?} constraint * @return {?} */ Skeleton.prototype.sortIkConstraint = /** * @param {?} constraint * @return {?} */ function (constraint) { constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; /** @type {?} */ var target = constraint.target; this.sortBone(target); /** @type {?} */ var constrained = constraint.bones; /** @type {?} */ var parent = constrained[0]; this.sortBone(parent); if (constrained.length > 1) { /** @type {?} */ var child = constrained[constrained.length - 1]; if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child); } this._updateCache.push(constraint); this.sortReset(parent.children); constrained[constrained.length - 1].sorted = true; }; /** * @param {?} constraint * @return {?} */ Skeleton.prototype.sortPathConstraint = /** * @param {?} constraint * @return {?} */ function (constraint) { constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; /** @type {?} */ var slot = constraint.target; /** @type {?} */ var slotIndex = slot.data.index; /** @type {?} */ var slotBone = slot.bone; if (this.skin != null) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); for (var i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); /** @type {?} */ var attachment = slot.getAttachment(); if (attachment instanceof PathAttachment) this.sortPathConstraintAttachmentWith(attachment, slotBone); /** @type {?} */ var constrained = constraint.bones; /** @type {?} */ var boneCount = constrained.length; for (var i = 0; i < boneCount; i++) this.sortBone(constrained[i]); this._updateCache.push(constraint); for (var i = 0; i < boneCount; i++) this.sortReset(constrained[i].children); for (var i = 0; i < boneCount; i++) constrained[i].sorted = true; }; /** * @param {?} constraint * @return {?} */ Skeleton.prototype.sortTransformConstraint = /** * @param {?} constraint * @return {?} */ function (constraint) { constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; this.sortBone(constraint.target); /** @type {?} */ var constrained = constraint.bones; /** @type {?} */ var boneCount = constrained.length; if (constraint.data.local) { for (var i = 0; i < boneCount; i++) { /** @type {?} */ var child = constrained[i]; this.sortBone(child.parent); if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child); } } else { for (var i = 0; i < boneCount; i++) { this.sortBone(constrained[i]); } } this._updateCache.push(constraint); for (var ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children); for (var ii = 0; ii < boneCount; ii++) constrained[ii].sorted = true; }; /** * @param {?} skin * @param {?} slotIndex * @param {?} slotBone * @return {?} */ Skeleton.prototype.sortPathConstraintAttachment = /** * @param {?} skin * @param {?} slotIndex * @param {?} slotBone * @return {?} */ function (skin, slotIndex, slotBone) { /** @type {?} */ var attachments = skin.attachments[slotIndex]; if (!attachments) return; for (var key in attachments) { this.sortPathConstraintAttachmentWith(attachments[key], slotBone); } }; /** * @param {?} attachment * @param {?} slotBone * @return {?} */ Skeleton.prototype.sortPathConstraintAttachmentWith = /** * @param {?} attachment * @param {?} slotBone * @return {?} */ function (attachment, slotBone) { if (!(attachment instanceof PathAttachment)) return; /** @type {?} */ var pathBones = ((/** @type {?} */ (attachment))).bones; if (pathBones == null) this.sortBone(slotBone); else { /** @type {?} */ var bones = this.bones; /** @type {?} */ var i = 0; while (i < pathBones.length) { /** @type {?} */ var boneCount = pathBones[i++]; for (var n = i + boneCount; i < n; i++) { /** @type {?} */ var boneIndex = pathBones[i]; this.sortBone(bones[boneIndex]); } } } }; /** * @param {?} bone * @return {?} */ Skeleton.prototype.sortBone = /** * @param {?} bone * @return {?} */ function (bone) { if (bone.sorted) return; /** @type {?} */ var parent = bone.parent; if (parent != null) this.sortBone(parent); bone.sorted = true; this._updateCache.push(bone); }; /** * @param {?} bones * @return {?} */ Skeleton.prototype.sortReset = /** * @param {?} bones * @return {?} */ function (bones) { for (var i = 0, n = bones.length; i < n; i++) { /** @type {?} */ var bone = bones[i]; if (!bone.active) continue; if (bone.sorted) this.sortReset(bone.children); bone.sorted = false; } }; /** Updates the world transform for each bone and applies constraints. */ /** * Updates the world transform for each bone and applies constraints. * @return {?} */ Skeleton.prototype.updateWorldTransform = /** * Updates the world transform for each bone and applies constraints. * @return {?} */ function () { /** @type {?} */ var updateCacheReset = this.updateCacheReset; for (var i = 0, n = updateCacheReset.length; i < n; i++) { /** @type {?} */ var bone = (/** @type {?} */ (updateCacheReset[i])); bone.ax = bone.x; bone.ay = bone.y; bone.arotation = bone.rotation; bone.ascaleX = bone.scaleX; bone.ascaleY = bone.scaleY; bone.ashearX = bone.shearX; bone.ashearY = bone.shearY; bone.appliedValid = true; } /** @type {?} */ var updateCache = this._updateCache; for (var i = 0, n = updateCache.length; i < n; i++) updateCache[i].update(); }; /** Sets the bones, constraints, and slots to their setup pose values. */ /** * Sets the bones, constraints, and slots to their setup pose values. * @return {?} */ Skeleton.prototype.setToSetupPose = /** * Sets the bones, constraints, and slots to their setup pose values. * @return {?} */ function () { this.setBonesToSetupPose(); this.setSlotsToSetupPose(); }; /** Sets the bones and constraints to their setup pose values. */ /** * Sets the bones and constraints to their setup pose values. * @return {?} */ Skeleton.prototype.setBonesToSetupPose = /** * Sets the bones and constraints to their setup pose values. * @return {?} */ function () { /** @type {?} */ var bones = this.bones; for (var i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose(); /** @type {?} */ var ikConstraints = this.ikConstraints; for (var i = 0, n = ikConstraints.length; i < n; i++) { /** @type {?} */ var constraint = ikConstraints[i]; constraint.mix = constraint.data.mix; constraint.softness = constraint.data.softness; constraint.bendDirection = constraint.data.bendDirection; constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } /** @type {?} */ var transformConstraints = this.transformConstraints; for (var i = 0, n = transformConstraints.length; i < n; i++) { /** @type {?} */ var constraint = transformConstraints[i]; /** @type {?} */ var data = constraint.data; constraint.rotateMix = data.rotateMix; constraint.translateMix = data.translateMix; constraint.scaleMix = data.scaleMix; constraint.shearMix = data.shearMix; } /** @type {?} */ var pathConstraints = this.pathConstraints; for (var i = 0, n = pathConstraints.length; i < n; i++) { /** @type {?} */ var constraint = pathConstraints[i]; /** @type {?} */ var data = constraint.data; constraint.position = data.position; constraint.spacing = data.spacing; constraint.rotateMix = data.rotateMix; constraint.translateMix = data.translateMix; } }; /** * @return {?} */ Skeleton.prototype.setSlotsToSetupPose = /** * @return {?} */ function () { /** @type {?} */ var slots = this.slots; Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length); for (var i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose(); }; /** @return May return null. */ /** * @return {?} May return null. */ Skeleton.prototype.getRootBone = /** * @return {?} May return null. */ function () { if (this.bones.length == 0) return null; return this.bones[0]; }; /** @return May be null. */ /** * @param {?} boneName * @return {?} May be null. */ Skeleton.prototype.findBone = /** * @param {?} boneName * @return {?} May be null. */ function (boneName) { if (boneName == null) throw new Error("boneName cannot be null."); /** @type {?} */ var bones = this.bones; for (var i = 0, n = bones.length; i < n; i++) { /** @type {?} */ var bone = bones[i]; if (bone.data.name == boneName) return bone; } return null; }; /** @return -1 if the bone was not found. */ /** * @param {?} boneName * @return {?} -1 if the bone was not found. */ Skeleton.prototype.findBoneIndex = /** * @param {?} boneName * @return {?} -1 if the bone was not found. */ function (boneName) { if (boneName == null) throw new Error("boneName cannot be null."); /** @type {?} */ var bones = this.bones; for (var i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i; return -1; }; /** @return May be null. */ /** * @param {?} slotName * @return {?} May be null. */ Skeleton.prototype.findSlot = /** * @param {?} slotName * @return {?} May be null. */ function (slotName) { if (slotName == null) throw new Error("slotName cannot be null."); /** @type {?} */ var slots = this.slots; for (var i = 0, n = slots.length; i < n; i++) { /** @type {?} */ var slot = slots[i]; if (slot.data.name == slotName) return slot; } return null; }; /** @return -1 if the bone was not found. */ /** * @param {?} slotName * @return {?} -1 if the bone was not found. */ Skeleton.prototype.findSlotIndex = /** * @param {?} slotName * @return {?} -1 if the bone was not found. */ function (slotName) { if (slotName == null) throw new Error("slotName cannot be null."); /** @type {?} */ var slots = this.slots; for (var i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i; return -1; }; /** Sets a skin by name. * @see #setSkin(Skin) */ /** * Sets a skin by name. * @see #setSkin(Skin) * @param {?} skinName * @return {?} */ Skeleton.prototype.setSkinByName = /** * Sets a skin by name. * @see #setSkin(Skin) * @param {?} skinName * @return {?} */ function (skinName) { /** @type {?} */ var skin = this.data.findSkin(skinName); if (skin == null) throw new Error("Skin not found: " + skinName); this.setSkin(skin); }; /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#getDefaultSkin() default skin}. * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no * old skin, each slot's setup mode attachment is attached from the new skin. * @param newSkin May be null. */ /** * Sets the skin used to look up attachments before looking in the {\@link SkeletonData#getDefaultSkin() default skin}. * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no * old skin, each slot's setup mode attachment is attached from the new skin. * @param {?} newSkin May be null. * @return {?} */ Skeleton.prototype.setSkin = /** * Sets the skin used to look up attachments before looking in the {\@link SkeletonData#getDefaultSkin() default skin}. * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no * old skin, each slot's setup mode attachment is attached from the new skin. * @param {?} newSkin May be null. * @return {?} */ function (newSkin) { if (newSkin == this.skin) return; if (newSkin != null) { if (this.skin != null) newSkin.attachAll(this, this.skin); else { /** @type {?} */ var slots = this.slots; for (var i = 0, n = slots.length; i < n; i++) { /** @type {?} */ var slot = slots[i]; /** @type {?} */ var name_1 = slot.data.attachmentName; if (name_1 != null) { /** @type {?} */ var attachment = newSkin.getAttachment(i, name_1); if (attachment != null) slot.setAttachment(attachment); } } } } this.skin = newSkin; this.updateCache(); }; /** @return May be null. */ /** * @param {?} slotName * @param {?} attachmentName * @return {?} May be null. */ Skeleton.prototype.getAttachmentByName = /** * @param {?} slotName * @param {?} attachmentName * @return {?} May be null. */ function (slotName, attachmentName) { return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName); }; /** @return May be null. */ /** * @param {?} slotIndex * @param {?} attachmentName * @return {?} May be null. */ Skeleton.prototype.getAttachment = /** * @param {?} slotIndex * @param {?} attachmentName * @return {?} May be null. */ function (slotIndex, attachmentName) { if (attachmentName == null) throw new Error("attachmentName cannot be null."); if (this.skin != null) { /** @type {?} */ var attachment = this.skin.getAttachment(slotIndex, attachmentName); if (attachment != null) return attachment; } if (this.data.defaultSkin != null) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); return null; }; /** @param attachmentName May be null. */ /** * @param {?} slotName * @param {?} attachmentName May be null. * @return {?} */ Skeleton.prototype.setAttachment = /** * @param {?} slotName * @param {?} attachmentName May be null. * @return {?} */ function (slotName, attachmentName) { if (slotName == null) throw new Error("slotName cannot be null."); /** @type {?} */ var slots = this.slots; for (var i = 0, n = slots.length; i < n; i++) { /** @type {?} */ var slot = slots[i]; if (slot.data.name == slotName) { /** @type {?} */ var attachment = null; if (attachmentName != null) { attachment = this.getAttachment(i, attachmentName); if (attachment == null) throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); } slot.setAttachment(attachment); return; } } throw new Error("Slot not found: " + slotName); }; /** @return May be null. */ /** * @param {?} constraintName * @return {?} May be null. */ Skeleton.prototype.findIkConstraint = /** * @param {?} constraintName * @return {?} May be null. */ function (constraintName) { if (constraintName == null) throw new Error("constraintName cannot be null."); /** @type {?} */ var ikConstraints = this.ikConstraints; for (var i = 0, n = ikConstraints.length; i < n; i++) { /** @type {?} */ var ikConstraint = ikConstraints[i]; if (ikConstraint.data.name == constraintName) return ikConstraint; } return null; }; /** @return May be null. */ /** * @param {?} constraintName * @return {?} May be null. */ Skeleton.prototype.findTransformConstraint = /** * @param {?} constraintName * @return {?} May be null. */ function (constraintName) { if (constraintName == null) throw new Error("constraintName cannot be null."); /** @type {?} */ var transformConstraints = this.transformConstraints; for (var i = 0, n = transformConstraints.length; i < n; i++) { /** @type {?} */ var constraint = transformConstraints[i]; if (constraint.data.name == constraintName) return constraint; } return null; }; /** @return May be null. */ /** * @param {?} constraintName * @return {?} May be null. */ Skeleton.prototype.findPathConstraint = /** * @param {?} constraintName * @return {?} May be null. */ function (constraintName) { if (constraintName == null) throw new Error("constraintName cannot be null."); /** @type {?} */ var pathConstraints = this.pathConstraints; for (var i = 0, n = pathConstraints.length; i < n; i++) { /** @type {?} */ var constraint = pathConstraints[i]; if (constraint.data.name == constraintName) return constraint; } return null; }; /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose. * @param offset The distance from the skeleton origin to the bottom left corner of the AABB. * @param size The width and height of the AABB. * @param temp Working memory */ /** * Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose. * @param {?} offset The distance from the skeleton origin to the bottom left corner of the AABB. * @param {?} size The width and height of the AABB. * @param {?=} temp Working memory * @return {?} */ Skeleton.prototype.getBounds = /** * Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose. * @param {?} offset The distance from the skeleton origin to the bottom left corner of the AABB. * @param {?} size The width and height of the AABB. * @param {?=} temp Working memory * @return {?} */ function (offset, size, temp) { if (temp === void 0) { temp = new Array(2); } if (offset == null) throw new Error("offset cannot be null."); if (size == null) throw new Error("size cannot be null."); /** @type {?} */ var drawOrder = this.drawOrder; /** @type {?} */ var minX = Number.POSITIVE_INFINITY; /** @type {?} */ var minY = Number.POSITIVE_INFINITY; /** @type {?} */ var maxX = Number.NEGATIVE_INFINITY; /** @type {?} */ var maxY = Number.NEGATIVE_INFINITY; for (var i = 0, n = drawOrder.length; i < n; i++) { /** @type {?} */ var slot = drawOrder[i]; if (!slot.bone.active) continue; /** @type {?} */ var verticesLength = 0; /** @type {?} */ var vertices = null; /** @type {?} */ var attachment = slot.getAttachment(); if (attachment instanceof RegionAttachment) { verticesLength = 8; vertices = Utils.setArraySize(temp, verticesLength, 0); ((/** @type {?} */ (attachment))).computeWorldVertices(slot.bone, vertices, 0, 2); } else if (attachment instanceof MeshAttachment) { /** @type {?} */ var mesh = (/** @type {?} */ (attachment)); verticesLength = mesh.worldVerticesLength; vertices = Utils.setArraySize(temp, verticesLength, 0); mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); } if (vertices != null) { for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) { /** @type {?} */ var x = vertices[ii]; /** @type {?} */ var y = vertices[ii + 1]; minX = Math.min(minX, x); minY = Math.min(minY, y); maxX = Math.max(maxX, x); maxY = Math.max(maxY, y); } } } offset.set(minX, minY); size.set(maxX - minX, maxY - minY); }; /** * @param {?} delta * @return {?} */ Skeleton.prototype.update = /** * @param {?} delta * @return {?} */ function (delta) { this.time += delta; }; return Skeleton; }()); export { Skeleton }; if (false) { /** @type {?} */ Skeleton.prototype.data; /** @type {?} */ Skeleton.prototype.bones; /** @type {?} */ Skeleton.prototype.slots; /** @type {?} */ Skeleton.prototype.drawOrder; /** @type {?} */ Skeleton.prototype.ikConstraints; /** @type {?} */ Skeleton.prototype.transformConstraints; /** @type {?} */ Skeleton.prototype.pathConstraints; /** @type {?} */ Skeleton.prototype._updateCache; /** @type {?} */ Skeleton.prototype.updateCacheReset; /** @type {?} */ Skeleton.prototype.skin; /** @type {?} */ Skeleton.prototype.color; /** @type {?} */ Skeleton.prototype.time; /** @type {?} */ Skeleton.prototype.scaleX; /** @type {?} */ Skeleton.prototype.scaleY; /** @type {?} */ Skeleton.prototype.x; /** @type {?} */ Skeleton.prototype.y; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc3BpbmUvIiwic291cmNlcyI6WyJsaWIvc3BpbmUtdHMvY29yZS9Ta2VsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVyxNQUFNLFNBQVMsQ0FBQztBQUVoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlEO0lBaUJFLGtCQUFZLElBQWtCO1FBVDlCLGlCQUFZLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUN0QyxxQkFBZ0IsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBRzFDLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLE1BQUMsR0FBRyxDQUFDLENBQUM7UUFDTixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRUosSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENB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