@esotericsoftware/spine-core 4.1.25 → 4.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/Animation.d.ts +382 -0
  2. package/dist/Animation.js +2052 -0
  3. package/dist/AnimationState.d.ts +398 -0
  4. package/dist/AnimationState.js +1096 -0
  5. package/dist/AnimationStateData.d.ts +51 -0
  6. package/dist/AnimationStateData.js +70 -0
  7. package/dist/AssetManagerBase.d.ts +75 -0
  8. package/dist/AssetManagerBase.js +320 -0
  9. package/dist/AtlasAttachmentLoader.d.ts +53 -0
  10. package/dist/AtlasAttachmentLoader.js +95 -0
  11. package/dist/Bone.d.ts +138 -0
  12. package/dist/Bone.js +336 -0
  13. package/dist/BoneData.d.ts +72 -0
  14. package/dist/BoneData.js +80 -0
  15. package/dist/ConstraintData.d.ts +35 -0
  16. package/dist/ConstraintData.js +37 -0
  17. package/dist/Event.d.ts +44 -0
  18. package/dist/Event.js +48 -0
  19. package/dist/EventData.d.ts +41 -0
  20. package/dist/EventData.js +43 -0
  21. package/dist/IkConstraint.d.ts +64 -0
  22. package/dist/IkConstraint.js +296 -0
  23. package/dist/IkConstraintData.d.ts +56 -0
  24. package/dist/IkConstraintData.js +63 -0
  25. package/dist/PathConstraint.d.ts +71 -0
  26. package/dist/PathConstraint.js +476 -0
  27. package/dist/PathConstraintData.d.ts +82 -0
  28. package/dist/PathConstraintData.js +91 -0
  29. package/dist/Skeleton.d.ts +163 -0
  30. package/dist/Skeleton.js +588 -0
  31. package/dist/SkeletonBinary.d.ts +68 -0
  32. package/dist/SkeletonBinary.js +1172 -0
  33. package/dist/SkeletonBounds.d.ts +77 -0
  34. package/dist/SkeletonBounds.js +219 -0
  35. package/dist/SkeletonClipping.d.ts +50 -0
  36. package/dist/SkeletonClipping.js +326 -0
  37. package/dist/SkeletonData.d.ts +114 -0
  38. package/dist/SkeletonData.js +190 -0
  39. package/dist/SkeletonJson.d.ts +53 -0
  40. package/dist/SkeletonJson.js +1027 -0
  41. package/dist/Skin.d.ts +71 -0
  42. package/dist/Skin.js +201 -0
  43. package/dist/Slot.d.ts +69 -0
  44. package/dist/Slot.js +93 -0
  45. package/dist/SlotData.d.ts +57 -0
  46. package/dist/SlotData.js +64 -0
  47. package/dist/Texture.d.ts +69 -0
  48. package/dist/Texture.js +73 -0
  49. package/dist/TextureAtlas.d.ts +67 -0
  50. package/dist/TextureAtlas.js +263 -0
  51. package/dist/TransformConstraint.d.ts +60 -0
  52. package/dist/TransformConstraint.js +247 -0
  53. package/dist/TransformConstraintData.d.ts +62 -0
  54. package/dist/TransformConstraintData.js +69 -0
  55. package/dist/Triangulator.d.ts +43 -0
  56. package/dist/Triangulator.js +244 -0
  57. package/dist/Updatable.d.ts +37 -0
  58. package/dist/Updatable.js +30 -0
  59. package/dist/Utils.d.ts +168 -0
  60. package/dist/Utils.js +404 -0
  61. package/dist/attachments/Attachment.d.ts +72 -0
  62. package/dist/attachments/Attachment.js +147 -0
  63. package/dist/attachments/AttachmentLoader.d.ts +54 -0
  64. package/dist/attachments/AttachmentLoader.js +30 -0
  65. package/dist/attachments/BoundingBoxAttachment.d.ts +40 -0
  66. package/dist/attachments/BoundingBoxAttachment.js +48 -0
  67. package/dist/attachments/ClippingAttachment.d.ts +42 -0
  68. package/dist/attachments/ClippingAttachment.js +51 -0
  69. package/dist/attachments/HasTextureRegion.d.ts +44 -0
  70. package/dist/attachments/HasTextureRegion.js +30 -0
  71. package/dist/attachments/MeshAttachment.d.ts +79 -0
  72. package/dist/attachments/MeshAttachment.js +188 -0
  73. package/dist/attachments/PathAttachment.d.ts +47 -0
  74. package/dist/attachments/PathAttachment.js +59 -0
  75. package/dist/attachments/PointAttachment.d.ts +48 -0
  76. package/dist/attachments/PointAttachment.js +66 -0
  77. package/dist/attachments/RegionAttachment.d.ts +111 -0
  78. package/dist/attachments/RegionAttachment.js +215 -0
  79. package/dist/attachments/Sequence.d.ts +55 -0
  80. package/dist/attachments/Sequence.js +91 -0
  81. package/dist/attachments/index.d.ts +8 -0
  82. package/dist/attachments/index.js +9 -0
  83. package/dist/iife/spine-core.js +10703 -0
  84. package/dist/iife/spine-core.js.map +7 -0
  85. package/dist/iife/spine-core.min.js +2 -0
  86. package/dist/index.d.ts +39 -0
  87. package/dist/index.js +40 -0
  88. package/dist/polyfills.d.ts +29 -0
  89. package/dist/polyfills.js +39 -0
  90. package/package.json +1 -1
