@esotericsoftware/spine-core 4.1.2 → 4.1.6
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.
- package/dist/Animation.d.ts +382 -382
- package/dist/Animation.js +2058 -2031
- package/dist/AnimationState.d.ts +396 -396
- package/dist/AnimationState.js +1083 -959
- package/dist/AnimationStateData.d.ts +51 -51
- package/dist/AnimationStateData.js +72 -70
- package/dist/AssetManagerBase.d.ts +74 -72
- package/dist/AssetManagerBase.js +304 -303
- package/dist/AtlasAttachmentLoader.d.ts +53 -53
- package/dist/AtlasAttachmentLoader.js +95 -94
- package/dist/Bone.d.ts +138 -138
- package/dist/Bone.js +340 -334
- package/dist/BoneData.d.ts +72 -72
- package/dist/BoneData.js +82 -74
- package/dist/ConstraintData.d.ts +35 -35
- package/dist/ConstraintData.js +36 -36
- package/dist/Event.d.ts +44 -44
- package/dist/Event.js +49 -42
- package/dist/EventData.d.ts +41 -41
- package/dist/EventData.js +44 -37
- package/dist/IkConstraint.d.ts +64 -64
- package/dist/IkConstraint.js +291 -285
- package/dist/IkConstraintData.d.ts +54 -54
- package/dist/IkConstraintData.js +56 -54
- package/dist/PathConstraint.d.ts +71 -71
- package/dist/PathConstraint.js +475 -469
- package/dist/PathConstraintData.d.ts +80 -80
- package/dist/PathConstraintData.js +84 -70
- package/dist/Skeleton.d.ts +152 -152
- package/dist/Skeleton.js +581 -563
- package/dist/SkeletonBinary.d.ts +68 -68
- package/dist/SkeletonBinary.js +1132 -1131
- package/dist/SkeletonBounds.d.ts +77 -77
- package/dist/SkeletonBounds.js +218 -218
- package/dist/SkeletonClipping.d.ts +50 -50
- package/dist/SkeletonClipping.js +323 -323
- package/dist/SkeletonData.d.ts +114 -114
- package/dist/SkeletonData.js +190 -167
- package/dist/SkeletonJson.d.ts +53 -53
- package/dist/SkeletonJson.js +954 -953
- package/dist/Skin.d.ts +71 -71
- package/dist/Skin.js +203 -201
- package/dist/Slot.d.ts +69 -69
- package/dist/Slot.js +97 -85
- package/dist/SlotData.d.ts +57 -57
- package/dist/SlotData.js +68 -55
- package/dist/Texture.d.ts +69 -69
- package/dist/Texture.js +72 -72
- package/dist/TextureAtlas.d.ts +65 -65
- package/dist/TextureAtlas.js +267 -246
- package/dist/TransformConstraint.d.ts +60 -60
- package/dist/TransformConstraint.js +246 -240
- package/dist/TransformConstraintData.d.ts +60 -60
- package/dist/TransformConstraintData.js +62 -60
- package/dist/Triangulator.d.ts +43 -43
- package/dist/Triangulator.js +243 -243
- package/dist/Updatable.d.ts +37 -37
- package/dist/Updatable.js +29 -29
- package/dist/Utils.d.ts +168 -168
- package/dist/Utils.js +403 -403
- package/dist/VertexEffect.d.ts +35 -35
- package/dist/VertexEffect.js +29 -29
- package/dist/attachments/Attachment.d.ts +72 -72
- package/dist/attachments/Attachment.js +149 -141
- package/dist/attachments/AttachmentLoader.d.ts +54 -54
- package/dist/attachments/AttachmentLoader.js +29 -29
- package/dist/attachments/BoundingBoxAttachment.d.ts +40 -40
- package/dist/attachments/BoundingBoxAttachment.js +47 -47
- package/dist/attachments/ClippingAttachment.d.ts +42 -42
- package/dist/attachments/ClippingAttachment.js +51 -48
- package/dist/attachments/HasTextureRegion.d.ts +44 -44
- package/dist/attachments/HasTextureRegion.js +29 -29
- package/dist/attachments/MeshAttachment.d.ts +79 -79
- package/dist/attachments/MeshAttachment.js +189 -167
- package/dist/attachments/PathAttachment.d.ts +47 -47
- package/dist/attachments/PathAttachment.js +59 -57
- package/dist/attachments/PointAttachment.d.ts +48 -48
- package/dist/attachments/PointAttachment.js +66 -63
- package/dist/attachments/RegionAttachment.d.ts +111 -111
- package/dist/attachments/RegionAttachment.js +204 -199
- package/dist/attachments/Sequence.d.ts +55 -55
- package/dist/attachments/Sequence.js +90 -90
- package/dist/attachments/index.d.ts +8 -8
- package/dist/attachments/index.js +8 -8
- package/dist/iife/spine-core.js +178 -8
- package/dist/iife/spine-core.js.map +2 -2
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +42 -42
- package/dist/index.js +42 -42
- package/dist/polyfills.d.ts +29 -29
- package/dist/polyfills.js +38 -38
- package/dist/vertexeffects/JitterEffect.d.ts +39 -39
- package/dist/vertexeffects/JitterEffect.js +45 -45
- package/dist/vertexeffects/SwirlEffect.d.ts +44 -44
- package/dist/vertexeffects/SwirlEffect.js +60 -60
- package/package.json +32 -32
package/dist/Skin.d.ts
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
/******************************************************************************
|
|
2
|
-
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated September 24, 2021. Replaces all prior versions.
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) 2013-2021, 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
|
|
13
|
-
* or 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
|
|
27
|
-
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
-
*****************************************************************************/
|
|
29
|
-
import { Attachment } from "./attachments/Attachment";
|
|
30
|
-
import { BoneData } from "./BoneData";
|
|
31
|
-
import { ConstraintData } from "./ConstraintData";
|
|
32
|
-
import { Skeleton } from "./Skeleton";
|
|
33
|
-
import { StringMap } from "./Utils";
|
|
34
|
-
/** Stores an entry in the skin consisting of the slot index, name, and attachment **/
|
|
35
|
-
export declare class SkinEntry {
|
|
36
|
-
slotIndex: number;
|
|
37
|
-
name: string;
|
|
38
|
-
attachment: Attachment;
|
|
39
|
-
constructor(slotIndex
|
|
40
|
-
}
|
|
41
|
-
/** Stores attachments by slot index and attachment name.
|
|
42
|
-
*
|
|
43
|
-
* See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
|
|
44
|
-
* [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
|
|
45
|
-
export declare class Skin {
|
|
46
|
-
/** The skin's name, which is unique across all skins in the skeleton. */
|
|
47
|
-
name: string;
|
|
48
|
-
attachments: StringMap<Attachment>[];
|
|
49
|
-
bones: BoneData[];
|
|
50
|
-
constraints: ConstraintData[];
|
|
51
|
-
constructor(name: string);
|
|
52
|
-
/** Adds an attachment to the skin for the specified slot index and name. */
|
|
53
|
-
setAttachment(slotIndex: number, name: string, attachment: Attachment): void;
|
|
54
|
-
/** Adds all attachments, bones, and constraints from the specified skin to this skin. */
|
|
55
|
-
addSkin(skin: Skin): void;
|
|
56
|
-
/** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not
|
|
57
|
-
* copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */
|
|
58
|
-
copySkin(skin: Skin): void;
|
|
59
|
-
/** Returns the attachment for the specified slot index and name, or null. */
|
|
60
|
-
getAttachment(slotIndex: number, name: string): Attachment;
|
|
61
|
-
/** Removes the attachment in the skin for the specified slot index and name, if any. */
|
|
62
|
-
removeAttachment(slotIndex: number, name: string): void;
|
|
63
|
-
/** Returns all attachments in this skin. */
|
|
64
|
-
getAttachments(): Array<SkinEntry>;
|
|
65
|
-
/** Returns all attachments in this skin for the specified slot index. */
|
|
66
|
-
getAttachmentsForSlot(slotIndex: number, attachments: Array<SkinEntry>): void;
|
|
67
|
-
/** Clears all attachments, bones, and constraints. */
|
|
68
|
-
clear(): void;
|
|
69
|
-
/** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */
|
|
70
|
-
attachAll(skeleton: Skeleton, oldSkin: Skin): void;
|
|
71
|
-
}
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* Spine Runtimes License Agreement
|
|
3
|
+
* Last updated September 24, 2021. Replaces all prior versions.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2013-2021, 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
|
|
13
|
+
* or 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
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
*****************************************************************************/
|
|
29
|
+
import { Attachment } from "./attachments/Attachment";
|
|
30
|
+
import { BoneData } from "./BoneData";
|
|
31
|
+
import { ConstraintData } from "./ConstraintData";
|
|
32
|
+
import { Skeleton } from "./Skeleton";
|
|
33
|
+
import { StringMap } from "./Utils";
|
|
34
|
+
/** Stores an entry in the skin consisting of the slot index, name, and attachment **/
|
|
35
|
+
export declare class SkinEntry {
|
|
36
|
+
slotIndex: number;
|
|
37
|
+
name: string;
|
|
38
|
+
attachment: Attachment;
|
|
39
|
+
constructor(slotIndex?: number, name?: string, attachment?: Attachment);
|
|
40
|
+
}
|
|
41
|
+
/** Stores attachments by slot index and attachment name.
|
|
42
|
+
*
|
|
43
|
+
* See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
|
|
44
|
+
* [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
|
|
45
|
+
export declare class Skin {
|
|
46
|
+
/** The skin's name, which is unique across all skins in the skeleton. */
|
|
47
|
+
name: string;
|
|
48
|
+
attachments: StringMap<Attachment>[];
|
|
49
|
+
bones: BoneData[];
|
|
50
|
+
constraints: ConstraintData[];
|
|
51
|
+
constructor(name: string);
|
|
52
|
+
/** Adds an attachment to the skin for the specified slot index and name. */
|
|
53
|
+
setAttachment(slotIndex: number, name: string, attachment: Attachment): void;
|
|
54
|
+
/** Adds all attachments, bones, and constraints from the specified skin to this skin. */
|
|
55
|
+
addSkin(skin: Skin): void;
|
|
56
|
+
/** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not
|
|
57
|
+
* copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */
|
|
58
|
+
copySkin(skin: Skin): void;
|
|
59
|
+
/** Returns the attachment for the specified slot index and name, or null. */
|
|
60
|
+
getAttachment(slotIndex: number, name: string): Attachment;
|
|
61
|
+
/** Removes the attachment in the skin for the specified slot index and name, if any. */
|
|
62
|
+
removeAttachment(slotIndex: number, name: string): void;
|
|
63
|
+
/** Returns all attachments in this skin. */
|
|
64
|
+
getAttachments(): Array<SkinEntry>;
|
|
65
|
+
/** Returns all attachments in this skin for the specified slot index. */
|
|
66
|
+
getAttachmentsForSlot(slotIndex: number, attachments: Array<SkinEntry>): void;
|
|
67
|
+
/** Clears all attachments, bones, and constraints. */
|
|
68
|
+
clear(): void;
|
|
69
|
+
/** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */
|
|
70
|
+
attachAll(skeleton: Skeleton, oldSkin: Skin): void;
|
|
71
|
+
}
|
package/dist/Skin.js
CHANGED
|
@@ -1,201 +1,203 @@
|
|
|
1
|
-
/******************************************************************************
|
|
2
|
-
* Spine Runtimes License Agreement
|
|
3
|
-
* Last updated September 24, 2021. Replaces all prior versions.
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) 2013-2021, 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
|
|
13
|
-
* or 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
|
|
27
|
-
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
-
*****************************************************************************/
|
|
29
|
-
import { MeshAttachment } from "./attachments/MeshAttachment";
|
|
30
|
-
/** Stores an entry in the skin consisting of the slot index, name, and attachment **/
|
|
31
|
-
export class SkinEntry {
|
|
32
|
-
constructor(slotIndex, name, attachment) {
|
|
33
|
-
this.slotIndex = slotIndex;
|
|
34
|
-
this.name = name;
|
|
35
|
-
this.attachment = attachment;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/** Stores attachments by slot index and attachment name.
|
|
39
|
-
*
|
|
40
|
-
* See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
|
|
41
|
-
* [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
|
|
42
|
-
export class Skin {
|
|
43
|
-
constructor(name) {
|
|
44
|
-
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
attachments
|
|
60
|
-
attachments[slotIndex]
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (attachment.attachment
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
this.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* Spine Runtimes License Agreement
|
|
3
|
+
* Last updated September 24, 2021. Replaces all prior versions.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2013-2021, 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
|
|
13
|
+
* or 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
|
|
27
|
+
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
*****************************************************************************/
|
|
29
|
+
import { MeshAttachment } from "./attachments/MeshAttachment";
|
|
30
|
+
/** Stores an entry in the skin consisting of the slot index, name, and attachment **/
|
|
31
|
+
export class SkinEntry {
|
|
32
|
+
constructor(slotIndex = 0, name = null, attachment = null) {
|
|
33
|
+
this.slotIndex = slotIndex;
|
|
34
|
+
this.name = name;
|
|
35
|
+
this.attachment = attachment;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Stores attachments by slot index and attachment name.
|
|
39
|
+
*
|
|
40
|
+
* See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
|
|
41
|
+
* [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
|
|
42
|
+
export class Skin {
|
|
43
|
+
constructor(name) {
|
|
44
|
+
/** The skin's name, which is unique across all skins in the skeleton. */
|
|
45
|
+
this.name = null;
|
|
46
|
+
this.attachments = new Array();
|
|
47
|
+
this.bones = Array();
|
|
48
|
+
this.constraints = new Array();
|
|
49
|
+
if (!name)
|
|
50
|
+
throw new Error("name cannot be null.");
|
|
51
|
+
this.name = name;
|
|
52
|
+
}
|
|
53
|
+
/** Adds an attachment to the skin for the specified slot index and name. */
|
|
54
|
+
setAttachment(slotIndex, name, attachment) {
|
|
55
|
+
if (!attachment)
|
|
56
|
+
throw new Error("attachment cannot be null.");
|
|
57
|
+
let attachments = this.attachments;
|
|
58
|
+
if (slotIndex >= attachments.length)
|
|
59
|
+
attachments.length = slotIndex + 1;
|
|
60
|
+
if (!attachments[slotIndex])
|
|
61
|
+
attachments[slotIndex] = {};
|
|
62
|
+
attachments[slotIndex][name] = attachment;
|
|
63
|
+
}
|
|
64
|
+
/** Adds all attachments, bones, and constraints from the specified skin to this skin. */
|
|
65
|
+
addSkin(skin) {
|
|
66
|
+
for (let i = 0; i < skin.bones.length; i++) {
|
|
67
|
+
let bone = skin.bones[i];
|
|
68
|
+
let contained = false;
|
|
69
|
+
for (let ii = 0; ii < this.bones.length; ii++) {
|
|
70
|
+
if (this.bones[ii] == bone) {
|
|
71
|
+
contained = true;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!contained)
|
|
76
|
+
this.bones.push(bone);
|
|
77
|
+
}
|
|
78
|
+
for (let i = 0; i < skin.constraints.length; i++) {
|
|
79
|
+
let constraint = skin.constraints[i];
|
|
80
|
+
let contained = false;
|
|
81
|
+
for (let ii = 0; ii < this.constraints.length; ii++) {
|
|
82
|
+
if (this.constraints[ii] == constraint) {
|
|
83
|
+
contained = true;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!contained)
|
|
88
|
+
this.constraints.push(constraint);
|
|
89
|
+
}
|
|
90
|
+
let attachments = skin.getAttachments();
|
|
91
|
+
for (let i = 0; i < attachments.length; i++) {
|
|
92
|
+
var attachment = attachments[i];
|
|
93
|
+
this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not
|
|
97
|
+
* copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */
|
|
98
|
+
copySkin(skin) {
|
|
99
|
+
for (let i = 0; i < skin.bones.length; i++) {
|
|
100
|
+
let bone = skin.bones[i];
|
|
101
|
+
let contained = false;
|
|
102
|
+
for (let ii = 0; ii < this.bones.length; ii++) {
|
|
103
|
+
if (this.bones[ii] == bone) {
|
|
104
|
+
contained = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!contained)
|
|
109
|
+
this.bones.push(bone);
|
|
110
|
+
}
|
|
111
|
+
for (let i = 0; i < skin.constraints.length; i++) {
|
|
112
|
+
let constraint = skin.constraints[i];
|
|
113
|
+
let contained = false;
|
|
114
|
+
for (let ii = 0; ii < this.constraints.length; ii++) {
|
|
115
|
+
if (this.constraints[ii] == constraint) {
|
|
116
|
+
contained = true;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (!contained)
|
|
121
|
+
this.constraints.push(constraint);
|
|
122
|
+
}
|
|
123
|
+
let attachments = skin.getAttachments();
|
|
124
|
+
for (let i = 0; i < attachments.length; i++) {
|
|
125
|
+
var attachment = attachments[i];
|
|
126
|
+
if (!attachment.attachment)
|
|
127
|
+
continue;
|
|
128
|
+
if (attachment.attachment instanceof MeshAttachment) {
|
|
129
|
+
attachment.attachment = attachment.attachment.newLinkedMesh();
|
|
130
|
+
this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
attachment.attachment = attachment.attachment.copy();
|
|
134
|
+
this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Returns the attachment for the specified slot index and name, or null. */
|
|
139
|
+
getAttachment(slotIndex, name) {
|
|
140
|
+
let dictionary = this.attachments[slotIndex];
|
|
141
|
+
return dictionary ? dictionary[name] : null;
|
|
142
|
+
}
|
|
143
|
+
/** Removes the attachment in the skin for the specified slot index and name, if any. */
|
|
144
|
+
removeAttachment(slotIndex, name) {
|
|
145
|
+
let dictionary = this.attachments[slotIndex];
|
|
146
|
+
if (dictionary)
|
|
147
|
+
dictionary[name] = null;
|
|
148
|
+
}
|
|
149
|
+
/** Returns all attachments in this skin. */
|
|
150
|
+
getAttachments() {
|
|
151
|
+
let entries = new Array();
|
|
152
|
+
for (var i = 0; i < this.attachments.length; i++) {
|
|
153
|
+
let slotAttachments = this.attachments[i];
|
|
154
|
+
if (slotAttachments) {
|
|
155
|
+
for (let name in slotAttachments) {
|
|
156
|
+
let attachment = slotAttachments[name];
|
|
157
|
+
if (attachment)
|
|
158
|
+
entries.push(new SkinEntry(i, name, attachment));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return entries;
|
|
163
|
+
}
|
|
164
|
+
/** Returns all attachments in this skin for the specified slot index. */
|
|
165
|
+
getAttachmentsForSlot(slotIndex, attachments) {
|
|
166
|
+
let slotAttachments = this.attachments[slotIndex];
|
|
167
|
+
if (slotAttachments) {
|
|
168
|
+
for (let name in slotAttachments) {
|
|
169
|
+
let attachment = slotAttachments[name];
|
|
170
|
+
if (attachment)
|
|
171
|
+
attachments.push(new SkinEntry(slotIndex, name, attachment));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Clears all attachments, bones, and constraints. */
|
|
176
|
+
clear() {
|
|
177
|
+
this.attachments.length = 0;
|
|
178
|
+
this.bones.length = 0;
|
|
179
|
+
this.constraints.length = 0;
|
|
180
|
+
}
|
|
181
|
+
/** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */
|
|
182
|
+
attachAll(skeleton, oldSkin) {
|
|
183
|
+
let slotIndex = 0;
|
|
184
|
+
for (let i = 0; i < skeleton.slots.length; i++) {
|
|
185
|
+
let slot = skeleton.slots[i];
|
|
186
|
+
let slotAttachment = slot.getAttachment();
|
|
187
|
+
if (slotAttachment && slotIndex < oldSkin.attachments.length) {
|
|
188
|
+
let dictionary = oldSkin.attachments[slotIndex];
|
|
189
|
+
for (let key in dictionary) {
|
|
190
|
+
let skinAttachment = dictionary[key];
|
|
191
|
+
if (slotAttachment == skinAttachment) {
|
|
192
|
+
let attachment = this.getAttachment(slotIndex, key);
|
|
193
|
+
if (attachment)
|
|
194
|
+
slot.setAttachment(attachment);
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
slotIndex++;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFNOUQsc0ZBQXNGO0FBQ3RGLE1BQU0sT0FBTyxTQUFTO0lBQ3JCLFlBQW9CLFlBQW9CLENBQUMsRUFBUyxPQUFlLElBQUksRUFBUyxhQUF5QixJQUFJO1FBQXZGLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFBSSxDQUFDO0NBQ2hIO0FBRUQ7OzttR0FHbUc7QUFDbkcsTUFBTSxPQUFPLElBQUk7SUFRaEIsWUFBYSxJQUFZO1FBUHpCLHlFQUF5RTtRQUN6RSxTQUFJLEdBQVcsSUFBSSxDQUFDO1FBRXBCLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQXlCLENBQUM7UUFDakQsVUFBSyxHQUFHLEtBQUssRUFBWSxDQUFDO1FBQzFCLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7UUFHekMsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxhQUFhLENBQUUsU0FBaUIsRUFBRSxJQUFZLEVBQUUsVUFBc0I7UUFDckUsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDL0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFNBQVMsSUFBSSxXQUFXLENBQUMsTUFBTTtZQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLENB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
|