@esotericsoftware/spine-core 4.2.115 → 4.3.0
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 +426 -274
- package/dist/Animation.js +1174 -1210
- package/dist/AnimationState.d.ts +246 -201
- package/dist/AnimationState.js +508 -471
- package/dist/AnimationStateData.d.ts +12 -10
- package/dist/AnimationStateData.js +19 -20
- package/dist/AssetManagerBase.d.ts +29 -23
- package/dist/AssetManagerBase.js +67 -43
- package/dist/AtlasAttachmentLoader.d.ts +18 -12
- package/dist/AtlasAttachmentLoader.js +28 -39
- package/dist/Bone.d.ts +15 -109
- package/dist/Bone.js +22 -362
- package/dist/BoneData.d.ts +13 -28
- package/dist/BoneData.js +20 -29
- package/dist/BonePose.d.ts +130 -0
- package/dist/BonePose.js +426 -0
- package/dist/Constraint.d.ts +41 -0
- package/dist/Constraint.js +38 -0
- package/dist/ConstraintData.d.ts +7 -5
- package/dist/ConstraintData.js +5 -9
- package/dist/DrawOrder.d.ts +48 -0
- package/dist/DrawOrder.js +64 -0
- package/dist/Event.d.ts +11 -6
- package/dist/Event.js +10 -5
- package/dist/EventData.d.ts +10 -6
- package/dist/EventData.js +18 -7
- package/dist/IkConstraint.d.ts +22 -28
- package/dist/IkConstraint.js +115 -117
- package/dist/IkConstraintData.d.ts +23 -18
- package/dist/IkConstraintData.js +32 -22
- package/dist/IkConstraintPose.d.ts +49 -0
- package/dist/IkConstraintPose.js +55 -0
- package/dist/PathConstraint.d.ts +18 -22
- package/dist/PathConstraint.js +160 -136
- package/dist/PathConstraintData.d.ts +11 -14
- package/dist/PathConstraintData.js +14 -16
- package/dist/PathConstraintPose.d.ts +43 -0
- package/dist/PathConstraintPose.js +49 -0
- package/dist/Physics.d.ts +39 -0
- package/dist/Physics.js +41 -0
- package/dist/PhysicsConstraint.d.ts +26 -30
- package/dist/PhysicsConstraint.js +102 -94
- package/dist/PhysicsConstraintData.d.ts +22 -12
- package/dist/PhysicsConstraintData.js +23 -12
- package/dist/PhysicsConstraintPose.d.ts +47 -0
- package/dist/PhysicsConstraintPose.js +55 -0
- package/dist/Pose.d.ts +33 -0
- package/dist/Pose.js +30 -0
- package/dist/Posed.d.ts +58 -0
- package/dist/Posed.js +78 -0
- package/dist/PosedActive.d.ts +41 -0
- package/dist/{attachments/HasTextureRegion.js → PosedActive.js} +17 -2
- package/dist/PosedData.d.ts +40 -0
- package/dist/PosedData.js +45 -0
- package/dist/Skeleton.d.ts +110 -99
- package/dist/Skeleton.js +271 -449
- package/dist/SkeletonBinary.d.ts +2 -2
- package/dist/SkeletonBinary.js +644 -466
- package/dist/SkeletonBounds.d.ts +4 -4
- package/dist/SkeletonBounds.js +45 -46
- package/dist/SkeletonClipping.d.ts +26 -22
- package/dist/SkeletonClipping.js +654 -340
- package/dist/SkeletonData.d.ts +18 -35
- package/dist/SkeletonData.js +57 -97
- package/dist/SkeletonJson.d.ts +8 -6
- package/dist/SkeletonJson.js +892 -641
- package/dist/SkeletonRendererCore.d.ts +58 -0
- package/dist/SkeletonRendererCore.js +310 -0
- package/dist/Skin.d.ts +20 -16
- package/dist/Skin.js +58 -53
- package/dist/Slider.d.ts +46 -0
- package/dist/Slider.js +115 -0
- package/dist/SliderData.d.ts +58 -0
- package/dist/SliderData.js +59 -0
- package/dist/SliderPose.d.ts +37 -0
- package/dist/SliderPose.js +40 -0
- package/dist/Slot.d.ts +16 -38
- package/dist/Slot.js +37 -60
- package/dist/SlotData.d.ts +5 -12
- package/dist/SlotData.js +7 -15
- package/dist/SlotPose.d.ts +59 -0
- package/dist/SlotPose.js +81 -0
- package/dist/Texture.d.ts +1 -0
- package/dist/Texture.js +2 -1
- package/dist/TextureAtlas.d.ts +3 -3
- package/dist/TextureAtlas.js +49 -49
- package/dist/TransformConstraint.d.ts +16 -28
- package/dist/TransformConstraint.js +72 -209
- package/dist/TransformConstraintData.d.ts +108 -20
- package/dist/TransformConstraintData.js +274 -24
- package/dist/TransformConstraintPose.d.ts +45 -0
- package/dist/TransformConstraintPose.js +52 -0
- package/dist/Triangulator.d.ts +1 -1
- package/dist/Triangulator.js +91 -107
- package/dist/{Updatable.d.ts → Update.d.ts} +5 -12
- package/dist/Update.js +30 -0
- package/dist/Utils.d.ts +13 -4
- package/dist/Utils.js +78 -37
- package/dist/attachments/Attachment.d.ts +27 -19
- package/dist/attachments/Attachment.js +59 -35
- package/dist/attachments/AttachmentLoader.d.ts +14 -14
- package/dist/attachments/AttachmentLoader.js +1 -1
- package/dist/attachments/BoundingBoxAttachment.d.ts +1 -1
- package/dist/attachments/BoundingBoxAttachment.js +2 -2
- package/dist/attachments/ClippingAttachment.d.ts +10 -3
- package/dist/attachments/ClippingAttachment.js +12 -3
- package/dist/attachments/{HasTextureRegion.d.ts → HasSequence.d.ts} +11 -14
- package/dist/attachments/HasSequence.js +30 -0
- package/dist/attachments/MeshAttachment.d.ts +28 -35
- package/dist/attachments/MeshAttachment.js +85 -97
- package/dist/attachments/PathAttachment.d.ts +3 -3
- package/dist/attachments/PathAttachment.js +6 -6
- package/dist/attachments/PointAttachment.d.ts +11 -6
- package/dist/attachments/PointAttachment.js +8 -3
- package/dist/attachments/RegionAttachment.d.ts +25 -27
- package/dist/attachments/RegionAttachment.js +101 -113
- package/dist/attachments/Sequence.d.ts +31 -6
- package/dist/attachments/Sequence.js +79 -13
- package/dist/esm/spine-core.min.mjs +2 -2
- package/dist/esm/spine-core.mjs +7651 -6090
- package/dist/esm/spine-core.mjs.map +4 -4
- package/dist/iife/spine-core.js +7651 -6090
- package/dist/iife/spine-core.js.map +4 -4
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +32 -11
- package/dist/index.js +33 -12
- package/dist/polyfills.js +4 -5
- package/package.json +1 -1
- package/dist/Updatable.js +0 -30
|
@@ -27,64 +27,87 @@
|
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { Utils } from "../Utils.js";
|
|
30
|
-
/** The base class for all attachments. */
|
|
30
|
+
/** The base class for all attachments. Multiple {@link Skeleton} instances, slots, or skins can use the same attachments. */
|
|
31
31
|
export class Attachment {
|
|
32
|
+
static empty = [];
|
|
32
33
|
name;
|
|
34
|
+
/** Timelines for the timeline attachment are also applied to this attachment.
|
|
35
|
+
* @return May be null if no attachment-specific timelines should be applied. */
|
|
36
|
+
timelineAttachment;
|
|
37
|
+
/** Slots that can have attachments whose {@link timelineAttachment} is this attachment. */
|
|
38
|
+
timelineSlots = Attachment.empty;
|
|
33
39
|
constructor(name) {
|
|
34
40
|
if (!name)
|
|
35
41
|
throw new Error("name cannot be null.");
|
|
36
42
|
this.name = name;
|
|
43
|
+
this.timelineAttachment = this;
|
|
44
|
+
}
|
|
45
|
+
/** Returns true if the {@code slotIndex} or any {@link timelineSlots} have an attachment whose {@link timelineAttachment} is
|
|
46
|
+
* this attachment.
|
|
47
|
+
* @param slots The {@link Skeleton.slots}.
|
|
48
|
+
* @param slotIndex The timeline's primary slot index. */
|
|
49
|
+
isTimelineActive(slots, slotIndex, appliedPose) {
|
|
50
|
+
let slot = slots[slotIndex];
|
|
51
|
+
if (slot.bone.isActive()) {
|
|
52
|
+
const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();
|
|
53
|
+
if (other != null && other.timelineAttachment === this)
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
for (let i = 0, n = this.timelineSlots.length; i < n; i++) {
|
|
57
|
+
slot = slots[this.timelineSlots[i]];
|
|
58
|
+
if (!slot.bone.isActive())
|
|
59
|
+
continue;
|
|
60
|
+
const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();
|
|
61
|
+
if (other != null && other.timelineAttachment === this)
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
37
65
|
}
|
|
38
66
|
}
|
|
39
|
-
/** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by
|
|
40
|
-
* {@link
|
|
67
|
+
/** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by
|
|
68
|
+
* {@link SlotPose.deform}. */
|
|
41
69
|
export class VertexAttachment extends Attachment {
|
|
42
70
|
static nextID = 0;
|
|
43
71
|
/** The unique ID for this attachment. */
|
|
44
72
|
id = VertexAttachment.nextID++;
|
|
45
|
-
/** The bones
|
|
46
|
-
*
|
|
47
|
-
* if this attachment has no weights. */
|
|
73
|
+
/** The bones that affect the {@link vertices}. The entries are, for each vertex, the number of bones affecting the vertex
|
|
74
|
+
* followed by that many bone indices, which is {@link Skeleton.getBones} index. Null if this attachment has no weights. */
|
|
48
75
|
bones = null;
|
|
49
76
|
/** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`
|
|
50
|
-
* entries for each vertex. For a weighted attachment, the values are `x,y,weight`
|
|
77
|
+
* entries for each vertex. For a weighted attachment, the values are `x,y,weight` triplets for each bone affecting
|
|
51
78
|
* each vertex. */
|
|
52
79
|
vertices = [];
|
|
53
80
|
/** The maximum number of world vertex values that can be output by
|
|
54
|
-
* {@link
|
|
81
|
+
* {@link computeWorldVertices} using the `count` parameter. */
|
|
55
82
|
worldVerticesLength = 0;
|
|
56
|
-
/** Timelines for the timeline attachment are also applied to this attachment.
|
|
57
|
-
* May be null if no attachment-specific timelines should be applied. */
|
|
58
|
-
timelineAttachment = this;
|
|
59
83
|
constructor(name) {
|
|
60
84
|
super(name);
|
|
61
85
|
}
|
|
62
|
-
/** Transforms the attachment's local {@link
|
|
63
|
-
*
|
|
86
|
+
/** Transforms the attachment's local {@link vertices} to world coordinates. If {@link SlotPose.getDeform} is not empty, it
|
|
87
|
+
* is used to deform the vertices.
|
|
64
88
|
*
|
|
65
|
-
* See
|
|
89
|
+
* See <a href="https://esotericsoftware.com/spine-runtime-skeletons#World-transforms">World transforms</a> in the Spine
|
|
66
90
|
* Runtimes Guide.
|
|
67
|
-
* @param start The index of the first {@link
|
|
68
|
-
* @param count The number of world vertex values to output. Must be <= {@link
|
|
91
|
+
* @param start The index of the first {@link vertices} value to transform. Each vertex has 2 values, x and y.
|
|
92
|
+
* @param count The number of world vertex values to output. Must be <= {@link worldVerticesLength} - `start`.
|
|
69
93
|
* @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *
|
|
70
94
|
* `stride` / 2.
|
|
71
95
|
* @param offset The `worldVertices` index to begin writing values.
|
|
72
96
|
* @param stride The number of `worldVertices` entries between the value pairs written. */
|
|
73
|
-
computeWorldVertices(slot, start, count, worldVertices, offset, stride) {
|
|
97
|
+
computeWorldVertices(skeleton, slot, start, count, worldVertices, offset, stride) {
|
|
74
98
|
count = offset + (count >> 1) * stride;
|
|
75
|
-
|
|
76
|
-
let deformArray = slot.deform;
|
|
99
|
+
const deformArray = slot.appliedPose.deform;
|
|
77
100
|
let vertices = this.vertices;
|
|
78
|
-
|
|
101
|
+
const bones = this.bones;
|
|
79
102
|
if (!bones) {
|
|
80
103
|
if (deformArray.length > 0)
|
|
81
104
|
vertices = deformArray;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
105
|
+
const bone = slot.bone.appliedPose;
|
|
106
|
+
const x = bone.worldX;
|
|
107
|
+
const y = bone.worldY;
|
|
108
|
+
const a = bone.a, b = bone.b, c = bone.c, d = bone.d;
|
|
86
109
|
for (let v = start, w = offset; w < count; v += 2, w += stride) {
|
|
87
|
-
|
|
110
|
+
const vx = vertices[v], vy = vertices[v + 1];
|
|
88
111
|
worldVertices[w] = vx * a + vy * b + x;
|
|
89
112
|
worldVertices[w + 1] = vx * c + vy * d + y;
|
|
90
113
|
}
|
|
@@ -92,19 +115,19 @@ export class VertexAttachment extends Attachment {
|
|
|
92
115
|
}
|
|
93
116
|
let v = 0, skip = 0;
|
|
94
117
|
for (let i = 0; i < start; i += 2) {
|
|
95
|
-
|
|
118
|
+
const n = bones[v];
|
|
96
119
|
v += n + 1;
|
|
97
120
|
skip += n;
|
|
98
121
|
}
|
|
99
|
-
|
|
100
|
-
if (deformArray.length
|
|
122
|
+
const skeletonBones = skeleton.bones;
|
|
123
|
+
if (deformArray.length === 0) {
|
|
101
124
|
for (let w = offset, b = skip * 3; w < count; w += stride) {
|
|
102
125
|
let wx = 0, wy = 0;
|
|
103
126
|
let n = bones[v++];
|
|
104
127
|
n += v;
|
|
105
128
|
for (; v < n; v++, b += 3) {
|
|
106
|
-
|
|
107
|
-
|
|
129
|
+
const bone = skeletonBones[bones[v]].appliedPose;
|
|
130
|
+
const vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];
|
|
108
131
|
wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
|
|
109
132
|
wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
|
|
110
133
|
}
|
|
@@ -113,14 +136,14 @@ export class VertexAttachment extends Attachment {
|
|
|
113
136
|
}
|
|
114
137
|
}
|
|
115
138
|
else {
|
|
116
|
-
|
|
139
|
+
const deform = deformArray;
|
|
117
140
|
for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {
|
|
118
141
|
let wx = 0, wy = 0;
|
|
119
142
|
let n = bones[v++];
|
|
120
143
|
n += v;
|
|
121
144
|
for (; v < n; v++, b += 3, f += 2) {
|
|
122
|
-
|
|
123
|
-
|
|
145
|
+
const bone = skeletonBones[bones[v]].appliedPose;
|
|
146
|
+
const vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];
|
|
124
147
|
wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;
|
|
125
148
|
wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;
|
|
126
149
|
}
|
|
@@ -132,7 +155,7 @@ export class VertexAttachment extends Attachment {
|
|
|
132
155
|
/** Does not copy id (generated) or name (set on construction). **/
|
|
133
156
|
copyTo(attachment) {
|
|
134
157
|
if (this.bones) {
|
|
135
|
-
attachment.bones =
|
|
158
|
+
attachment.bones = [];
|
|
136
159
|
Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);
|
|
137
160
|
}
|
|
138
161
|
else
|
|
@@ -143,6 +166,7 @@ export class VertexAttachment extends Attachment {
|
|
|
143
166
|
}
|
|
144
167
|
attachment.worldVerticesLength = this.worldVerticesLength;
|
|
145
168
|
attachment.timelineAttachment = this.timelineAttachment;
|
|
169
|
+
attachment.timelineSlots = this.timelineSlots;
|
|
146
170
|
}
|
|
147
171
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQW1CLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCwwQ0FBMEM7QUFDMUMsTUFBTSxPQUFnQixVQUFVO0lBQy9CLElBQUksQ0FBUztJQUViLFlBQWEsSUFBWTtRQUN4QixJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBR0Q7QUFFRDswQkFDMEI7QUFDMUIsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxVQUFVO0lBQ2hELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLHlDQUF5QztJQUN6QyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFL0I7OzRDQUV3QztJQUN4QyxLQUFLLEdBQXlCLElBQUksQ0FBQztJQUVuQzs7c0JBRWtCO0lBQ2xCLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBRS9CO3NFQUNrRTtJQUNsRSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFFeEI7NEVBQ3dFO0lBQ3hFLGtCQUFrQixHQUFlLElBQUksQ0FBQztJQUV0QyxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7Ozs7OzhGQVUwRjtJQUMxRixvQkFBb0IsQ0FBRSxJQUFVLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUE4QixFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQzdILEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNaLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLFFBQVEsR0FBRyxXQUFXLENBQUM7WUFDbkQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDcEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2hFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsT0FBTztRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDWCxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMzRCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQ3pELEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQzFELENBQUM7Z0JBQ0QsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNGLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMxRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQyxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDakcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDekQsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsTUFBTSxDQUFFLFVBQTRCO1FBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsQ0FBQzs7WUFDQSxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBTbG90IH0gZnJvbSBcIi4uL1Nsb3QuanNcIjtcbmltcG9ydCB7IE51bWJlckFycmF5TGlrZSwgVXRpbHMgfSBmcm9tIFwiLi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgYXR0YWNobWVudHMuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXR0YWNobWVudCB7XG5cdG5hbWU6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHR9XG5cblx0YWJzdHJhY3QgY29weSAoKTogQXR0YWNobWVudDtcbn1cblxuLyoqIEJhc2UgY2xhc3MgZm9yIGFuIGF0dGFjaG1lbnQgd2l0aCB2ZXJ0aWNlcyB0aGF0IGFyZSB0cmFuc2Zvcm1lZCBieSBvbmUgb3IgbW9yZSBib25lcyBhbmQgY2FuIGJlIGRlZm9ybWVkIGJ5IGEgc2xvdCdzXG4gKiB7QGxpbmsgU2xvdCNkZWZvcm19LiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZlcnRleEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dElEID0gMDtcblxuXHQvKiogVGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBhdHRhY2htZW50LiAqL1xuXHRpZCA9IFZlcnRleEF0dGFjaG1lbnQubmV4dElEKys7XG5cblx0LyoqIFRoZSBib25lcyB3aGljaCBhZmZlY3QgdGhlIHtAbGluayAjZ2V0VmVydGljZXMoKX0uIFRoZSBhcnJheSBlbnRyaWVzIGFyZSwgZm9yIGVhY2ggdmVydGV4LCB0aGUgbnVtYmVyIG9mIGJvbmVzIGFmZmVjdGluZ1xuXHQgKiB0aGUgdmVydGV4IGZvbGxvd2VkIGJ5IHRoYXQgbWFueSBib25lIGluZGljZXMsIHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgYm9uZSBpbiB7QGxpbmsgU2tlbGV0b24jYm9uZXN9LiBXaWxsIGJlIG51bGxcblx0ICogaWYgdGhpcyBhdHRhY2htZW50IGhhcyBubyB3ZWlnaHRzLiAqL1xuXHRib25lczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBUaGUgdmVydGV4IHBvc2l0aW9ucyBpbiB0aGUgYm9uZSdzIGNvb3JkaW5hdGUgc3lzdGVtLiBGb3IgYSBub24td2VpZ2h0ZWQgYXR0YWNobWVudCwgdGhlIHZhbHVlcyBhcmUgYHgseWBcblx0ICogZW50cmllcyBmb3IgZWFjaCB2ZXJ0ZXguIEZvciBhIHdlaWdodGVkIGF0dGFjaG1lbnQsIHRoZSB2YWx1ZXMgYXJlIGB4LHksd2VpZ2h0YCBlbnRyaWVzIGZvciBlYWNoIGJvbmUgYWZmZWN0aW5nXG5cdCAqIGVhY2ggdmVydGV4LiAqL1xuXHR2ZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlID0gW107XG5cblx0LyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JsZCB2ZXJ0ZXggdmFsdWVzIHRoYXQgY2FuIGJlIG91dHB1dCBieVxuXHQgKiB7QGxpbmsgI2NvbXB1dGVXb3JsZFZlcnRpY2VzKCl9IHVzaW5nIHRoZSBgY291bnRgIHBhcmFtZXRlci4gKi9cblx0d29ybGRWZXJ0aWNlc0xlbmd0aCA9IDA7XG5cblx0LyoqIFRpbWVsaW5lcyBmb3IgdGhlIHRpbWVsaW5lIGF0dGFjaG1lbnQgYXJlIGFsc28gYXBwbGllZCB0byB0aGlzIGF0dGFjaG1lbnQuXG5cdCAqIE1heSBiZSBudWxsIGlmIG5vIGF0dGFjaG1lbnQtc3BlY2lmaWMgdGltZWxpbmVzIHNob3VsZCBiZSBhcHBsaWVkLiAqL1xuXHR0aW1lbGluZUF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB0aGlzO1xuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIHRoZSBhdHRhY2htZW50J3MgbG9jYWwge0BsaW5rICN2ZXJ0aWNlc30gdG8gd29ybGQgY29vcmRpbmF0ZXMuIElmIHRoZSBzbG90J3Mge0BsaW5rIFNsb3QjZGVmb3JtfSBpc1xuXHQgKiBub3QgZW1wdHksIGl0IGlzIHVzZWQgdG8gZGVmb3JtIHRoZSB2ZXJ0aWNlcy5cblx0ICpcblx0ICogU2VlIFtXb3JsZCB0cmFuc2Zvcm1zXShodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtcnVudGltZS1za2VsZXRvbnMjV29ybGQtdHJhbnNmb3JtcykgaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLlxuXHQgKiBAcGFyYW0gc3RhcnQgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCB7QGxpbmsgI3ZlcnRpY2VzfSB2YWx1ZSB0byB0cmFuc2Zvcm0uIEVhY2ggdmVydGV4IGhhcyAyIHZhbHVlcywgeCBhbmQgeS5cblx0ICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2Ygd29ybGQgdmVydGV4IHZhbHVlcyB0byBvdXRwdXQuIE11c3QgYmUgPD0ge0BsaW5rICN3b3JsZFZlcnRpY2VzTGVuZ3RofSAtIGBzdGFydGAuXG5cdCAqIEBwYXJhbSB3b3JsZFZlcnRpY2VzIFRoZSBvdXRwdXQgd29ybGQgdmVydGljZXMuIE11c3QgaGF2ZSBhIGxlbmd0aCA+PSBgb2Zmc2V0YCArIGBjb3VudGAgKlxuXHQgKiAgICAgICAgICAgYHN0cmlkZWAgLyAyLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IFRoZSBgd29ybGRWZXJ0aWNlc2AgaW5kZXggdG8gYmVnaW4gd3JpdGluZyB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBzdHJpZGUgVGhlIG51bWJlciBvZiBgd29ybGRWZXJ0aWNlc2AgZW50cmllcyBiZXR3ZWVuIHRoZSB2YWx1ZSBwYWlycyB3cml0dGVuLiAqL1xuXHRjb21wdXRlV29ybGRWZXJ0aWNlcyAoc2xvdDogU2xvdCwgc3RhcnQ6IG51bWJlciwgY291bnQ6IG51bWJlciwgd29ybGRWZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlLCBvZmZzZXQ6IG51bWJlciwgc3RyaWRlOiBudW1iZXIpIHtcblx0XHRjb3VudCA9IG9mZnNldCArIChjb3VudCA+PiAxKSAqIHN0cmlkZTtcblx0XHRsZXQgc2tlbGV0b24gPSBzbG90LmJvbmUuc2tlbGV0b247XG5cdFx0bGV0IGRlZm9ybUFycmF5ID0gc2xvdC5kZWZvcm07XG5cdFx0bGV0IHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcblx0XHRsZXQgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGlmICghYm9uZXMpIHtcblx0XHRcdGlmIChkZWZvcm1BcnJheS5sZW5ndGggPiAwKSB2ZXJ0aWNlcyA9IGRlZm9ybUFycmF5O1xuXHRcdFx0bGV0IGJvbmUgPSBzbG90LmJvbmU7XG5cdFx0XHRsZXQgeCA9IGJvbmUud29ybGRYO1xuXHRcdFx0bGV0IHkgPSBib25lLndvcmxkWTtcblx0XHRcdGxldCBhID0gYm9uZS5hLCBiID0gYm9uZS5iLCBjID0gYm9uZS5jLCBkID0gYm9uZS5kO1xuXHRcdFx0Zm9yIChsZXQgdiA9IHN0YXJ0LCB3ID0gb2Zmc2V0OyB3IDwgY291bnQ7IHYgKz0gMiwgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHZ4ID0gdmVydGljZXNbdl0sIHZ5ID0gdmVydGljZXNbdiArIDFdO1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3ddID0gdnggKiBhICsgdnkgKiBiICsgeDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB2eCAqIGMgKyB2eSAqIGQgKyB5O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsZXQgdiA9IDAsIHNraXAgPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnQ7IGkgKz0gMikge1xuXHRcdFx0bGV0IG4gPSBib25lc1t2XTtcblx0XHRcdHYgKz0gbiArIDE7XG5cdFx0XHRza2lwICs9IG47XG5cdFx0fVxuXHRcdGxldCBza2VsZXRvbkJvbmVzID0gc2tlbGV0b24uYm9uZXM7XG5cdFx0aWYgKGRlZm9ybUFycmF5Lmxlbmd0aCA9PSAwKSB7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDM7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMykge1xuXHRcdFx0XHRcdGxldCBib25lID0gc2tlbGV0b25Cb25lc1tib25lc1t2XV07XG5cdFx0XHRcdFx0bGV0IHZ4ID0gdmVydGljZXNbYl0sIHZ5ID0gdmVydGljZXNbYiArIDFdLCB3ZWlnaHQgPSB2ZXJ0aWNlc1tiICsgMl07XG5cdFx0XHRcdFx0d3ggKz0gKHZ4ICogYm9uZS5hICsgdnkgKiBib25lLmIgKyBib25lLndvcmxkWCkgKiB3ZWlnaHQ7XG5cdFx0XHRcdFx0d3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHd4O1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZGVmb3JtID0gZGVmb3JtQXJyYXk7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDMsIGYgPSBza2lwIDw8IDE7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMywgZiArPSAyKSB7XG5cdFx0XHRcdFx0bGV0IGJvbmUgPSBza2VsZXRvbkJvbmVzW2JvbmVzW3ZdXTtcblx0XHRcdFx0XHRsZXQgdnggPSB2ZXJ0aWNlc1tiXSArIGRlZm9ybVtmXSwgdnkgPSB2ZXJ0aWNlc1tiICsgMV0gKyBkZWZvcm1bZiArIDFdLCB3ZWlnaHQgPSB2ZXJ0aWNlc1tiICsgMl07XG5cdFx0XHRcdFx0d3ggKz0gKHZ4ICogYm9uZS5hICsgdnkgKiBib25lLmIgKyBib25lLndvcmxkWCkgKiB3ZWlnaHQ7XG5cdFx0XHRcdFx0d3kgKz0gKHZ4ICogYm9uZS5jICsgdnkgKiBib25lLmQgKyBib25lLndvcmxkWSkgKiB3ZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHd4O1xuXHRcdFx0XHR3b3JsZFZlcnRpY2VzW3cgKyAxXSA9IHd5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBEb2VzIG5vdCBjb3B5IGlkIChnZW5lcmF0ZWQpIG9yIG5hbWUgKHNldCBvbiBjb25zdHJ1Y3Rpb24pLiAqKi9cblx0Y29weVRvIChhdHRhY2htZW50OiBWZXJ0ZXhBdHRhY2htZW50KSB7XG5cdFx0aWYgKHRoaXMuYm9uZXMpIHtcblx0XHRcdGF0dGFjaG1lbnQuYm9uZXMgPSBuZXcgQXJyYXk8bnVtYmVyPih0aGlzLmJvbmVzLmxlbmd0aCk7XG5cdFx0XHRVdGlscy5hcnJheUNvcHkodGhpcy5ib25lcywgMCwgYXR0YWNobWVudC5ib25lcywgMCwgdGhpcy5ib25lcy5sZW5ndGgpO1xuXHRcdH0gZWxzZVxuXHRcdFx0YXR0YWNobWVudC5ib25lcyA9IG51bGw7XG5cblx0XHRpZiAodGhpcy52ZXJ0aWNlcykge1xuXHRcdFx0YXR0YWNobWVudC52ZXJ0aWNlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkodGhpcy52ZXJ0aWNlcy5sZW5ndGgpO1xuXHRcdFx0VXRpbHMuYXJyYXlDb3B5KHRoaXMudmVydGljZXMsIDAsIGF0dGFjaG1lbnQudmVydGljZXMsIDAsIHRoaXMudmVydGljZXMubGVuZ3RoKTtcblx0XHR9XG5cblx0XHRhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGggPSB0aGlzLndvcmxkVmVydGljZXNMZW5ndGg7XG5cdFx0YXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgPSB0aGlzLnRpbWVsaW5lQXR0YWNobWVudDtcblx0fVxufVxuIl19
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUsvRSxPQUFPLEVBQXdCLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCw2SEFBNkg7QUFDN0gsTUFBTSxPQUFnQixVQUFVO0lBQ3ZCLE1BQU0sQ0FBVSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBRTdDLElBQUksQ0FBUztJQUViO29GQUNnRjtJQUNoRixrQkFBa0IsQ0FBYztJQUVoQywyRkFBMkY7SUFDM0YsYUFBYSxHQUFhLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFM0MsWUFBYSxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUlEOzs7NkRBR3lEO0lBQ2xELGdCQUFnQixDQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLFdBQW9CO1FBQzlFLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyRixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLGtCQUFrQixLQUFLLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFD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QUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTbG90IH0gZnJvbSBcIi4uL1Nsb3QuanNcIjtcbmltcG9ydCB0eXBlIHsgU2xvdFBvc2UgfSBmcm9tIFwiLi4vU2xvdFBvc2UuanNcIjtcbmltcG9ydCB7IHR5cGUgTnVtYmVyQXJyYXlMaWtlLCBVdGlscyB9IGZyb20gXCIuLi9VdGlscy5qc1wiO1xuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBhdHRhY2htZW50cy4gTXVsdGlwbGUge0BsaW5rIFNrZWxldG9ufSBpbnN0YW5jZXMsIHNsb3RzLCBvciBza2lucyBjYW4gdXNlIHRoZSBzYW1lIGF0dGFjaG1lbnRzLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0dGFjaG1lbnQge1xuXHRwcml2YXRlIHN0YXRpYyByZWFkb25seSBlbXB0eTogbnVtYmVyW10gPSBbXTtcblxuXHRuYW1lOiBzdHJpbmc7XG5cblx0LyoqIFRpbWVsaW5lcyBmb3IgdGhlIHRpbWVsaW5lIGF0dGFjaG1lbnQgYXJlIGFsc28gYXBwbGllZCB0byB0aGlzIGF0dGFjaG1lbnQuXG5cdCAqIEByZXR1cm4gTWF5IGJlIG51bGwgaWYgbm8gYXR0YWNobWVudC1zcGVjaWZpYyB0aW1lbGluZXMgc2hvdWxkIGJlIGFwcGxpZWQuICovXG5cdHRpbWVsaW5lQXR0YWNobWVudD86IEF0dGFjaG1lbnQ7XG5cblx0LyoqIFNsb3RzIHRoYXQgY2FuIGhhdmUgYXR0YWNobWVudHMgd2hvc2Uge0BsaW5rIHRpbWVsaW5lQXR0YWNobWVudH0gaXMgdGhpcyBhdHRhY2htZW50LiAqL1xuXHR0aW1lbGluZVNsb3RzOiBudW1iZXJbXSA9IEF0dGFjaG1lbnQuZW1wdHk7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKFwibmFtZSBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHR0aGlzLnRpbWVsaW5lQXR0YWNobWVudCA9IHRoaXM7XG5cdH1cblxuXHRhYnN0cmFjdCBjb3B5ICgpOiBBdHRhY2htZW50O1xuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHtAY29kZSBzbG90SW5kZXh9IG9yIGFueSB7QGxpbmsgdGltZWxpbmVTbG90c30gaGF2ZSBhbiBhdHRhY2htZW50IHdob3NlIHtAbGluayB0aW1lbGluZUF0dGFjaG1lbnR9IGlzXG5cdCAqIHRoaXMgYXR0YWNobWVudC5cblx0ICogQHBhcmFtIHNsb3RzIFRoZSB7QGxpbmsgU2tlbGV0b24uc2xvdHN9LlxuXHQgKiBAcGFyYW0gc2xvdEluZGV4IFRoZSB0aW1lbGluZSdzIHByaW1hcnkgc2xvdCBpbmRleC4gKi9cblx0cHVibGljIGlzVGltZWxpbmVBY3RpdmUgKHNsb3RzOiBTbG90W10sIHNsb3RJbmRleDogbnVtYmVyLCBhcHBsaWVkUG9zZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGxldCBzbG90ID0gc2xvdHNbc2xvdEluZGV4XTtcblx0XHRpZiAoc2xvdC5ib25lLmlzQWN0aXZlKCkpIHtcblx0XHRcdGNvbnN0IG90aGVyID0gKGFwcGxpZWRQb3NlID8gc2xvdC5nZXRBcHBsaWVkUG9zZSgpIDogc2xvdC5nZXRQb3NlKCkpLmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChvdGhlciAhPSBudWxsICYmIG90aGVyLnRpbWVsaW5lQXR0YWNobWVudCA9PT0gdGhpcykgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gdGhpcy50aW1lbGluZVNsb3RzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0c2xvdCA9IHNsb3RzW3RoaXMudGltZWxpbmVTbG90c1tpXV07XG5cdFx0XHRpZiAoIXNsb3QuYm9uZS5pc0FjdGl2ZSgpKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IG90aGVyID0gKGFwcGxpZWRQb3NlID8gc2xvdC5nZXRBcHBsaWVkUG9zZSgpIDogc2xvdC5nZXRQb3NlKCkpLmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmIChvdGhlciAhPSBudWxsICYmIG90aGVyLnRpbWVsaW5lQXR0YWNobWVudCA9PT0gdGhpcykgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKiogQmFzZSBjbGFzcyBmb3IgYW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgYXJlIHRyYW5zZm9ybWVkIGJ5IG9uZSBvciBtb3JlIGJvbmVzIGFuZCBjYW4gYmUgZGVmb3JtZWQgYnlcbiAqIHtAbGluayBTbG90UG9zZS5kZWZvcm19LiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZlcnRleEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dElEID0gMDtcblxuXHQvKiogVGhlIHVuaXF1ZSBJRCBmb3IgdGhpcyBhdHRhY2htZW50LiAqL1xuXHRpZCA9IFZlcnRleEF0dGFjaG1lbnQubmV4dElEKys7XG5cblx0LyoqIFRoZSBib25lcyB0aGF0IGFmZmVjdCB0aGUge0BsaW5rIHZlcnRpY2VzfS4gVGhlIGVudHJpZXMgYXJlLCBmb3IgZWFjaCB2ZXJ0ZXgsIHRoZSBudW1iZXIgb2YgYm9uZXMgYWZmZWN0aW5nIHRoZSB2ZXJ0ZXhcblx0ICogZm9sbG93ZWQgYnkgdGhhdCBtYW55IGJvbmUgaW5kaWNlcywgd2hpY2ggaXMge0BsaW5rIFNrZWxldG9uLmdldEJvbmVzfSBpbmRleC4gTnVsbCBpZiB0aGlzIGF0dGFjaG1lbnQgaGFzIG5vIHdlaWdodHMuICovXG5cdGJvbmVzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cblx0LyoqIFRoZSB2ZXJ0ZXggcG9zaXRpb25zIGluIHRoZSBib25lJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uIEZvciBhIG5vbi13ZWlnaHRlZCBhdHRhY2htZW50LCB0aGUgdmFsdWVzIGFyZSBgeCx5YFxuXHQgKiBlbnRyaWVzIGZvciBlYWNoIHZlcnRleC4gRm9yIGEgd2VpZ2h0ZWQgYXR0YWNobWVudCwgdGhlIHZhbHVlcyBhcmUgYHgseSx3ZWlnaHRgIHRyaXBsZXRzIGZvciBlYWNoIGJvbmUgYWZmZWN0aW5nXG5cdCAqIGVhY2ggdmVydGV4LiAqL1xuXHR2ZXJ0aWNlczogTnVtYmVyQXJyYXlMaWtlID0gW107XG5cblx0LyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JsZCB2ZXJ0ZXggdmFsdWVzIHRoYXQgY2FuIGJlIG91dHB1dCBieVxuXHQgKiB7QGxpbmsgY29tcHV0ZVdvcmxkVmVydGljZXN9IHVzaW5nIHRoZSBgY291bnRgIHBhcmFtZXRlci4gKi9cblx0d29ybGRWZXJ0aWNlc0xlbmd0aCA9IDA7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgdGhlIGF0dGFjaG1lbnQncyBsb2NhbCB7QGxpbmsgdmVydGljZXN9IHRvIHdvcmxkIGNvb3JkaW5hdGVzLiBJZiB7QGxpbmsgU2xvdFBvc2UuZ2V0RGVmb3JtfSBpcyBub3QgZW1wdHksIGl0XG5cdCAqIGlzIHVzZWQgdG8gZGVmb3JtIHRoZSB2ZXJ0aWNlcy5cblx0ICpcblx0ICogU2VlIDxhIGhyZWY9XCJodHRwczovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLXJ1bnRpbWUtc2tlbGV0b25zI1dvcmxkLXRyYW5zZm9ybXNcIj5Xb3JsZCB0cmFuc2Zvcm1zPC9hPiBpbiB0aGUgU3BpbmVcblx0ICogUnVudGltZXMgR3VpZGUuXG5cdCAqIEBwYXJhbSBzdGFydCBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IHtAbGluayB2ZXJ0aWNlc30gdmFsdWUgdG8gdHJhbnNmb3JtLiBFYWNoIHZlcnRleCBoYXMgMiB2YWx1ZXMsIHggYW5kIHkuXG5cdCAqIEBwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIHdvcmxkIHZlcnRleCB2YWx1ZXMgdG8gb3V0cHV0LiBNdXN0IGJlIDw9IHtAbGluayB3b3JsZFZlcnRpY2VzTGVuZ3RofSAtIGBzdGFydGAuXG5cdCAqIEBwYXJhbSB3b3JsZFZlcnRpY2VzIFRoZSBvdXRwdXQgd29ybGQgdmVydGljZXMuIE11c3QgaGF2ZSBhIGxlbmd0aCA+PSBgb2Zmc2V0YCArIGBjb3VudGAgKlxuXHQgKiAgICAgICAgICAgYHN0cmlkZWAgLyAyLlxuXHQgKiBAcGFyYW0gb2Zmc2V0IFRoZSBgd29ybGRWZXJ0aWNlc2AgaW5kZXggdG8gYmVnaW4gd3JpdGluZyB2YWx1ZXMuXG5cdCAqIEBwYXJhbSBzdHJpZGUgVGhlIG51bWJlciBvZiBgd29ybGRWZXJ0aWNlc2AgZW50cmllcyBiZXR3ZWVuIHRoZSB2YWx1ZSBwYWlycyB3cml0dGVuLiAqL1xuXHRjb21wdXRlV29ybGRWZXJ0aWNlcyAoc2tlbGV0b246IFNrZWxldG9uLCBzbG90OiBTbG90LCBzdGFydDogbnVtYmVyLCBjb3VudDogbnVtYmVyLCB3b3JsZFZlcnRpY2VzOiBOdW1iZXJBcnJheUxpa2UsIG9mZnNldDogbnVtYmVyLFxuXHRcdHN0cmlkZTogbnVtYmVyKSB7XG5cblx0XHRjb3VudCA9IG9mZnNldCArIChjb3VudCA+PiAxKSAqIHN0cmlkZTtcblx0XHRjb25zdCBkZWZvcm1BcnJheSA9IHNsb3QuYXBwbGllZFBvc2UuZGVmb3JtO1xuXHRcdGxldCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cdFx0Y29uc3QgYm9uZXMgPSB0aGlzLmJvbmVzO1xuXHRcdGlmICghYm9uZXMpIHtcblx0XHRcdGlmIChkZWZvcm1BcnJheS5sZW5ndGggPiAwKSB2ZXJ0aWNlcyA9IGRlZm9ybUFycmF5O1xuXHRcdFx0Y29uc3QgYm9uZSA9IHNsb3QuYm9uZS5hcHBsaWVkUG9zZTtcblx0XHRcdGNvbnN0IHggPSBib25lLndvcmxkWDtcblx0XHRcdGNvbnN0IHkgPSBib25lLndvcmxkWTtcblx0XHRcdGNvbnN0IGEgPSBib25lLmEsIGIgPSBib25lLmIsIGMgPSBib25lLmMsIGQgPSBib25lLmQ7XG5cdFx0XHRmb3IgKGxldCB2ID0gc3RhcnQsIHcgPSBvZmZzZXQ7IHcgPCBjb3VudDsgdiArPSAyLCB3ICs9IHN0cmlkZSkge1xuXHRcdFx0XHRjb25zdCB2eCA9IHZlcnRpY2VzW3ZdLCB2eSA9IHZlcnRpY2VzW3YgKyAxXTtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3XSA9IHZ4ICogYSArIHZ5ICogYiArIHg7XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbdyArIDFdID0gdnggKiBjICsgdnkgKiBkICsgeTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHYgPSAwLCBza2lwID0gMDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0OyBpICs9IDIpIHtcblx0XHRcdGNvbnN0IG4gPSBib25lc1t2XTtcblx0XHRcdHYgKz0gbiArIDE7XG5cdFx0XHRza2lwICs9IG47XG5cdFx0fVxuXHRcdGNvbnN0IHNrZWxldG9uQm9uZXMgPSBza2VsZXRvbi5ib25lcztcblx0XHRpZiAoZGVmb3JtQXJyYXkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDM7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMykge1xuXHRcdFx0XHRcdGNvbnN0IGJvbmUgPSBza2VsZXRvbkJvbmVzW2JvbmVzW3ZdXS5hcHBsaWVkUG9zZTtcblx0XHRcdFx0XHRjb25zdCB2eCA9IHZlcnRpY2VzW2JdLCB2eSA9IHZlcnRpY2VzW2IgKyAxXSwgd2VpZ2h0ID0gdmVydGljZXNbYiArIDJdO1xuXHRcdFx0XHRcdHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xuXHRcdFx0XHRcdHd5ICs9ICh2eCAqIGJvbmUuYyArIHZ5ICogYm9uZS5kICsgYm9uZS53b3JsZFkpICogd2VpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbd10gPSB3eDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB3eTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVmb3JtID0gZGVmb3JtQXJyYXk7XG5cdFx0XHRmb3IgKGxldCB3ID0gb2Zmc2V0LCBiID0gc2tpcCAqIDMsIGYgPSBza2lwIDw8IDE7IHcgPCBjb3VudDsgdyArPSBzdHJpZGUpIHtcblx0XHRcdFx0bGV0IHd4ID0gMCwgd3kgPSAwO1xuXHRcdFx0XHRsZXQgbiA9IGJvbmVzW3YrK107XG5cdFx0XHRcdG4gKz0gdjtcblx0XHRcdFx0Zm9yICg7IHYgPCBuOyB2KyssIGIgKz0gMywgZiArPSAyKSB7XG5cdFx0XHRcdFx0Y29uc3QgYm9uZSA9IHNrZWxldG9uQm9uZXNbYm9uZXNbdl1dLmFwcGxpZWRQb3NlO1xuXHRcdFx0XHRcdGNvbnN0IHZ4ID0gdmVydGljZXNbYl0gKyBkZWZvcm1bZl0sIHZ5ID0gdmVydGljZXNbYiArIDFdICsgZGVmb3JtW2YgKyAxXSwgd2VpZ2h0ID0gdmVydGljZXNbYiArIDJdO1xuXHRcdFx0XHRcdHd4ICs9ICh2eCAqIGJvbmUuYSArIHZ5ICogYm9uZS5iICsgYm9uZS53b3JsZFgpICogd2VpZ2h0O1xuXHRcdFx0XHRcdHd5ICs9ICh2eCAqIGJvbmUuYyArIHZ5ICogYm9uZS5kICsgYm9uZS53b3JsZFkpICogd2VpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdvcmxkVmVydGljZXNbd10gPSB3eDtcblx0XHRcdFx0d29ybGRWZXJ0aWNlc1t3ICsgMV0gPSB3eTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogRG9lcyBub3QgY29weSBpZCAoZ2VuZXJhdGVkKSBvciBuYW1lIChzZXQgb24gY29uc3RydWN0aW9uKS4gKiovXG5cdGNvcHlUbyAoYXR0YWNobWVudDogVmVydGV4QXR0YWNobWVudCkge1xuXHRcdGlmICh0aGlzLmJvbmVzKSB7XG5cdFx0XHRhdHRhY2htZW50LmJvbmVzID0gW107XG5cdFx0XHRVdGlscy5hcnJheUNvcHkodGhpcy5ib25lcywgMCwgYXR0YWNobWVudC5ib25lcywgMCwgdGhpcy5ib25lcy5sZW5ndGgpO1xuXHRcdH0gZWxzZVxuXHRcdFx0YXR0YWNobWVudC5ib25lcyA9IG51bGw7XG5cblx0XHRpZiAodGhpcy52ZXJ0aWNlcykge1xuXHRcdFx0YXR0YWNobWVudC52ZXJ0aWNlcyA9IFV0aWxzLm5ld0Zsb2F0QXJyYXkodGhpcy52ZXJ0aWNlcy5sZW5ndGgpO1xuXHRcdFx0VXRpbHMuYXJyYXlDb3B5KHRoaXMudmVydGljZXMsIDAsIGF0dGFjaG1lbnQudmVydGljZXMsIDAsIHRoaXMudmVydGljZXMubGVuZ3RoKTtcblx0XHR9XG5cblx0XHRhdHRhY2htZW50LndvcmxkVmVydGljZXNMZW5ndGggPSB0aGlzLndvcmxkVmVydGljZXNMZW5ndGg7XG5cdFx0YXR0YWNobWVudC50aW1lbGluZUF0dGFjaG1lbnQgPSB0aGlzLnRpbWVsaW5lQXR0YWNobWVudDtcblx0XHRhdHRhY2htZW50LnRpbWVsaW5lU2xvdHMgPSB0aGlzLnRpbWVsaW5lU2xvdHM7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -26,29 +26,29 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { Skin } from "../Skin.js";
|
|
30
|
-
import { BoundingBoxAttachment } from "./BoundingBoxAttachment.js";
|
|
31
|
-
import { ClippingAttachment } from "./ClippingAttachment.js";
|
|
32
|
-
import { MeshAttachment } from "./MeshAttachment.js";
|
|
33
|
-
import { PathAttachment } from "./PathAttachment.js";
|
|
34
|
-
import { PointAttachment } from "./PointAttachment.js";
|
|
35
|
-
import { RegionAttachment } from "./RegionAttachment.js";
|
|
36
|
-
import { Sequence } from "./Sequence.js";
|
|
29
|
+
import type { Skin } from "../Skin.js";
|
|
30
|
+
import type { BoundingBoxAttachment } from "./BoundingBoxAttachment.js";
|
|
31
|
+
import type { ClippingAttachment } from "./ClippingAttachment.js";
|
|
32
|
+
import type { MeshAttachment } from "./MeshAttachment.js";
|
|
33
|
+
import type { PathAttachment } from "./PathAttachment.js";
|
|
34
|
+
import type { PointAttachment } from "./PointAttachment.js";
|
|
35
|
+
import type { RegionAttachment } from "./RegionAttachment.js";
|
|
36
|
+
import type { Sequence } from "./Sequence.js";
|
|
37
37
|
/** The interface which can be implemented to customize creating and populating attachments.
|
|
38
38
|
*
|
|
39
39
|
* See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#AttachmentLoader) in the Spine
|
|
40
40
|
* Runtimes Guide. */
|
|
41
41
|
export interface AttachmentLoader {
|
|
42
42
|
/** @return May be null to not load an attachment. */
|
|
43
|
-
newRegionAttachment(skin: Skin, name: string, path: string, sequence: Sequence
|
|
43
|
+
newRegionAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): RegionAttachment;
|
|
44
44
|
/** @return May be null to not load an attachment. */
|
|
45
|
-
newMeshAttachment(skin: Skin, name: string, path: string, sequence: Sequence
|
|
45
|
+
newMeshAttachment(skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): MeshAttachment;
|
|
46
46
|
/** @return May be null to not load an attachment. */
|
|
47
|
-
newBoundingBoxAttachment(skin: Skin, name: string): BoundingBoxAttachment;
|
|
47
|
+
newBoundingBoxAttachment(skin: Skin, placeholder: string, name: string): BoundingBoxAttachment;
|
|
48
48
|
/** @return May be null to not load an attachment */
|
|
49
|
-
newPathAttachment(skin: Skin, name: string): PathAttachment;
|
|
49
|
+
newPathAttachment(skin: Skin, placeholder: string, name: string): PathAttachment;
|
|
50
50
|
/** @return May be null to not load an attachment */
|
|
51
|
-
newPointAttachment(skin: Skin, name: string): PointAttachment;
|
|
51
|
+
newPointAttachment(skin: Skin, placeholder: string, name: string): PointAttachment;
|
|
52
52
|
/** @return May be null to not load an attachment */
|
|
53
|
-
newClippingAttachment(skin: Skin, name: string): ClippingAttachment;
|
|
53
|
+
newClippingAttachment(skin: Skin, placeholder: string, name: string): ClippingAttachment;
|
|
54
54
|
}
|
|
@@ -27,4 +27,4 @@
|
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
export {};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudExvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50TG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTa2luIH0gZnJvbSBcIi4uL1NraW4uanNcIjtcbmltcG9ydCB0eXBlIHsgQm91bmRpbmdCb3hBdHRhY2htZW50IH0gZnJvbSBcIi4vQm91bmRpbmdCb3hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaXBwaW5nQXR0YWNobWVudCB9IGZyb20gXCIuL0NsaXBwaW5nQXR0YWNobWVudC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNoQXR0YWNobWVudCB9IGZyb20gXCIuL01lc2hBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhBdHRhY2htZW50IH0gZnJvbSBcIi4vUGF0aEF0dGFjaG1lbnQuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9pbnRBdHRhY2htZW50IH0gZnJvbSBcIi4vUG9pbnRBdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFJlZ2lvbkF0dGFjaG1lbnQgfSBmcm9tIFwiLi9SZWdpb25BdHRhY2htZW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcXVlbmNlIH0gZnJvbSBcIi4vU2VxdWVuY2UuanNcIjtcblxuLyoqIFRoZSBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIHRvIGN1c3RvbWl6ZSBjcmVhdGluZyBhbmQgcG9wdWxhdGluZyBhdHRhY2htZW50cy5cbiAqXG4gKiBTZWUgW0xvYWRpbmcgc2tlbGV0b24gZGF0YV0oaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWxvYWRpbmctc2tlbGV0b24tZGF0YSNBdHRhY2htZW50TG9hZGVyKSBpbiB0aGUgU3BpbmVcbiAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50TG9hZGVyIHtcblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3UmVnaW9uQXR0YWNobWVudCAoc2tpbjogU2tpbiwgcGxhY2Vob2xkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHNlcXVlbmNlOiBTZXF1ZW5jZSk6IFJlZ2lvbkF0dGFjaG1lbnQ7XG5cblx0LyoqIEByZXR1cm4gTWF5IGJlIG51bGwgdG8gbm90IGxvYWQgYW4gYXR0YWNobWVudC4gKi9cblx0bmV3TWVzaEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzZXF1ZW5jZTogU2VxdWVuY2UpOiBNZXNoQXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50LiAqL1xuXHRuZXdCb3VuZGluZ0JveEF0dGFjaG1lbnQgKHNraW46IFNraW4sIHBsYWNlaG9sZGVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IEJvdW5kaW5nQm94QXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50ICovXG5cdG5ld1BhdGhBdHRhY2htZW50IChza2luOiBTa2luLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQYXRoQXR0YWNobWVudDtcblxuXHQvKiogQHJldHVybiBNYXkgYmUgbnVsbCB0byBub3QgbG9hZCBhbiBhdHRhY2htZW50ICovXG5cdG5ld1BvaW50QXR0YWNobWVudCAoc2tpbjogU2tpbiwgcGxhY2Vob2xkZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUG9pbnRBdHRhY2htZW50O1xuXG5cdC8qKiBAcmV0dXJuIE1heSBiZSBudWxsIHRvIG5vdCBsb2FkIGFuIGF0dGFjaG1lbnQgKi9cblx0bmV3Q2xpcHBpbmdBdHRhY2htZW50IChza2luOiBTa2luLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBDbGlwcGluZ0F0dGFjaG1lbnQ7XG59XG4iXX0=
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
29
|
import { Color } from "../Utils.js";
|
|
30
|
-
import {
|
|
30
|
+
import { type Attachment, VertexAttachment } from "./Attachment.js";
|
|
31
31
|
/** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle
|
|
32
32
|
* effects, and more.
|
|
33
33
|
*
|
|
@@ -39,10 +39,10 @@ export class BoundingBoxAttachment extends VertexAttachment {
|
|
|
39
39
|
super(name);
|
|
40
40
|
}
|
|
41
41
|
copy() {
|
|
42
|
-
|
|
42
|
+
const copy = new BoundingBoxAttachment(this.name);
|
|
43
43
|
this.copyTo(copy);
|
|
44
44
|
copy.color.setFromColor(this.color);
|
|
45
45
|
return copy;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm91bmRpbmdCb3hBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0JvdW5kaW5nQm94QXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEU7Ozs7WUFJWTtBQUNaLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxnQkFBZ0I7SUFDMUQsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTlCLFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSTtRQUNILE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IFNrZWxldG9uQm91bmRzIH0gZnJvbSBcIi4uL1NrZWxldG9uQm91bmRzLmpzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi9VdGlscy5qc1wiO1xuaW1wb3J0IHsgdHlwZSBBdHRhY2htZW50LCBWZXJ0ZXhBdHRhY2htZW50IH0gZnJvbSBcIi4vQXR0YWNobWVudC5qc1wiO1xuXG4vKiogQW4gYXR0YWNobWVudCB3aXRoIHZlcnRpY2VzIHRoYXQgbWFrZSB1cCBhIHBvbHlnb24uIENhbiBiZSB1c2VkIGZvciBoaXQgZGV0ZWN0aW9uLCBjcmVhdGluZyBwaHlzaWNzIGJvZGllcywgc3Bhd25pbmcgcGFydGljbGVcbiAqIGVmZmVjdHMsIGFuZCBtb3JlLlxuICpcbiAqIFNlZSB7QGxpbmsgU2tlbGV0b25Cb3VuZHN9IGFuZCBbQm91bmRpbmcgQm94ZXNdKGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ib3VuZGluZy1ib3hlcykgaW4gdGhlIFNwaW5lIFVzZXJcbiAqIEd1aWRlLiAqL1xuZXhwb3J0IGNsYXNzIEJvdW5kaW5nQm94QXR0YWNobWVudCBleHRlbmRzIFZlcnRleEF0dGFjaG1lbnQge1xuXHRjb2xvciA9IG5ldyBDb2xvcigxLCAxLCAxLCAxKTtcblxuXHRjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XG5cdFx0c3VwZXIobmFtZSk7XG5cdH1cblxuXHRjb3B5ICgpOiBBdHRhY2htZW50IHtcblx0XHRjb25zdCBjb3B5ID0gbmV3IEJvdW5kaW5nQm94QXR0YWNobWVudCh0aGlzLm5hbWUpO1xuXHRcdHRoaXMuY29weVRvKGNvcHkpO1xuXHRcdGNvcHkuY29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuY29sb3IpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG59XG4iXX0=
|
|
@@ -26,14 +26,21 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { SlotData } from "../SlotData.js";
|
|
29
|
+
import type { SlotData } from "../SlotData.js";
|
|
30
30
|
import { Color } from "../Utils.js";
|
|
31
|
-
import {
|
|
31
|
+
import { type Attachment, VertexAttachment } from "./Attachment.js";
|
|
32
32
|
/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */
|
|
33
33
|
export declare class ClippingAttachment extends VertexAttachment {
|
|
34
|
-
/** Clipping is performed between the clipping
|
|
34
|
+
/** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of
|
|
35
35
|
* the skeleton's rendering. */
|
|
36
36
|
endSlot: SlotData | null;
|
|
37
|
+
/** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the
|
|
38
|
+
* convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping
|
|
39
|
+
* always uses convex. */
|
|
40
|
+
convex: boolean;
|
|
41
|
+
/** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is
|
|
42
|
+
* visible and clipping is convex. */
|
|
43
|
+
inverse: boolean;
|
|
37
44
|
/** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons
|
|
38
45
|
* are not usually rendered at runtime. */
|
|
39
46
|
color: Color;
|
|
@@ -30,9 +30,16 @@ import { Color } from "../Utils.js";
|
|
|
30
30
|
import { VertexAttachment } from "./Attachment.js";
|
|
31
31
|
/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */
|
|
32
32
|
export class ClippingAttachment extends VertexAttachment {
|
|
33
|
-
/** Clipping is performed between the clipping
|
|
33
|
+
/** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of
|
|
34
34
|
* the skeleton's rendering. */
|
|
35
35
|
endSlot = null;
|
|
36
|
+
/** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the
|
|
37
|
+
* convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping
|
|
38
|
+
* always uses convex. */
|
|
39
|
+
convex = false;
|
|
40
|
+
/** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is
|
|
41
|
+
* visible and clipping is convex. */
|
|
42
|
+
inverse = false;
|
|
36
43
|
// Nonessential.
|
|
37
44
|
/** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons
|
|
38
45
|
* are not usually rendered at runtime. */
|
|
@@ -41,11 +48,13 @@ export class ClippingAttachment extends VertexAttachment {
|
|
|
41
48
|
super(name);
|
|
42
49
|
}
|
|
43
50
|
copy() {
|
|
44
|
-
|
|
51
|
+
const copy = new ClippingAttachment(this.name);
|
|
45
52
|
this.copyTo(copy);
|
|
46
53
|
copy.endSlot = this.endSlot;
|
|
54
|
+
copy.convex = this.convex;
|
|
55
|
+
copy.inverse = this.inverse;
|
|
47
56
|
copy.color.setFromColor(this.color);
|
|
48
57
|
return copy;
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcHBpbmdBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEUsK0dBQStHO0FBQy9HLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxnQkFBZ0I7SUFDdkQ7bUNBQytCO0lBQy9CLE9BQU8sR0FBb0IsSUFBSSxDQUFDO0lBRWhDOzs2QkFFeUI7SUFDekIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVmOzBDQUNzQztJQUN0QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLGdCQUFnQjtJQUNoQjs4Q0FDMEM7SUFDMUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztJQUV6RCxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUk7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBTbG90RGF0YSB9IGZyb20gXCIuLi9TbG90RGF0YS5qc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vVXRpbHMuanNcIjtcbmltcG9ydCB7IHR5cGUgQXR0YWNobWVudCwgVmVydGV4QXR0YWNobWVudCB9IGZyb20gXCIuL0F0dGFjaG1lbnQuanNcIjtcblxuLyoqIEFuIGF0dGFjaG1lbnQgd2l0aCB2ZXJ0aWNlcyB0aGF0IG1ha2UgdXAgYSBwb2x5Z29uIHVzZWQgZm9yIGNsaXBwaW5nIHRoZSByZW5kZXJpbmcgb2Ygb3RoZXIgYXR0YWNobWVudHMuICovXG5leHBvcnQgY2xhc3MgQ2xpcHBpbmdBdHRhY2htZW50IGV4dGVuZHMgVmVydGV4QXR0YWNobWVudCB7XG5cdC8qKiBDbGlwcGluZyBpcyBwZXJmb3JtZWQgYmV0d2VlbiB0aGUgY2xpcHBpbmcgYXR0YWNobWVudCdzIHNsb3QgYW5kIHRoZSBlbmQgc2xvdC4gSWYgbnVsbCwgY2xpcHBpbmcgaXMgZG9uZSB1bnRpbCB0aGUgZW5kIG9mXG5cdCAqIHRoZSBza2VsZXRvbidzIHJlbmRlcmluZy4gKi9cblx0ZW5kU2xvdDogU2xvdERhdGEgfCBudWxsID0gbnVsbDtcblxuXHQvKiogV2hlbiB0cnVlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzIHRyZWF0ZWQgYXMgY29udmV4IGZvciBtb3JlIGVmZmljaWVudCBjbGlwcGluZy4gSWYgdGhlIHBvbHlnb24gZGVmb3JtcyB0byBjb25jYXZlIHRoZW4gdGhlXG5cdCAqIGNvbnZleCBodWxsIGlzIHVzZWQuIFdoZW4gZmFsc2UgdGhlIGNsaXBwaW5nIHBvbHlnb24gY2FuIGJlIGNvbmNhdmUgYW5kIGlmIHNvIGhhcyBhbiBhZGRpdGlvbmFsIENQVSBjb3N0LiBJbnZlcnNlIGNsaXBwaW5nXG5cdCAqIGFsd2F5cyB1c2VzIGNvbnZleC4gKi9cblx0Y29udmV4ID0gZmFsc2U7XG5cblx0LyoqIFdoZW4gZmFsc2UsIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzIHZpc2libGUuIFdoZW4gdHJ1ZSwgZXZlcnl0aGluZyBvdXRzaWRlIHRoZSBjbGlwcGluZyBwb2x5Z29uIGlzXG5cdCAgKiB2aXNpYmxlIGFuZCBjbGlwcGluZyBpcyBjb252ZXguICovXG5cdGludmVyc2UgPSBmYWxzZTtcblxuXHQvLyBOb25lc3NlbnRpYWwuXG5cdC8qKiBUaGUgY29sb3Igb2YgdGhlIGNsaXBwaW5nIHBvbHlnb24gYXMgaXQgd2FzIGluIFNwaW5lLiBBdmFpbGFibGUgb25seSB3aGVuIG5vbmVzc2VudGlhbCBkYXRhIHdhcyBleHBvcnRlZC4gQ2xpcHBpbmcgcG9seWdvbnNcblx0ICogYXJlIG5vdCB1c3VhbGx5IHJlbmRlcmVkIGF0IHJ1bnRpbWUuICovXG5cdGNvbG9yID0gbmV3IENvbG9yKDAuMjI3NSwgMC4yMjc1LCAwLjgwNzgsIDEpOyAvLyBjZTNhM2FmZlxuXG5cdGNvbnN0cnVjdG9yIChuYW1lOiBzdHJpbmcpIHtcblx0XHRzdXBlcihuYW1lKTtcblx0fVxuXG5cdGNvcHkgKCk6IEF0dGFjaG1lbnQge1xuXHRcdGNvbnN0IGNvcHkgPSBuZXcgQ2xpcHBpbmdBdHRhY2htZW50KHRoaXMubmFtZSk7XG5cdFx0dGhpcy5jb3B5VG8oY29weSk7XG5cdFx0Y29weS5lbmRTbG90ID0gdGhpcy5lbmRTbG90O1xuXHRcdGNvcHkuY29udmV4ID0gdGhpcy5jb252ZXg7XG5cdFx0Y29weS5pbnZlcnNlID0gdGhpcy5pbnZlcnNlO1xuXHRcdGNvcHkuY29sb3Iuc2V0RnJvbUNvbG9yKHRoaXMuY29sb3IpO1xuXHRcdHJldHVybiBjb3B5O1xuXHR9XG59XG4iXX0=
|
|
@@ -26,19 +26,16 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
export interface
|
|
33
|
-
/** The
|
|
34
|
-
path
|
|
35
|
-
/** The
|
|
36
|
-
* {@link #updateRegion()} must be called. */
|
|
37
|
-
region: TextureRegion | null;
|
|
38
|
-
/** Updates any values the attachment calculates using the {@link #getRegion()}. Must be called after setting the
|
|
39
|
-
* {@link #getRegion()} or if the region's properties are changed. */
|
|
40
|
-
updateRegion(): void;
|
|
41
|
-
/** The color to tint the attachment. */
|
|
29
|
+
import type { Color } from "../Utils.js";
|
|
30
|
+
import type { Sequence } from "./Sequence.js";
|
|
31
|
+
/** Interface for an attachment that gets 1 or more texture regions from a {@link Sequence}. */
|
|
32
|
+
export interface HasSequence {
|
|
33
|
+
/** The base path for the attachment's texture region. */
|
|
34
|
+
path?: string;
|
|
35
|
+
/** The color the attachment is tinted, to be combined with {@link SlotPose.getColor}. */
|
|
42
36
|
color: Color;
|
|
43
|
-
|
|
37
|
+
/** Calls {@link Sequence.update} on this attachment's sequence. */
|
|
38
|
+
updateSequence(): void;
|
|
39
|
+
/** The sequence that provides texture regions, UVs, and vertex offsets for rendering this attachment. */
|
|
40
|
+
sequence: Sequence;
|
|
44
41
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
* Spine Runtimes License Agreement
|
|
3
|
+
* Last updated April 5, 2025. Replaces all prior versions.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2013-2025, 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
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXR0YWNobWVudHMvSGFzU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IFNsb3RQb3NlIH0gZnJvbSBcIi4uL1Nsb3RQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbG9yIH0gZnJvbSBcIi4uL1V0aWxzLmpzXCJcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2UgfSBmcm9tIFwiLi9TZXF1ZW5jZS5qc1wiXG5cbi8qKiBJbnRlcmZhY2UgZm9yIGFuIGF0dGFjaG1lbnQgdGhhdCBnZXRzIDEgb3IgbW9yZSB0ZXh0dXJlIHJlZ2lvbnMgZnJvbSBhIHtAbGluayBTZXF1ZW5jZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc1NlcXVlbmNlIHtcblx0LyoqIFRoZSBiYXNlIHBhdGggZm9yIHRoZSBhdHRhY2htZW50J3MgdGV4dHVyZSByZWdpb24uICovXG5cdHBhdGg/OiBzdHJpbmc7XG5cblx0LyoqIFRoZSBjb2xvciB0aGUgYXR0YWNobWVudCBpcyB0aW50ZWQsIHRvIGJlIGNvbWJpbmVkIHdpdGgge0BsaW5rIFNsb3RQb3NlLmdldENvbG9yfS4gKi9cblx0Y29sb3I6IENvbG9yO1xuXG5cdC8qKiBDYWxscyB7QGxpbmsgU2VxdWVuY2UudXBkYXRlfSBvbiB0aGlzIGF0dGFjaG1lbnQncyBzZXF1ZW5jZS4gKi9cblx0dXBkYXRlU2VxdWVuY2UgKCk6IHZvaWQ7XG5cblx0LyoqIFRoZSBzZXF1ZW5jZSB0aGF0IHByb3ZpZGVzIHRleHR1cmUgcmVnaW9ucywgVVZzLCBhbmQgdmVydGV4IG9mZnNldHMgZm9yIHJlbmRlcmluZyB0aGlzIGF0dGFjaG1lbnQuICovXG5cdHNlcXVlbmNlOiBTZXF1ZW5jZTtcbn1cbiJdfQ==
|
|
@@ -26,54 +26,47 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { TextureRegion } from "../Texture.js";
|
|
30
|
-
import { Color, NumberArrayLike } from "../Utils.js";
|
|
31
|
-
import { VertexAttachment
|
|
32
|
-
import {
|
|
33
|
-
import { Sequence } from "./Sequence.js";
|
|
34
|
-
import { Slot } from "../Slot.js";
|
|
29
|
+
import type { TextureRegion } from "../Texture.js";
|
|
30
|
+
import { Color, type NumberArrayLike } from "../Utils.js";
|
|
31
|
+
import { VertexAttachment } from "./Attachment.js";
|
|
32
|
+
import type { HasSequence } from "./HasSequence.js";
|
|
33
|
+
import type { Sequence } from "./Sequence.js";
|
|
35
34
|
/** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not
|
|
36
|
-
* supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh.
|
|
35
|
+
* supported. Each vertex has UVs (texture coordinates) and triangles that are used to map an image on to the mesh.
|
|
37
36
|
*
|
|
38
37
|
* See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */
|
|
39
|
-
export declare class MeshAttachment extends VertexAttachment implements
|
|
40
|
-
|
|
41
|
-
/** The name of the texture region for this attachment. */
|
|
42
|
-
path: string;
|
|
38
|
+
export declare class MeshAttachment extends VertexAttachment implements HasSequence {
|
|
39
|
+
readonly sequence: Sequence;
|
|
43
40
|
/** The UV pair for each vertex, normalized within the texture region. */
|
|
44
41
|
regionUVs: NumberArrayLike;
|
|
45
|
-
/** The UV pair for each vertex, normalized within the entire texture.
|
|
46
|
-
*
|
|
47
|
-
* See {@link #updateUVs}. */
|
|
48
|
-
uvs: NumberArrayLike;
|
|
49
42
|
/** Triplets of vertex indices which describe the mesh's triangulation. */
|
|
50
43
|
triangles: Array<number>;
|
|
44
|
+
/** The number of entries at the beginning of {@link vertices} that make up the mesh hull. */
|
|
45
|
+
hullLength: number;
|
|
46
|
+
/** The name of the texture region for this attachment. */
|
|
47
|
+
path?: string;
|
|
51
48
|
/** The color to tint the mesh. */
|
|
52
49
|
color: Color;
|
|
50
|
+
private sourceMesh;
|
|
51
|
+
/** Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh
|
|
52
|
+
* triangles do not never cross edges. Triangulation is not performed at runtime. */
|
|
53
|
+
edges: Array<number>;
|
|
53
54
|
/** The width of the mesh's image. Available only when nonessential data was exported. */
|
|
54
55
|
width: number;
|
|
55
56
|
/** The height of the mesh's image. Available only when nonessential data was exported. */
|
|
56
57
|
height: number;
|
|
57
|
-
/** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */
|
|
58
|
-
hullLength: number;
|
|
59
|
-
/** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if
|
|
60
|
-
* nonessential data was exported. Triangulation is not performed at runtime. */
|
|
61
|
-
edges: Array<number>;
|
|
62
|
-
private parentMesh;
|
|
63
|
-
sequence: Sequence | null;
|
|
64
58
|
tempColor: Color;
|
|
65
|
-
constructor(name: string,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
/** @
|
|
74
|
-
setParentMesh(parentMesh: MeshAttachment): void;
|
|
75
|
-
copy(): Attachment;
|
|
76
|
-
computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number, stride: number): void;
|
|
77
|
-
/** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/
|
|
59
|
+
constructor(name: string, sequence: Sequence);
|
|
60
|
+
copy(): MeshAttachment;
|
|
61
|
+
updateSequence(): void;
|
|
62
|
+
/** The source mesh if this is a linked mesh, else null. A linked mesh shares the {@link bones}, {@link vertices},
|
|
63
|
+
* {@link regionUVs}, {@link triangles}, {@link hullLength}, {@link edges}, {@link width}, and {@link height} with the
|
|
64
|
+
* source mesh, but may have a different {@link name} or {@link path}, and therefore a different texture region. */
|
|
65
|
+
getSourceMesh(): MeshAttachment | null;
|
|
66
|
+
setSourceMesh(sourceMesh: MeshAttachment | null): void;
|
|
67
|
+
/** Returns a new mesh with the {@link sourceMesh} set to this mesh's source mesh, if any, else to this mesh. **/
|
|
78
68
|
newLinkedMesh(): MeshAttachment;
|
|
69
|
+
/** Computes {@link Sequence.getUVs | UVs} for a mesh attachment.
|
|
70
|
+
* @param uvs Output array for the computed UVs, same length as regionUVs. */
|
|
71
|
+
static computeUVs(region: TextureRegion | null, regionUVs: NumberArrayLike, uvs: NumberArrayLike): void;
|
|
79
72
|
}
|