@@ -0,0 +1,77 @@
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 { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment";
30
+ import { Skeleton } from "./Skeleton";
31
+ import { NumberArrayLike } from "./Utils";
32
+ /** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
33
+ * provided along with convenience methods for doing hit detection. */
34
+ export declare class SkeletonBounds {
35
+ /** The left edge of the axis aligned bounding box. */
36
+ minX: number;
37
+ /** The bottom edge of the axis aligned bounding box. */
38
+ minY: number;
39
+ /** The right edge of the axis aligned bounding box. */
40
+ maxX: number;
41
+ /** The top edge of the axis aligned bounding box. */
42
+ maxY: number;
43
+ /** The visible bounding boxes. */
44
+ boundingBoxes: BoundingBoxAttachment[];
45
+ /** The world vertices for the bounding box polygons. */
46
+ polygons: NumberArrayLike[];
47
+ private polygonPool;
48
+ /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding
49
+ * box's polygon.
50
+ * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the
51
+ * SkeletonBounds AABB methods will always return true. */
52
+ update(skeleton: Skeleton, updateAabb: boolean): void;
53
+ aabbCompute(): void;
54
+ /** Returns true if the axis aligned bounding box contains the point. */
55
+ aabbContainsPoint(x: number, y: number): boolean;
56
+ /** Returns true if the axis aligned bounding box intersects the line segment. */
57
+ aabbIntersectsSegment(x1: number, y1: number, x2: number, y2: number): boolean;
58
+ /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
59
+ aabbIntersectsSkeleton(bounds: SkeletonBounds): boolean;
60
+ /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
61
+ * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */
62
+ containsPoint(x: number, y: number): BoundingBoxAttachment | null;
63
+ /** Returns true if the polygon contains the point. */
64
+ containsPointPolygon(polygon: NumberArrayLike, x: number, y: number): boolean;
65
+ /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
66
+ * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns
67
+ * true. */
68
+ intersectsSegment(x1: number, y1: number, x2: number, y2: number): BoundingBoxAttachment | null;
69
+ /** Returns true if the polygon contains any part of the line segment. */
70
+ intersectsSegmentPolygon(polygon: NumberArrayLike, x1: number, y1: number, x2: number, y2: number): boolean;
71
+ /** Returns the polygon for the specified bounding box, or null. */
72
+ getPolygon(boundingBox: BoundingBoxAttachment): NumberArrayLike | null;
73
+ /** The width of the axis aligned bounding box. */
74
+ getWidth(): number;
75
+ /** The height of the axis aligned bounding box. */
76
+ getHeight(): number;
77
+ }
@@ -0,0 +1,219 @@
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 { BoundingBoxAttachment } from "./attachments/BoundingBoxAttachment";
30
+ import { Pool, Utils } from "./Utils";
31
+ /** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
32
+ * provided along with convenience methods for doing hit detection. */
33
+ export class SkeletonBounds {
34
+ constructor() {
35
+ /** The left edge of the axis aligned bounding box. */
36
+ this.minX = 0;
37
+ /** The bottom edge of the axis aligned bounding box. */
38
+ this.minY = 0;
39
+ /** The right edge of the axis aligned bounding box. */
40
+ this.maxX = 0;
41
+ /** The top edge of the axis aligned bounding box. */
42
+ this.maxY = 0;
43
+ /** The visible bounding boxes. */
44
+ this.boundingBoxes = new Array();
45
+ /** The world vertices for the bounding box polygons. */
46
+ this.polygons = new Array();
47
+ this.polygonPool = new Pool(() => {
48
+ return Utils.newFloatArray(16);
49
+ });
50
+ }
51
+ /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding
52
+ * box's polygon.
53
+ * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the
54
+ * SkeletonBounds AABB methods will always return true. */
55
+ update(skeleton, updateAabb) {
56
+ if (!skeleton)
57
+ throw new Error("skeleton cannot be null.");
58
+ let boundingBoxes = this.boundingBoxes;
59
+ let polygons = this.polygons;
60
+ let polygonPool = this.polygonPool;
61
+ let slots = skeleton.slots;
62
+ let slotCount = slots.length;
63
+ boundingBoxes.length = 0;
64
+ polygonPool.freeAll(polygons);
65
+ polygons.length = 0;
66
+ for (let i = 0; i < slotCount; i++) {
67
+ let slot = slots[i];
68
+ if (!slot.bone.active)
69
+ continue;
70
+ let attachment = slot.getAttachment();
71
+ if (attachment instanceof BoundingBoxAttachment) {
72
+ let boundingBox = attachment;
73
+ boundingBoxes.push(boundingBox);
74
+ let polygon = polygonPool.obtain();
75
+ if (polygon.length != boundingBox.worldVerticesLength) {
76
+ polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);
77
+ }
78
+ polygons.push(polygon);
79
+ boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);
80
+ }
81
+ }
82
+ if (updateAabb) {
83
+ this.aabbCompute();
84
+ }
85
+ else {
86
+ this.minX = Number.POSITIVE_INFINITY;
87
+ this.minY = Number.POSITIVE_INFINITY;
88
+ this.maxX = Number.NEGATIVE_INFINITY;
89
+ this.maxY = Number.NEGATIVE_INFINITY;
90
+ }
91
+ }
92
+ aabbCompute() {
93
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
94
+ let polygons = this.polygons;
95
+ for (let i = 0, n = polygons.length; i < n; i++) {
96
+ let polygon = polygons[i];
97
+ let vertices = polygon;
98
+ for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {
99
+ let x = vertices[ii];
100
+ let y = vertices[ii + 1];
101
+ minX = Math.min(minX, x);
102
+ minY = Math.min(minY, y);
103
+ maxX = Math.max(maxX, x);
104
+ maxY = Math.max(maxY, y);
105
+ }
106
+ }
107
+ this.minX = minX;
108
+ this.minY = minY;
109
+ this.maxX = maxX;
110
+ this.maxY = maxY;
111
+ }
112
+ /** Returns true if the axis aligned bounding box contains the point. */
113
+ aabbContainsPoint(x, y) {
114
+ return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
115
+ }
116
+ /** Returns true if the axis aligned bounding box intersects the line segment. */
117
+ aabbIntersectsSegment(x1, y1, x2, y2) {
118
+ let minX = this.minX;
119
+ let minY = this.minY;
120
+ let maxX = this.maxX;
121
+ let maxY = this.maxY;
122
+ if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))
123
+ return false;
124
+ let m = (y2 - y1) / (x2 - x1);
125
+ let y = m * (minX - x1) + y1;
126
+ if (y > minY && y < maxY)
127
+ return true;
128
+ y = m * (maxX - x1) + y1;
129
+ if (y > minY && y < maxY)
130
+ return true;
131
+ let x = (minY - y1) / m + x1;
132
+ if (x > minX && x < maxX)
133
+ return true;
134
+ x = (maxY - y1) / m + x1;
135
+ if (x > minX && x < maxX)
136
+ return true;
137
+ return false;
138
+ }
139
+ /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
140
+ aabbIntersectsSkeleton(bounds) {
141
+ return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
142
+ }
143
+ /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
144
+ * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */
145
+ containsPoint(x, y) {
146
+ let polygons = this.polygons;
147
+ for (let i = 0, n = polygons.length; i < n; i++)
148
+ if (this.containsPointPolygon(polygons[i], x, y))
149
+ return this.boundingBoxes[i];
150
+ return null;
151
+ }
152
+ /** Returns true if the polygon contains the point. */
153
+ containsPointPolygon(polygon, x, y) {
154
+ let vertices = polygon;
155
+ let nn = polygon.length;
156
+ let prevIndex = nn - 2;
157
+ let inside = false;
158
+ for (let ii = 0; ii < nn; ii += 2) {
159
+ let vertexY = vertices[ii + 1];
160
+ let prevY = vertices[prevIndex + 1];
161
+ if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {
162
+ let vertexX = vertices[ii];
163
+ if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
164
+ inside = !inside;
165
+ }
166
+ prevIndex = ii;
167
+ }
168
+ return inside;
169
+ }
170
+ /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
171
+ * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns
172
+ * true. */
173
+ intersectsSegment(x1, y1, x2, y2) {
174
+ let polygons = this.polygons;
175
+ for (let i = 0, n = polygons.length; i < n; i++)
176
+ if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
177
+ return this.boundingBoxes[i];
178
+ return null;
179
+ }
180
+ /** Returns true if the polygon contains any part of the line segment. */
181
+ intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {
182
+ let vertices = polygon;
183
+ let nn = polygon.length;
184
+ let width12 = x1 - x2, height12 = y1 - y2;
185
+ let det1 = x1 * y2 - y1 * x2;
186
+ let x3 = vertices[nn - 2], y3 = vertices[nn - 1];
187
+ for (let ii = 0; ii < nn; ii += 2) {
188
+ let x4 = vertices[ii], y4 = vertices[ii + 1];
189
+ let det2 = x3 * y4 - y3 * x4;
190
+ let width34 = x3 - x4, height34 = y3 - y4;
191
+ let det3 = width12 * height34 - height12 * width34;
192
+ let x = (det1 * width34 - width12 * det2) / det3;
193
+ if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {
194
+ let y = (det1 * height34 - height12 * det2) / det3;
195
+ if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))
196
+ return true;
197
+ }
198
+ x3 = x4;
199
+ y3 = y4;
200
+ }
201
+ return false;
202
+ }
203
+ /** Returns the polygon for the specified bounding box, or null. */
204
+ getPolygon(boundingBox) {
205
+ if (!boundingBox)
206
+ throw new Error("boundingBox cannot be null.");
207
+ let index = this.boundingBoxes.indexOf(boundingBox);
208
+ return index == -1 ? null : this.polygons[index];
209
+ }
210
+ /** The width of the axis aligned bounding box. */
211
+ getWidth() {
212
+ return this.maxX - this.minX;
213
+ }
214
+ /** The height of the axis aligned bounding box. */
215
+ getHeight() {
216
+ return this.maxY - this.minY;
217
+ }
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVFLE9BQU8sRUFBbUIsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2RDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFFQyxzREFBc0Q7UUFDdEQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULHdEQUF3RDtRQUN4RCxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRVQsdURBQXVEO1FBQ3ZELFNBQUksR0FBRyxDQUFDLENBQUM7UUFFVCxxREFBcUQ7UUFDckQsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULGtDQUFrQztRQUNsQyxrQkFBYSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBRW5ELHdEQUF3RDtRQUN4RCxhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFFaEMsZ0JBQVcsR0FBRyxJQUFJLElBQUksQ0FBa0IsR0FBRyxFQUFFO1lBQ3BELE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQThLSixDQUFDO0lBNUtBOzs7d0VBR29FO0lBQ3BFLE1BQU0sQ0FBRSxRQUFrQixFQUFFLFVBQW1CO1FBQzlDLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU3QixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUN6QixXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsU0FBUztZQUNoQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsSUFBSSxVQUFVLFlBQVkscUJBQXFCLEVBQUU7Z0JBQ2hELElBQUksV0FBVyxHQUFHLFVBQW1DLENBQUM7Z0JBQ3RELGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRWhDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRTtvQkFDdEQsT0FBTyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7aUJBQy9EO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzFGO1NBQ0Q7UUFFRCxJQUFJLFVBQVUsRUFBRTtZQUNmLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7U0FDckM7SUFDRixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUN2SSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN2QixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Q7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLGlCQUFpQixDQUFFLENBQVMsRUFBRSxDQUFTO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixxQkFBcUIsQ0FBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO1FBQ3BFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztZQUN2SCxPQUFPLEtBQUssQ0FBQztRQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxzSEFBc0g7SUFDdEgsc0JBQXNCLENBQUUsTUFBc0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDakgsQ0FBQztJQUVEO3NHQUNrRztJQUNsRyxhQUFhLENBQUUsQ0FBUyxFQUFFLENBQVM7UUFDbEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM5QyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELG9CQUFvQixDQUFFLE9BQXdCLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDbkUsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFeEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2xDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDL0QsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQzthQUN4RztZQUNELFNBQVMsR0FBRyxFQUFFLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVEOztlQUVXO0lBQ1gsaUJBQWlCLENBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVTtRQUNoRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSx3QkFBd0IsQ0FBRSxPQUF3QixFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVU7UUFDakcsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFeEIsSUFBSSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRCxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUM3QixJQUFJLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDckcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQzthQUNsSDtZQUNELEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDUixFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ1I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsVUFBVSxDQUFFLFdBQWtDO1FBQzdDLElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxRQUFRO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxTQUFTO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQUNEIn0=
@@ -0,0 +1,50 @@
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 { ClippingAttachment } from "./attachments/ClippingAttachment";
30
+ import { Slot } from "./Slot";
31
+ import { Color, NumberArrayLike } from "./Utils";
32
+ export declare class SkeletonClipping {
33
+ private triangulator;
34
+ private clippingPolygon;
35
+ private clipOutput;
36
+ clippedVertices: number[];
37
+ clippedTriangles: number[];
38
+ private scratch;
39
+ private clipAttachment;
40
+ private clippingPolygons;
41
+ clipStart(slot: Slot, clip: ClippingAttachment): number;
42
+ clipEndWithSlot(slot: Slot): void;
43
+ clipEnd(): void;
44
+ isClipping(): boolean;
45
+ clipTriangles(vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void;
46
+ /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping
47
+ * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */
48
+ clip(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array<number>, output: Array<number>): boolean;
49
+ static makeClockwise(polygon: NumberArrayLike): void;
50
+ }