@esotericsoftware/spine-core
Version:
The official Spine Runtimes for the web.
78 lines • 10.2 kB
JavaScript
/******************************************************************************
* 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.
*****************************************************************************/
/** The base class for an object with a number of poses:
* - {@link data}: The setup pose.
* - {@link pose}: The unconstrained pose. Set by animations and application code.
* - {@link appliedPose}: The pose to use for rendering. Possibly modified by constraints.
*/
export class Posed {
/** The constraint's setup pose data. */
data;
pose;
constrainedPose;
appliedPose;
constructor(data, pose, constrainedPose) {
if (data == null)
throw new Error("data cannot be null.");
this.data = data;
this.pose = pose;
this.constrainedPose = constrainedPose;
this.appliedPose = pose;
}
/** Sets the unconstrained pose to the setup pose. */
setupPose() {
this.pose.set(this.data.setupPose);
}
/** The setup pose data. May be shared with multiple instances. */
getData() {
return this.data;
}
/** The unconstrained pose for this object, set by animations and application code. */
getPose() {
return this.pose;
}
/** The pose to use for rendering. If no constraints modify this pose, this is the same as {@link pose}. Otherwise it is a
* copy of {@link pose} modified by constraints. */
getAppliedPose() {
return this.appliedPose;
}
/** Sets the applied pose to the unconstrained pose, for when no constraints will modify the pose. */
unconstrained() {
this.appliedPose = this.pose;
}
/** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */
constrained() {
this.appliedPose = this.constrainedPose;
}
/** Sets the constrained pose to the unconstrained pose, as a starting point for constraints to be applied. */
resetConstrained() {
this.constrainedPose.set(this.pose);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9zZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUG9zZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSy9FOzs7O0dBSUc7QUFDSCxNQUFNLE9BQWdCLEtBQUs7SUFJMUIsd0NBQXdDO0lBQy9CLElBQUksQ0FBSTtJQUNSLElBQUksQ0FBSTtJQUNSLGVBQWUsQ0FBSTtJQUM1QixXQUFXLENBQUk7SUFFZixZQUFhLElBQU8sRUFBRSxJQUFPLEVBQUUsZUFBa0I7UUFDaEQsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQscURBQXFEO0lBQzlDLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrRUFBa0U7SUFDM0QsT0FBTztRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsc0ZBQXNGO0lBQy9FLE9BQU87UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVEO3VEQUNtRDtJQUM1QyxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQscUdBQXFHO0lBQ3JHLGFBQWE7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELHdIQUF3SDtJQUN4SCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCw4R0FBOEc7SUFDOUcsZ0JBQWdCO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FFRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBQb3NlIH0gZnJvbSBcIi4vUG9zZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQb3NlZERhdGEgfSBmcm9tIFwiLi9Qb3NlZERhdGEuanNcIjtcblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBhbiBvYmplY3Qgd2l0aCBhIG51bWJlciBvZiBwb3NlczpcbiAqIC0ge0BsaW5rIGRhdGF9OiBUaGUgc2V0dXAgcG9zZS5cbiAqIC0ge0BsaW5rIHBvc2V9OiBUaGUgdW5jb25zdHJhaW5lZCBwb3NlLiBTZXQgYnkgYW5pbWF0aW9ucyBhbmQgYXBwbGljYXRpb24gY29kZS5cbiAqIC0ge0BsaW5rIGFwcGxpZWRQb3NlfTogVGhlIHBvc2UgdG8gdXNlIGZvciByZW5kZXJpbmcuIFBvc3NpYmx5IG1vZGlmaWVkIGJ5IGNvbnN0cmFpbnRzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9zZWQ8XG5cdEQgZXh0ZW5kcyBQb3NlZERhdGE8UD4sXG5cdFAgZXh0ZW5kcyBQb3NlPFA+PiB7XG5cblx0LyoqIFRoZSBjb25zdHJhaW50J3Mgc2V0dXAgcG9zZSBkYXRhLiAqL1xuXHRyZWFkb25seSBkYXRhOiBEO1xuXHRyZWFkb25seSBwb3NlOiBQO1xuXHRyZWFkb25seSBjb25zdHJhaW5lZFBvc2U6IFA7XG5cdGFwcGxpZWRQb3NlOiBQO1xuXG5cdGNvbnN0cnVjdG9yIChkYXRhOiBELCBwb3NlOiBQLCBjb25zdHJhaW5lZFBvc2U6IFApIHtcblx0XHRpZiAoZGF0YSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xuXHRcdHRoaXMucG9zZSA9IHBvc2U7XG5cdFx0dGhpcy5jb25zdHJhaW5lZFBvc2UgPSBjb25zdHJhaW5lZFBvc2U7XG5cdFx0dGhpcy5hcHBsaWVkUG9zZSA9IHBvc2U7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgdW5jb25zdHJhaW5lZCBwb3NlIHRvIHRoZSBzZXR1cCBwb3NlLiAqL1xuXHRwdWJsaWMgc2V0dXBQb3NlICgpOiB2b2lkIHtcblx0XHR0aGlzLnBvc2Uuc2V0KHRoaXMuZGF0YS5zZXR1cFBvc2UpO1xuXHR9XG5cblx0LyoqIFRoZSBzZXR1cCBwb3NlIGRhdGEuIE1heSBiZSBzaGFyZWQgd2l0aCBtdWx0aXBsZSBpbnN0YW5jZXMuICovXG5cdHB1YmxpYyBnZXREYXRhICgpOiBEIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhO1xuXHR9XG5cblx0LyoqIFRoZSB1bmNvbnN0cmFpbmVkIHBvc2UgZm9yIHRoaXMgb2JqZWN0LCBzZXQgYnkgYW5pbWF0aW9ucyBhbmQgYXBwbGljYXRpb24gY29kZS4gKi9cblx0cHVibGljIGdldFBvc2UgKCk6IFAge1xuXHRcdHJldHVybiB0aGlzLnBvc2U7XG5cdH1cblxuXHQvKiogVGhlIHBvc2UgdG8gdXNlIGZvciByZW5kZXJpbmcuIElmIG5vIGNvbnN0cmFpbnRzIG1vZGlmeSB0aGlzIHBvc2UsIHRoaXMgaXMgdGhlIHNhbWUgYXMge0BsaW5rIHBvc2V9LiBPdGhlcndpc2UgaXQgaXMgYVxuXHQgKiBjb3B5IG9mIHtAbGluayBwb3NlfSBtb2RpZmllZCBieSBjb25zdHJhaW50cy4gKi9cblx0cHVibGljIGdldEFwcGxpZWRQb3NlICgpOiBQIHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWVkUG9zZTtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBhcHBsaWVkIHBvc2UgdG8gdGhlIHVuY29uc3RyYWluZWQgcG9zZSwgZm9yIHdoZW4gbm8gY29uc3RyYWludHMgd2lsbCBtb2RpZnkgdGhlIHBvc2UuICovXG5cdHVuY29uc3RyYWluZWQgKCkge1xuXHRcdHRoaXMuYXBwbGllZFBvc2UgPSB0aGlzLnBvc2U7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgYXBwbGllZCBwb3NlIHRvIHRoZSBjb25zdHJhaW5lZCBwb3NlLCBpbiBhbnRpY2lwYXRpb24gb2YgdGhlIGFwcGxpZWQgcG9zZSBiZWluZyBtb2RpZmllZCBieSBjb25zdHJhaW50cy4gKi9cblx0Y29uc3RyYWluZWQgKCkge1xuXHRcdHRoaXMuYXBwbGllZFBvc2UgPSB0aGlzLmNvbnN0cmFpbmVkUG9zZTtcblx0fVxuXG5cdC8qKiBTZXRzIHRoZSBjb25zdHJhaW5lZCBwb3NlIHRvIHRoZSB1bmNvbnN0cmFpbmVkIHBvc2UsIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGNvbnN0cmFpbnRzIHRvIGJlIGFwcGxpZWQuICovXG5cdHJlc2V0Q29uc3RyYWluZWQgKCkgeyAvLyBQb3J0OiByZXNldENvbnN0cmFpbmVkIC0gcmVmZXJlbmNlIHJ1bnRpbWU6ICByZXNldCgpXG5cdFx0dGhpcy5jb25zdHJhaW5lZFBvc2Uuc2V0KHRoaXMucG9zZSk7XG5cdH1cblxufVxuIl19