@esotericsoftware/spine-core 4.2.25 → 4.2.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/Animation.d.ts +109 -16
  2. package/dist/Animation.js +392 -322
  3. package/dist/AnimationState.d.ts +21 -12
  4. package/dist/AnimationState.js +191 -168
  5. package/dist/AnimationStateData.d.ts +3 -3
  6. package/dist/AnimationStateData.js +6 -4
  7. package/dist/AssetManagerBase.d.ts +3 -3
  8. package/dist/AssetManagerBase.js +11 -11
  9. package/dist/AtlasAttachmentLoader.d.ts +10 -10
  10. package/dist/AtlasAttachmentLoader.js +8 -7
  11. package/dist/Bone.d.ts +19 -15
  12. package/dist/Bone.js +127 -106
  13. package/dist/BoneData.d.ts +6 -2
  14. package/dist/BoneData.js +37 -31
  15. package/dist/ConstraintData.js +4 -1
  16. package/dist/Event.d.ts +1 -1
  17. package/dist/Event.js +8 -7
  18. package/dist/EventData.js +8 -7
  19. package/dist/IkConstraint.d.ts +6 -5
  20. package/dist/IkConstraint.js +39 -22
  21. package/dist/IkConstraintData.d.ts +2 -2
  22. package/dist/IkConstraintData.js +20 -20
  23. package/dist/PathConstraint.d.ts +8 -7
  24. package/dist/PathConstraint.js +39 -29
  25. package/dist/PathConstraintData.d.ts +3 -3
  26. package/dist/PathConstraintData.js +21 -21
  27. package/dist/PhysicsConstraint.d.ts +74 -0
  28. package/dist/PhysicsConstraint.js +267 -0
  29. package/dist/PhysicsConstraintData.d.ts +61 -0
  30. package/dist/PhysicsConstraintData.js +68 -0
  31. package/dist/Skeleton.d.ts +36 -12
  32. package/dist/Skeleton.js +121 -90
  33. package/dist/SkeletonBinary.d.ts +2 -2
  34. package/dist/SkeletonBinary.js +30 -19
  35. package/dist/SkeletonBounds.d.ts +3 -3
  36. package/dist/SkeletonBounds.js +18 -20
  37. package/dist/SkeletonClipping.d.ts +3 -3
  38. package/dist/SkeletonClipping.js +11 -13
  39. package/dist/SkeletonData.d.ts +14 -7
  40. package/dist/SkeletonData.js +64 -50
  41. package/dist/SkeletonJson.d.ts +5 -5
  42. package/dist/SkeletonJson.js +26 -20
  43. package/dist/Skin.d.ts +7 -5
  44. package/dist/Skin.js +13 -5
  45. package/dist/Slot.d.ts +5 -5
  46. package/dist/Slot.js +23 -16
  47. package/dist/SlotData.d.ts +4 -2
  48. package/dist/SlotData.js +20 -14
  49. package/dist/Texture.js +14 -14
  50. package/dist/TextureAtlas.d.ts +3 -3
  51. package/dist/TextureAtlas.js +30 -27
  52. package/dist/TransformConstraint.d.ts +7 -6
  53. package/dist/TransformConstraint.js +28 -13
  54. package/dist/TransformConstraintData.d.ts +2 -2
  55. package/dist/TransformConstraintData.js +26 -26
  56. package/dist/Triangulator.d.ts +1 -1
  57. package/dist/Triangulator.js +13 -15
  58. package/dist/Updatable.d.ts +9 -4
  59. package/dist/Utils.d.ts +4 -2
  60. package/dist/Utils.js +41 -35
  61. package/dist/attachments/Attachment.d.ts +2 -2
  62. package/dist/attachments/Attachment.js +20 -19
  63. package/dist/attachments/AttachmentLoader.d.ts +8 -8
  64. package/dist/attachments/BoundingBoxAttachment.d.ts +2 -2
  65. package/dist/attachments/BoundingBoxAttachment.js +4 -4
  66. package/dist/attachments/ClippingAttachment.d.ts +3 -3
  67. package/dist/attachments/ClippingAttachment.js +10 -10
  68. package/dist/attachments/HasTextureRegion.d.ts +3 -3
  69. package/dist/attachments/MeshAttachment.d.ts +6 -6
  70. package/dist/attachments/MeshAttachment.js +29 -27
  71. package/dist/attachments/PathAttachment.d.ts +2 -2
  72. package/dist/attachments/PathAttachment.js +13 -13
  73. package/dist/attachments/PointAttachment.d.ts +3 -3
  74. package/dist/attachments/PointAttachment.js +13 -13
  75. package/dist/attachments/RegionAttachment.d.ts +6 -6
  76. package/dist/attachments/RegionAttachment.js +62 -60
  77. package/dist/attachments/Sequence.d.ts +3 -3
  78. package/dist/attachments/Sequence.js +9 -8
  79. package/dist/attachments/index.d.ts +8 -8
  80. package/dist/attachments/index.js +9 -9
  81. package/dist/iife/spine-core.js +1658 -1178
  82. package/dist/iife/spine-core.js.map +4 -4
  83. package/dist/iife/spine-core.min.js +2 -2
  84. package/dist/index.d.ts +39 -39
  85. package/dist/index.js +40 -40
  86. package/package.json +3 -2
