UNPKG

@esotericsoftware/spine-core

Version:
81 lines 12.3 kB
/****************************************************************************** * Spine Runtimes License Agreement * Last updated April 5, 2025. Replaces all prior versions. * * Copyright (c) 2013-2025, 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. * * THE SPINE RUNTIMES ARE 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 * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ import { VertexAttachment } from "./attachments/Attachment.js"; import { Color } from "./Utils.js"; /** Stores a slot's pose. */ export class SlotPose { /** The color used to tint the slot's attachment. If {@link darkColor} is set, this is used as the light color for two color * tinting. */ color = new Color(1, 1, 1, 1); /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark * color's alpha is not used. */ darkColor = null; /** The current attachment for the slot, or null if the slot has no attachment. */ attachment = null; // Not used in setup pose. /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the * {@link Sequence.getSetupIndex}. */ sequenceIndex = 0; /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. * * See {@link VertexAttachment.computeWorldVertices} and * {@link DeformTimeline}. */ deform = []; SlotPose() { } set(pose) { if (pose == null) throw new Error("pose cannot be null."); this.color.setFromColor(pose.color); if (this.darkColor != null && pose.darkColor != null) this.darkColor.setFromColor(pose.darkColor); this.attachment = pose.attachment; this.sequenceIndex = pose.sequenceIndex; this.deform.length = 0; this.deform.push(...pose.deform); } /** The current attachment for the slot, or null if the slot has no attachment. */ getAttachment() { return this.attachment; } /** Sets the slot's attachment and, if the attachment changed, resets {@link sequenceIndex} and clears the {@link deform}. * The deform is not cleared if the old attachment has the same {@link VertexAttachment.getTimelineAttachment} as the * specified attachment. */ setAttachment(attachment) { if (this.attachment === attachment) return; if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) || attachment.timelineAttachment !== this.attachment.timelineAttachment) { this.deform.length = 0; } this.attachment = attachment; this.sequenceIndex = -1; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xvdFBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2xvdFBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkMsNEJBQTRCO0FBQzVCLE1BQU0sT0FBTyxRQUFRO0lBQ3BCO2tCQUNjO0lBQ0wsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZDO29DQUNnQztJQUNoQyxTQUFTLEdBQWlCLElBQUksQ0FBQztJQUUvQixrRkFBa0Y7SUFDbEYsVUFBVSxHQUFzQixJQUFJLENBQUMsQ0FBQywwQkFBMEI7SUFFaEU7eUNBQ3FDO0lBQ3JDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFbEI7Ozs7aUNBSTZCO0lBQ3BCLE1BQU0sR0FBRyxFQUFjLENBQUM7SUFFakMsUUFBUTtJQUNSLENBQUM7SUFFTSxHQUFHLENBQUUsSUFBYztRQUN6QixJQUFJLElBQUksSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLGFBQWE7UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEIsQ0FBQztJQUVEOzsrQkFFMkI7SUFDM0IsYUFBYSxDQUFFLFVBQTZCO1FBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVO1lBQUUsT0FBTztRQUMzQyxJQUFJLENBQUMsQ0FBQyxVQUFVLFlBQVksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsWUFBWSxnQkFBZ0IsQ0FBQztlQUMzRixVQUFVLENBQUMsa0JBQWtCLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB0eXBlIHsgRGVmb3JtVGltZWxpbmUgfSBmcm9tIFwiLi9BbmltYXRpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXR0YWNobWVudCB9IGZyb20gXCIuL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB7IFZlcnRleEF0dGFjaG1lbnQgfSBmcm9tIFwiLi9hdHRhY2htZW50cy9BdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcXVlbmNlIH0gZnJvbSBcIi4vYXR0YWNobWVudHMvU2VxdWVuY2UuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFN0b3JlcyBhIHNsb3QncyBwb3NlLiAqL1xuZXhwb3J0IGNsYXNzIFNsb3RQb3NlIGltcGxlbWVudHMgUG9zZTxTbG90UG9zZT4ge1xuXHQvKiogVGhlIGNvbG9yIHVzZWQgdG8gdGludCB0aGUgc2xvdCdzIGF0dGFjaG1lbnQuIElmIHtAbGluayBkYXJrQ29sb3J9IGlzIHNldCwgdGhpcyBpcyB1c2VkIGFzIHRoZSBsaWdodCBjb2xvciBmb3IgdHdvIGNvbG9yXG5cdCAqIHRpbnRpbmcuICovXG5cdHJlYWRvbmx5IGNvbG9yID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuXG5cdC8qKiBUaGUgZGFyayBjb2xvciB1c2VkIHRvIHRpbnQgdGhlIHNsb3QncyBhdHRhY2htZW50IGZvciB0d28gY29sb3IgdGludGluZywgb3IgbnVsbCBpZiB0d28gY29sb3IgdGludGluZyBpcyBub3QgdXNlZC4gVGhlIGRhcmtcblx0ICogY29sb3IncyBhbHBoYSBpcyBub3QgdXNlZC4gKi9cblx0ZGFya0NvbG9yOiBDb2xvciB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBUaGUgY3VycmVudCBhdHRhY2htZW50IGZvciB0aGUgc2xvdCwgb3IgbnVsbCBpZiB0aGUgc2xvdCBoYXMgbm8gYXR0YWNobWVudC4gKi9cblx0YXR0YWNobWVudDogQXR0YWNobWVudCB8IG51bGwgPSBudWxsOyAvLyBOb3QgdXNlZCBpbiBzZXR1cCBwb3NlLlxuXG5cdC8qKiBUaGUgaW5kZXggb2YgdGhlIHRleHR1cmUgcmVnaW9uIHRvIGRpc3BsYXkgd2hlbiB0aGUgc2xvdCdzIGF0dGFjaG1lbnQgaGFzIGEge0BsaW5rIFNlcXVlbmNlfS4gLTEgcmVwcmVzZW50cyB0aGVcblx0ICoge0BsaW5rIFNlcXVlbmNlLmdldFNldHVwSW5kZXh9LiAqL1xuXHRzZXF1ZW5jZUluZGV4ID0gMDtcblxuXHQvKiogVmFsdWVzIHRvIGRlZm9ybSB0aGUgc2xvdCdzIGF0dGFjaG1lbnQuIEZvciBhbiB1bndlaWdodGVkIG1lc2gsIHRoZSBlbnRyaWVzIGFyZSBsb2NhbCBwb3NpdGlvbnMgZm9yIGVhY2ggdmVydGV4LiBGb3IgYVxuXHQgKiB3ZWlnaHRlZCBtZXNoLCB0aGUgZW50cmllcyBhcmUgYW4gb2Zmc2V0IGZvciBlYWNoIHZlcnRleCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtZXNoJ3MgbG9jYWwgdmVydGV4IHBvc2l0aW9ucy5cblx0ICpcblx0ICogU2VlIHtAbGluayBWZXJ0ZXhBdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzfSBhbmRcblx0ICoge0BsaW5rIERlZm9ybVRpbWVsaW5lfS4gKi9cblx0cmVhZG9ubHkgZGVmb3JtID0gW10gYXMgbnVtYmVyW107XG5cblx0U2xvdFBvc2UgKCkge1xuXHR9XG5cblx0cHVibGljIHNldCAocG9zZTogU2xvdFBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmNvbG9yLnNldEZyb21Db2xvcihwb3NlLmNvbG9yKTtcblx0XHRpZiAodGhpcy5kYXJrQ29sb3IgIT0gbnVsbCAmJiBwb3NlLmRhcmtDb2xvciAhPSBudWxsKSB0aGlzLmRhcmtDb2xvci5zZXRGcm9tQ29sb3IocG9zZS5kYXJrQ29sb3IpO1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IHBvc2UuYXR0YWNobWVudDtcblx0XHR0aGlzLnNlcXVlbmNlSW5kZXggPSBwb3NlLnNlcXVlbmNlSW5kZXg7XG5cdFx0dGhpcy5kZWZvcm0ubGVuZ3RoID0gMDtcblx0XHR0aGlzLmRlZm9ybS5wdXNoKC4uLnBvc2UuZGVmb3JtKTtcblx0fVxuXG5cdC8qKiBUaGUgY3VycmVudCBhdHRhY2htZW50IGZvciB0aGUgc2xvdCwgb3IgbnVsbCBpZiB0aGUgc2xvdCBoYXMgbm8gYXR0YWNobWVudC4gKi9cblx0Z2V0QXR0YWNobWVudCAoKTogQXR0YWNobWVudCB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLmF0dGFjaG1lbnQ7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgc2xvdCdzIGF0dGFjaG1lbnQgYW5kLCBpZiB0aGUgYXR0YWNobWVudCBjaGFuZ2VkLCByZXNldHMge0BsaW5rIHNlcXVlbmNlSW5kZXh9IGFuZCBjbGVhcnMgdGhlIHtAbGluayBkZWZvcm19LlxuXHQgKiBUaGUgZGVmb3JtIGlzIG5vdCBjbGVhcmVkIGlmIHRoZSBvbGQgYXR0YWNobWVudCBoYXMgdGhlIHNhbWUge0BsaW5rIFZlcnRleEF0dGFjaG1lbnQuZ2V0VGltZWxpbmVBdHRhY2htZW50fSBhcyB0aGVcblx0ICogc3BlY2lmaWVkIGF0dGFjaG1lbnQuICovXG5cdHNldEF0dGFjaG1lbnQgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgfCBudWxsKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuYXR0YWNobWVudCA9PT0gYXR0YWNobWVudCkgcmV0dXJuO1xuXHRcdGlmICghKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBWZXJ0ZXhBdHRhY2htZW50KSB8fCAhKHRoaXMuYXR0YWNobWVudCBpbnN0YW5jZW9mIFZlcnRleEF0dGFjaG1lbnQpXG5cdFx0XHR8fCBhdHRhY2htZW50LnRpbWVsaW5lQXR0YWNobWVudCAhPT0gdGhpcy5hdHRhY2htZW50LnRpbWVsaW5lQXR0YWNobWVudCkge1xuXHRcdFx0dGhpcy5kZWZvcm0ubGVuZ3RoID0gMDtcblx0XHR9XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gYXR0YWNobWVudDtcblx0XHR0aGlzLnNlcXVlbmNlSW5kZXggPSAtMTtcblx0fVxufVxuIl19