@esotericsoftware/spine-core 4.0.9 → 4.0.13
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.js +577 -710
- package/dist/AnimationState.js +239 -259
- package/dist/AnimationStateData.js +15 -17
- package/dist/AssetManagerBase.d.ts +3 -0
- package/dist/AssetManagerBase.js +168 -147
- package/dist/AtlasAttachmentLoader.js +20 -22
- package/dist/Bone.js +89 -91
- package/dist/BoneData.js +4 -6
- package/dist/ConstraintData.js +4 -6
- package/dist/Event.js +4 -6
- package/dist/EventData.js +4 -6
- package/dist/IkConstraint.js +48 -50
- package/dist/IkConstraintData.js +12 -31
- package/dist/PathConstraint.js +116 -118
- package/dist/PathConstraintData.js +9 -28
- package/dist/Skeleton.js +189 -192
- package/dist/SkeletonBinary.js +352 -363
- package/dist/SkeletonBounds.js +79 -81
- package/dist/SkeletonClipping.js +86 -88
- package/dist/SkeletonData.js +46 -48
- package/dist/SkeletonJson.js +307 -310
- package/dist/Skin.js +65 -69
- package/dist/Slot.js +16 -18
- package/dist/SlotData.js +4 -6
- package/dist/Texture.js +14 -39
- package/dist/TextureAtlas.js +56 -85
- package/dist/TransformConstraint.js +77 -79
- package/dist/TransformConstraintData.js +20 -39
- package/dist/Triangulator.js +71 -73
- package/dist/Updatable.js +1 -1
- package/dist/Utils.js +183 -245
- package/dist/VertexEffect.js +1 -1
- package/dist/attachments/Attachment.js +41 -62
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +9 -28
- package/dist/attachments/ClippingAttachment.js +9 -28
- package/dist/attachments/MeshAttachment.js +29 -48
- package/dist/attachments/PathAttachment.js +11 -30
- package/dist/attachments/PointAttachment.js +16 -35
- package/dist/attachments/RegionAttachment.js +82 -101
- package/dist/attachments/index.js +1 -1
- package/dist/iife/spine-core.js +62 -22
- package/dist/iife/spine-core.js.map +2 -2
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.js +1 -1
- package/dist/polyfills.js +2 -2
- package/dist/vertexeffects/JitterEffect.js +10 -12
- package/dist/vertexeffects/SwirlEffect.js +18 -20
- package/package.json +1 -1
- package/dist/Animation.js.map +0 -1
- package/dist/AnimationState.js.map +0 -1
- package/dist/AnimationStateData.js.map +0 -1
- package/dist/AssetManagerBase.js.map +0 -1
- package/dist/AtlasAttachmentLoader.js.map +0 -1
- package/dist/Bone.js.map +0 -1
- package/dist/BoneData.js.map +0 -1
- package/dist/ConstraintData.js.map +0 -1
- package/dist/Event.js.map +0 -1
- package/dist/EventData.js.map +0 -1
- package/dist/IkConstraint.js.map +0 -1
- package/dist/IkConstraintData.js.map +0 -1
- package/dist/PathConstraint.js.map +0 -1
- package/dist/PathConstraintData.js.map +0 -1
- package/dist/Skeleton.js.map +0 -1
- package/dist/SkeletonBinary.js.map +0 -1
- package/dist/SkeletonBounds.js.map +0 -1
- package/dist/SkeletonClipping.js.map +0 -1
- package/dist/SkeletonData.js.map +0 -1
- package/dist/SkeletonJson.js.map +0 -1
- package/dist/Skin.js.map +0 -1
- package/dist/Slot.js.map +0 -1
- package/dist/SlotData.js.map +0 -1
- package/dist/Texture.js.map +0 -1
- package/dist/TextureAtlas.js.map +0 -1
- package/dist/TransformConstraint.js.map +0 -1
- package/dist/TransformConstraintData.js.map +0 -1
- package/dist/Triangulator.js.map +0 -1
- package/dist/Updatable.js.map +0 -1
- package/dist/Utils.js.map +0 -1
- package/dist/VertexEffect.js.map +0 -1
- package/dist/attachments/Attachment.js.map +0 -1
- package/dist/attachments/AttachmentLoader.js.map +0 -1
- package/dist/attachments/BoundingBoxAttachment.js.map +0 -1
- package/dist/attachments/ClippingAttachment.js.map +0 -1
- package/dist/attachments/MeshAttachment.js.map +0 -1
- package/dist/attachments/PathAttachment.js.map +0 -1
- package/dist/attachments/PointAttachment.js.map +0 -1
- package/dist/attachments/RegionAttachment.js.map +0 -1
- package/dist/attachments/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/polyfills.js.map +0 -1
- package/dist/vertexeffects/JitterEffect.js.map +0 -1
- package/dist/vertexeffects/SwirlEffect.js.map +0 -1
package/dist/SkeletonData.js
CHANGED
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
*
|
|
31
31
|
* See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes
|
|
32
32
|
* Guide. */
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
export class SkeletonData {
|
|
34
|
+
constructor() {
|
|
35
35
|
/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */
|
|
36
36
|
this.bones = new Array(); // Ordered parents first.
|
|
37
37
|
/** The skeleton's slots. */
|
|
@@ -54,116 +54,114 @@ var SkeletonData = /** @class */ (function () {
|
|
|
54
54
|
/** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it
|
|
55
55
|
* multiple times.
|
|
56
56
|
* @returns May be null. */
|
|
57
|
-
|
|
57
|
+
findBone(boneName) {
|
|
58
58
|
if (!boneName)
|
|
59
59
|
throw new Error("boneName cannot be null.");
|
|
60
|
-
|
|
61
|
-
for (
|
|
62
|
-
|
|
60
|
+
let bones = this.bones;
|
|
61
|
+
for (let i = 0, n = bones.length; i < n; i++) {
|
|
62
|
+
let bone = bones[i];
|
|
63
63
|
if (bone.name == boneName)
|
|
64
64
|
return bone;
|
|
65
65
|
}
|
|
66
66
|
return null;
|
|
67
|
-
}
|
|
67
|
+
}
|
|
68
68
|
/** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
|
|
69
69
|
* multiple times.
|
|
70
70
|
* @returns May be null. */
|
|
71
|
-
|
|
71
|
+
findSlot(slotName) {
|
|
72
72
|
if (!slotName)
|
|
73
73
|
throw new Error("slotName cannot be null.");
|
|
74
|
-
|
|
75
|
-
for (
|
|
76
|
-
|
|
74
|
+
let slots = this.slots;
|
|
75
|
+
for (let i = 0, n = slots.length; i < n; i++) {
|
|
76
|
+
let slot = slots[i];
|
|
77
77
|
if (slot.name == slotName)
|
|
78
78
|
return slot;
|
|
79
79
|
}
|
|
80
80
|
return null;
|
|
81
|
-
}
|
|
81
|
+
}
|
|
82
82
|
/** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it
|
|
83
83
|
* multiple times.
|
|
84
84
|
* @returns May be null. */
|
|
85
|
-
|
|
85
|
+
findSkin(skinName) {
|
|
86
86
|
if (!skinName)
|
|
87
87
|
throw new Error("skinName cannot be null.");
|
|
88
|
-
|
|
89
|
-
for (
|
|
90
|
-
|
|
88
|
+
let skins = this.skins;
|
|
89
|
+
for (let i = 0, n = skins.length; i < n; i++) {
|
|
90
|
+
let skin = skins[i];
|
|
91
91
|
if (skin.name == skinName)
|
|
92
92
|
return skin;
|
|
93
93
|
}
|
|
94
94
|
return null;
|
|
95
|
-
}
|
|
95
|
+
}
|
|
96
96
|
/** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it
|
|
97
97
|
* multiple times.
|
|
98
98
|
* @returns May be null. */
|
|
99
|
-
|
|
99
|
+
findEvent(eventDataName) {
|
|
100
100
|
if (!eventDataName)
|
|
101
101
|
throw new Error("eventDataName cannot be null.");
|
|
102
|
-
|
|
103
|
-
for (
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
return
|
|
102
|
+
let events = this.events;
|
|
103
|
+
for (let i = 0, n = events.length; i < n; i++) {
|
|
104
|
+
let event = events[i];
|
|
105
|
+
if (event.name == eventDataName)
|
|
106
|
+
return event;
|
|
107
107
|
}
|
|
108
108
|
return null;
|
|
109
|
-
}
|
|
109
|
+
}
|
|
110
110
|
/** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to
|
|
111
111
|
* call it multiple times.
|
|
112
112
|
* @returns May be null. */
|
|
113
|
-
|
|
113
|
+
findAnimation(animationName) {
|
|
114
114
|
if (!animationName)
|
|
115
115
|
throw new Error("animationName cannot be null.");
|
|
116
|
-
|
|
117
|
-
for (
|
|
118
|
-
|
|
116
|
+
let animations = this.animations;
|
|
117
|
+
for (let i = 0, n = animations.length; i < n; i++) {
|
|
118
|
+
let animation = animations[i];
|
|
119
119
|
if (animation.name == animationName)
|
|
120
120
|
return animation;
|
|
121
121
|
}
|
|
122
122
|
return null;
|
|
123
|
-
}
|
|
123
|
+
}
|
|
124
124
|
/** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
|
|
125
125
|
* than to call it multiple times.
|
|
126
126
|
* @return May be null. */
|
|
127
|
-
|
|
127
|
+
findIkConstraint(constraintName) {
|
|
128
128
|
if (!constraintName)
|
|
129
129
|
throw new Error("constraintName cannot be null.");
|
|
130
|
-
|
|
131
|
-
for (
|
|
132
|
-
|
|
130
|
+
let ikConstraints = this.ikConstraints;
|
|
131
|
+
for (let i = 0, n = ikConstraints.length; i < n; i++) {
|
|
132
|
+
let constraint = ikConstraints[i];
|
|
133
133
|
if (constraint.name == constraintName)
|
|
134
134
|
return constraint;
|
|
135
135
|
}
|
|
136
136
|
return null;
|
|
137
|
-
}
|
|
137
|
+
}
|
|
138
138
|
/** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
|
|
139
139
|
* this method than to call it multiple times.
|
|
140
140
|
* @return May be null. */
|
|
141
|
-
|
|
141
|
+
findTransformConstraint(constraintName) {
|
|
142
142
|
if (!constraintName)
|
|
143
143
|
throw new Error("constraintName cannot be null.");
|
|
144
|
-
|
|
145
|
-
for (
|
|
146
|
-
|
|
144
|
+
let transformConstraints = this.transformConstraints;
|
|
145
|
+
for (let i = 0, n = transformConstraints.length; i < n; i++) {
|
|
146
|
+
let constraint = transformConstraints[i];
|
|
147
147
|
if (constraint.name == constraintName)
|
|
148
148
|
return constraint;
|
|
149
149
|
}
|
|
150
150
|
return null;
|
|
151
|
-
}
|
|
151
|
+
}
|
|
152
152
|
/** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
|
|
153
153
|
* than to call it multiple times.
|
|
154
154
|
* @return May be null. */
|
|
155
|
-
|
|
155
|
+
findPathConstraint(constraintName) {
|
|
156
156
|
if (!constraintName)
|
|
157
157
|
throw new Error("constraintName cannot be null.");
|
|
158
|
-
|
|
159
|
-
for (
|
|
160
|
-
|
|
158
|
+
let pathConstraints = this.pathConstraints;
|
|
159
|
+
for (let i = 0, n = pathConstraints.length; i < n; i++) {
|
|
160
|
+
let constraint = pathConstraints[i];
|
|
161
161
|
if (constraint.name == constraintName)
|
|
162
162
|
return constraint;
|
|
163
163
|
}
|
|
164
164
|
return null;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
export { SkeletonData };
|
|
169
|
-
//# sourceMappingURL=SkeletonData.js.map
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25EYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFXL0U7OztZQUdZO0FBQ1osTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFLQyx5RkFBeUY7UUFDekYsVUFBSyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUMsQ0FBQyx5QkFBeUI7UUFFeEQsNEJBQTRCO1FBQzVCLFVBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDLENBQUMseUJBQXlCO1FBQ3hELFVBQUssR0FBRyxJQUFJLEtBQUssRUFBUSxDQUFDO1FBUTFCLDZCQUE2QjtRQUM3QixXQUFNLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUVoQyxpQ0FBaUM7UUFDakMsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFhLENBQUM7UUFFcEMscUNBQXFDO1FBQ3JDLGtCQUFhLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFFOUMsNENBQTRDO1FBQzVDLHlCQUFvQixHQUFHLElBQUksS0FBSyxFQUEyQixDQUFDO1FBRTVELHVDQUF1QztRQUN2QyxvQkFBZSxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO1FBb0JsRCxlQUFlO1FBQ2Ysc0ZBQXNGO1FBQ3RGLFFBQUcsR0FBRyxDQUFDLENBQUM7SUErR1QsQ0FBQztJQXZHQTs7K0JBRTJCO0lBQzNCLFFBQVEsQ0FBRSxRQUFnQjtRQUN6QixJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMzRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVB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
|