@@ -0,0 +1,74 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated July 28, 2023. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2023, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software or
13
+ * otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
27
+ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { Bone } from "./Bone.js";
30
+ import { PhysicsConstraintData } from "./PhysicsConstraintData.js";
31
+ import { Physics, Skeleton } from "./Skeleton.js";
32
+ import { Updatable } from "./Updatable.js";
33
+ /** Stores the current pose for a physics constraint. A physics constraint applies physics to bones.
34
+ * <p>
35
+ * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
36
+ export declare class PhysicsConstraint implements Updatable {
37
+ readonly data: PhysicsConstraintData;
38
+ private _bone;
39
+ /** The bone constrained by this physics constraint. */
40
+ set bone(bone: Bone);
41
+ get bone(): Bone;
42
+ inertia: number;
43
+ strength: number;
44
+ damping: number;
45
+ massInverse: number;
46
+ wind: number;
47
+ gravity: number;
48
+ mix: number;
49
+ _reset: boolean;
50
+ ux: number;
51
+ uy: number;
52
+ cx: number;
53
+ cy: number;
54
+ tx: number;
55
+ ty: number;
56
+ xOffset: number;
57
+ xVelocity: number;
58
+ yOffset: number;
59
+ yVelocity: number;
60
+ rotateOffset: number;
61
+ rotateVelocity: number;
62
+ scaleOffset: number;
63
+ scaleVelocity: number;
64
+ active: boolean;
65
+ readonly skeleton: Skeleton;
66
+ remaining: number;
67
+ lastTime: number;
68
+ constructor(data: PhysicsConstraintData, skeleton: Skeleton);
69
+ reset(): void;
70
+ setToSetupPose(): void;
71
+ isActive(): boolean;
72
+ /** Applies the constraint to the constrained bones. */
73
+ update(physics: Physics): void;
74
+ }
@@ -0,0 +1,267 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated July 28, 2023. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2023, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software or
13
+ * otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
27
+ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { Physics } from "./Skeleton.js";
30
+ import { MathUtils } from "./Utils.js";
31
+ /** Stores the current pose for a physics constraint. A physics constraint applies physics to bones.
32
+ * <p>
33
+ * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
34
+ export class PhysicsConstraint {
35
+ data;
36
+ _bone = null;
37
+ /** The bone constrained by this physics constraint. */
38
+ set bone(bone) { this._bone = bone; }
39
+ get bone() {
40
+ if (!this._bone)
41
+ throw new Error("Bone not set.");
42
+ else
43
+ return this._bone;
44
+ }
45
+ inertia = 0;
46
+ strength = 0;
47
+ damping = 0;
48
+ massInverse = 0;
49
+ wind = 0;
50
+ gravity = 0;
51
+ mix = 0;
52
+ _reset = true;
53
+ ux = 0;
54
+ uy = 0;
55
+ cx = 0;
56
+ cy = 0;
57
+ tx = 0;
58
+ ty = 0;
59
+ xOffset = 0;
60
+ xVelocity = 0;
61
+ yOffset = 0;
62
+ yVelocity = 0;
63
+ rotateOffset = 0;
64
+ rotateVelocity = 0;
65
+ scaleOffset = 0;
66
+ scaleVelocity = 0;
67
+ active = false;
68
+ skeleton;
69
+ remaining = 0;
70
+ lastTime = 0;
71
+ constructor(data, skeleton) {
72
+ this.data = data;
73
+ this.skeleton = skeleton;
74
+ this.bone = skeleton.bones[data.bone.index];
75
+ this.inertia = data.inertia;
76
+ this.strength = data.strength;
77
+ this.damping = data.damping;
78
+ this.massInverse = data.massInverse;
79
+ this.wind = data.wind;
80
+ this.gravity = data.gravity;
81
+ this.mix = data.mix;
82
+ }
83
+ reset() {
84
+ this.remaining = 0;
85
+ this.lastTime = this.skeleton.time;
86
+ this._reset = true;
87
+ this.xOffset = 0;
88
+ this.xVelocity = 0;
89
+ this.yOffset = 0;
90
+ this.yVelocity = 0;
91
+ this.rotateOffset = 0;
92
+ this.rotateVelocity = 0;
93
+ this.scaleOffset = 0;
94
+ this.scaleVelocity = 0;
95
+ }
96
+ setToSetupPose() {
97
+ const data = this.data;
98
+ this.inertia = data.inertia;
99
+ this.strength = data.strength;
100
+ this.damping = data.damping;
101
+ this.massInverse = data.massInverse;
102
+ this.wind = data.wind;
103
+ this.gravity = data.gravity;
104
+ this.mix = data.mix;
105
+ }
106
+ isActive() {
107
+ return this.active;
108
+ }
109
+ /** Applies the constraint to the constrained bones. */
110
+ update(physics) {
111
+ const mix = this.mix;
112
+ if (mix == 0)
113
+ return;
114
+ const x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;
115
+ const bone = this.bone;
116
+ const l = bone.data.length;
117
+ switch (physics) {
118
+ case Physics.none:
119
+ return;
120
+ case Physics.reset:
121
+ this.reset();
122
+ // Fall through.
123
+ case Physics.update:
124
+ this.remaining += Math.max(this.skeleton.time - this.lastTime, 0);
125
+ this.lastTime = this.skeleton.time;
126
+ const bx = bone.worldX, by = bone.worldY;
127
+ if (this._reset) {
128
+ this._reset = false;
129
+ this.ux = bx;
130
+ this.uy = by;
131
+ }
132
+ else {
133
+ let remaining = this.remaining, i = this.inertia, step = this.data.step;
134
+ if (x || y) {
135
+ if (x) {
136
+ this.xOffset += (this.ux - bx) * i;
137
+ this.ux = bx;
138
+ }
139
+ if (y) {
140
+ this.yOffset += (this.uy - by) * i;
141
+ this.uy = by;
142
+ }
143
+ if (remaining >= step) {
144
+ const m = this.massInverse * step, e = this.strength, w = this.wind * 100, g = this.gravity * -100;
145
+ const d = Math.pow(this.damping, 60 * step);
146
+ do {
147
+ if (x) {
148
+ this.xVelocity += (w - this.xOffset * e) * m;
149
+ this.xOffset += this.xVelocity * step;
150
+ this.xVelocity *= d;
151
+ }
152
+ if (y) {
153
+ this.yVelocity += (g - this.yOffset * e) * m;
154
+ this.yOffset += this.yVelocity * step;
155
+ this.yVelocity *= d;
156
+ }
157
+ remaining -= step;
158
+ } while (remaining >= step);
159
+ }
160
+ if (x)
161
+ bone.worldX += this.xOffset * mix * this.data.x;
162
+ if (y)
163
+ bone.worldY += this.yOffset * mix * this.data.y;
164
+ }
165
+ if (rotateOrShearX || scaleX) {
166
+ let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0;
167
+ if (rotateOrShearX) {
168
+ mr = mix * this.data.rotate;
169
+ let dx = this.cx - bone.worldX, dy = this.cy - bone.worldY, r = Math.atan2(dy + this.ty, dx + this.tx) - ca - this.rotateOffset * mr;
170
+ this.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;
171
+ r = this.rotateOffset * mr + ca;
172
+ c = Math.cos(r);
173
+ s = Math.sin(r);
174
+ if (scaleX) {
175
+ r = l * bone.getWorldScaleX();
176
+ if (r > 0)
177
+ this.scaleOffset += (dx * c + dy * s) * i / r;
178
+ }
179
+ }
180
+ else {
181
+ c = Math.cos(ca);
182
+ s = Math.sin(ca);
183
+ const r = l * bone.getWorldScaleX();
184
+ if (r > 0)
185
+ this.scaleOffset += ((this.cx - bone.worldX) * c + (this.cy - bone.worldY) * s) * i / r;
186
+ }
187
+ remaining = this.remaining;
188
+ if (remaining >= step) {
189
+ const m = this.massInverse * step, e = this.strength, w = this.wind, g = this.gravity;
190
+ const d = Math.pow(this.damping, 60 * step);
191
+ while (true) {
192
+ remaining -= step;
193
+ if (scaleX) {
194
+ this.scaleVelocity += (w * c - g * s - this.scaleOffset * e) * m;
195
+ this.scaleOffset += this.scaleVelocity * step;
196
+ this.scaleVelocity *= d;
197
+ }
198
+ if (rotateOrShearX) {
199
+ this.rotateVelocity += (-0.01 * l * (w * s + g * c) - this.rotateOffset * e) * m;
200
+ this.rotateOffset += this.rotateVelocity * step;
201
+ this.rotateVelocity *= d;
202
+ if (remaining < step)
203
+ break;
204
+ const r = this.rotateOffset * mr + ca;
205
+ c = Math.cos(r);
206
+ s = Math.sin(r);
207
+ }
208
+ else if (remaining < step) //
209
+ break;
210
+ }
211
+ }
212
+ }
213
+ this.remaining = remaining;
214
+ }
215
+ this.cx = bone.worldX;
216
+ this.cy = bone.worldY;
217
+ break;
218
+ case Physics.pose:
219
+ if (x)
220
+ bone.worldX += this.xOffset * mix * this.data.x;
221
+ if (y)
222
+ bone.worldY += this.yOffset * mix * this.data.y;
223
+ }
224
+ if (rotateOrShearX) {
225
+ let o = this.rotateOffset * mix, s = 0, c = 0, a = 0;
226
+ if (this.data.shearX > 0) {
227
+ let r = 0;
228
+ if (this.data.rotate > 0) {
229
+ r = o * this.data.rotate;
230
+ s = Math.sin(r);
231
+ c = Math.cos(r);
232
+ a = bone.b;
233
+ bone.b = c * a - s * bone.d;
234
+ bone.d = s * a + c * bone.d;
235
+ }
236
+ r += o * this.data.shearX;
237
+ s = Math.sin(r);
238
+ c = Math.cos(r);
239
+ a = bone.a;
240
+ bone.a = c * a - s * bone.c;
241
+ bone.c = s * a + c * bone.c;
242
+ }
243
+ else {
244
+ o *= this.data.rotate;
245
+ s = Math.sin(o);
246
+ c = Math.cos(o);
247
+ a = bone.a;
248
+ bone.a = c * a - s * bone.c;
249
+ bone.c = s * a + c * bone.c;
250
+ a = bone.b;
251
+ bone.b = c * a - s * bone.d;
252
+ bone.d = s * a + c * bone.d;
253
+ }
254
+ }
255
+ if (scaleX) {
256
+ const s = 1 + this.scaleOffset * mix * this.data.scaleX;
257
+ bone.a *= s;
258
+ bone.c *= s;
259
+ }
260
+ if (physics != Physics.pose) {
261
+ this.tx = l * bone.a;
262
+ this.ty = l * bone.c;
263
+ }
264
+ bone.updateAppliedTransform();
265
+ }
266
+ }
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxPQUFPLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd2Qzs7MEhBRTBIO0FBQzFILE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsSUFBSSxDQUF3QjtJQUM3QixLQUFLLEdBQWdCLElBQUksQ0FBQztJQUNsQyx1REFBdUQ7SUFDdkQsSUFBVyxJQUFJLENBQUUsSUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxJQUFXLElBQUk7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBOztZQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRVIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLE9BQU8s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
@@ -0,0 +1,61 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated July 28, 2023. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2023, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software or
13
+ * otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
27
+ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { BoneData } from "./BoneData.js";
30
+ import { ConstraintData } from "./ConstraintData.js";
31
+ /** Stores the setup pose for a {@link PhysicsConstraint}.
32
+ * <p>
33
+ * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
34
+ export declare class PhysicsConstraintData extends ConstraintData {
35
+ private _bone;
36
+ /** The bone constrained by this physics constraint. */
37
+ set bone(boneData: BoneData);
38
+ get bone(): BoneData;
39
+ x: number;
40
+ y: number;
41
+ rotate: number;
42
+ scaleX: number;
43
+ shearX: number;
44
+ step: number;
45
+ inertia: number;
46
+ strength: number;
47
+ damping: number;
48
+ massInverse: number;
49
+ wind: number;
50
+ gravity: number;
51
+ /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */
52
+ mix: number;
53
+ inertiaGlobal: boolean;
54
+ strengthGlobal: boolean;
55
+ dampingGlobal: boolean;
56
+ massGlobal: boolean;
57
+ windGlobal: boolean;
58
+ gravityGlobal: boolean;
59
+ mixGlobal: boolean;
60
+ constructor(name: string);
61
+ }
@@ -0,0 +1,68 @@
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated July 28, 2023. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2023, Esoteric Software LLC
6
+ *
7
+ * Integration of the Spine Runtimes into software or otherwise creating
8
+ * derivative works of the Spine Runtimes is permitted under the terms and
9
+ * conditions of Section 2 of the Spine Editor License Agreement:
10
+ * http://esotericsoftware.com/spine-editor-license
11
+ *
12
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software or
13
+ * otherwise create derivative works of the Spine Runtimes (collectively,
14
+ * "Products"), provided that each user of the Products must obtain their own
15
+ * Spine Editor license and redistribution of the Products in any form must
16
+ * include this license and copyright notice.
17
+ *
18
+ * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
+ * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
27
+ * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *****************************************************************************/
29
+ import { ConstraintData } from "./ConstraintData.js";
30
+ /** Stores the setup pose for a {@link PhysicsConstraint}.
31
+ * <p>
32
+ * See <a href="http://esotericsoftware.com/spine-physics-constraints">Physics constraints</a> in the Spine User Guide. */
33
+ export class PhysicsConstraintData extends ConstraintData {
34
+ _bone = null;
35
+ /** The bone constrained by this physics constraint. */
36
+ set bone(boneData) { this._bone = boneData; }
37
+ get bone() {
38
+ if (!this._bone)
39
+ throw new Error("BoneData not set.");
40
+ else
41
+ return this._bone;
42
+ }
43
+ x = 0;
44
+ y = 0;
45
+ rotate = 0;
46
+ scaleX = 1;
47
+ shearX = 1;
48
+ step = 0;
49
+ inertia = 0;
50
+ strength = 0;
51
+ damping = 0;
52
+ massInverse = 0;
53
+ wind = 0;
54
+ gravity = 0;
55
+ /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */
56
+ mix = 0;
57
+ inertiaGlobal = false;
58
+ strengthGlobal = false;
59
+ dampingGlobal = false;
60
+ massGlobal = false;
61
+ windGlobal = false;
62
+ gravityGlobal = false;
63
+ mixGlobal = false;
64
+ constructor(name) {
65
+ super(name, 0, false);
66
+ }
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BoeXNpY3NDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3JEOzswSEFFMEg7QUFDMUgsTUFBTSxPQUFRLHFCQUFzQixTQUFRLGNBQWM7SUFDakQsS0FBSyxHQUFvQixJQUFJLENBQUM7SUFDdEMsdURBQXVEO0lBQ3ZELElBQVcsSUFBSSxDQUFFLFFBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQVcsSUFBSTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTs7WUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNOLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osZ0dBQWdHO0lBQ2hHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDUixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0QifQ==
@@ -26,16 +26,17 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE
27
27
  * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { Attachment } from "./attachments/Attachment";
30
- import { Bone } from "./Bone";
31
- import { IkConstraint } from "./IkConstraint";
32
- import { PathConstraint } from "./PathConstraint";
33
- import { SkeletonData } from "./SkeletonData";
34
- import { Skin } from "./Skin";
35
- import { Slot } from "./Slot";
36
- import { TransformConstraint } from "./TransformConstraint";
37
- import { Updatable } from "./Updatable";
38
- import { Color, Vector2 } from "./Utils";
29
+ import { Attachment } from "./attachments/Attachment.js";
30
+ import { Bone } from "./Bone.js";
31
+ import { IkConstraint } from "./IkConstraint.js";
32
+ import { PathConstraint } from "./PathConstraint.js";
33
+ import { PhysicsConstraint } from "./PhysicsConstraint.js";
34
+ import { SkeletonData } from "./SkeletonData.js";
35
+ import { Skin } from "./Skin.js";
36
+ import { Slot } from "./Slot.js";
37
+ import { TransformConstraint } from "./TransformConstraint.js";
38
+ import { Updatable } from "./Updatable.js";
39
+ import { Color, Vector2 } from "./Utils.js";
39
40
  /** Stores the current pose for a skeleton.
40
41
  *
41
42
  * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */
@@ -55,6 +56,8 @@ export declare class Skeleton {
55
56
  transformConstraints: Array<TransformConstraint>;
56
57
  /** The skeleton's path constraints. */
57
58
  pathConstraints: Array<PathConstraint>;
59
+ /** The skeleton's physics constraints. */
60
+ physicsConstraints: Array<PhysicsConstraint>;
58
61
  /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */
59
62
  _updateCache: Updatable[];
60
63
  /** The skeleton's current skin. May be null. */
@@ -73,6 +76,10 @@ export declare class Skeleton {
73
76
  x: number;
74
77
  /** Sets the skeleton Y position, which is added to the root bone worldY position. */
75
78
  y: number;
79
+ /** Returns the skeleton's time. This is used for time-based manipulations, such as {@link PhysicsConstraint}.
80
+ * <p>
81
+ * See {@link #update(float)}. */
82
+ time: number;
76
83
  constructor(data: SkeletonData);
77
84
  /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,
78
85
  * constraints, or weighted path attachments are added or removed. */
@@ -82,14 +89,15 @@ export declare class Skeleton {
82
89
  sortTransformConstraint(constraint: TransformConstraint): void;
83
90
  sortPathConstraintAttachment(skin: Skin, slotIndex: number, slotBone: Bone): void;
84
91
  sortPathConstraintAttachmentWith(attachment: Attachment, slotBone: Bone): void;
92
+ sortPhysicsConstraint(constraint: PhysicsConstraint): void;
85
93
  sortBone(bone: Bone): void;
86
94
  sortReset(bones: Array<Bone>): void;
87
95
  /** Updates the world transform for each bone and applies all constraints.
88
96
  *
89
97
  * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
90
98
  * Runtimes Guide. */
91
- updateWorldTransform(): void;
92
- updateWorldTransformWith(parent: Bone): void;
99
+ updateWorldTransform(physics: Physics): void;
100
+ updateWorldTransformWith(physics: Physics, parent: Bone): void;
93
101
  /** Sets the bones, constraints, and slots to their setup pose values. */
94
102
  setToSetupPose(): void;
95
103
  /** Sets the bones and constraints to their setup pose values. */
@@ -147,6 +155,9 @@ export declare class Skeleton {
147
155
  * than to call it repeatedly.
148
156
  * @return May be null. */
149
157
  findPathConstraint(constraintName: string): PathConstraint | null;
158
+ /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this
159
+ * method than to call it repeatedly. */
160
+ findPhysicsConstraint(constraintName: string): PhysicsConstraint | null;
150
161
  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose as `{ x: number, y: number, width: number, height: number }`.
151
162
  * Note that this method will create temporary objects which can add to garbage collection pressure. Use `getBounds()` if garbage collection is a concern. */
152
163
  getBoundsRect(): {
@@ -160,4 +171,17 @@ export declare class Skeleton {
160
171
  * @param size An output value, the width and height of the AABB.
161
172
  * @param temp Working memory to temporarily store attachments' computed world vertices. */
162
173
  getBounds(offset: Vector2, size: Vector2, temp?: Array<number>): void;
174
+ /** Increments the skeleton's {@link #time}. */
175
+ update(delta: number): void;
176
+ }
177
+ /** Determines how physics and other non-deterministic updates are applied. */
178
+ export declare enum Physics {
179
+ /** Physics are not updated or applied. */
180
+ none = 0,
181
+ /** Physics are reset to the current pose. */
182
+ reset = 1,
183
+ /** Physics are updated and the pose from physics is applied. */
184
+ update = 2,
185
+ /** Physics are not updated but the pose from physics is applied. */
186
+ pose = 3
163
187
  }