@esotericsoftware/spine-core 4.1.2 → 4.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Animation.d.ts +382 -382
- package/dist/Animation.js +2058 -2031
- package/dist/AnimationState.d.ts +396 -396
- package/dist/AnimationState.js +1083 -959
- package/dist/AnimationStateData.d.ts +51 -51
- package/dist/AnimationStateData.js +72 -70
- package/dist/AssetManagerBase.d.ts +74 -72
- package/dist/AssetManagerBase.js +304 -303
- package/dist/AtlasAttachmentLoader.d.ts +53 -53
- package/dist/AtlasAttachmentLoader.js +95 -94
- package/dist/Bone.d.ts +138 -138
- package/dist/Bone.js +340 -334
- package/dist/BoneData.d.ts +72 -72
- package/dist/BoneData.js +82 -74
- package/dist/ConstraintData.d.ts +35 -35
- package/dist/ConstraintData.js +36 -36
- package/dist/Event.d.ts +44 -44
- package/dist/Event.js +49 -42
- package/dist/EventData.d.ts +41 -41
- package/dist/EventData.js +44 -37
- package/dist/IkConstraint.d.ts +64 -64
- package/dist/IkConstraint.js +291 -285
- package/dist/IkConstraintData.d.ts +54 -54
- package/dist/IkConstraintData.js +56 -54
- package/dist/PathConstraint.d.ts +71 -71
- package/dist/PathConstraint.js +475 -469
- package/dist/PathConstraintData.d.ts +80 -80
- package/dist/PathConstraintData.js +84 -70
- package/dist/Skeleton.d.ts +152 -152
- package/dist/Skeleton.js +581 -563
- package/dist/SkeletonBinary.d.ts +68 -68
- package/dist/SkeletonBinary.js +1132 -1131
- package/dist/SkeletonBounds.d.ts +77 -77
- package/dist/SkeletonBounds.js +218 -218
- package/dist/SkeletonClipping.d.ts +50 -50
- package/dist/SkeletonClipping.js +323 -323
- package/dist/SkeletonData.d.ts +114 -114
- package/dist/SkeletonData.js +190 -167
- package/dist/SkeletonJson.d.ts +53 -53
- package/dist/SkeletonJson.js +954 -953
- package/dist/Skin.d.ts +71 -71
- package/dist/Skin.js +203 -201
- package/dist/Slot.d.ts +69 -69
- package/dist/Slot.js +97 -85
- package/dist/SlotData.d.ts +57 -57
- package/dist/SlotData.js +68 -55
- package/dist/Texture.d.ts +69 -69
- package/dist/Texture.js +72 -72
- package/dist/TextureAtlas.d.ts +65 -65
- package/dist/TextureAtlas.js +267 -246
- package/dist/TransformConstraint.d.ts +60 -60
- package/dist/TransformConstraint.js +246 -240
- package/dist/TransformConstraintData.d.ts +60 -60
- package/dist/TransformConstraintData.js +62 -60
- package/dist/Triangulator.d.ts +43 -43
- package/dist/Triangulator.js +243 -243
- package/dist/Updatable.d.ts +37 -37
- package/dist/Updatable.js +29 -29
- package/dist/Utils.d.ts +168 -168
- package/dist/Utils.js +403 -403
- package/dist/VertexEffect.d.ts +35 -35
- package/dist/VertexEffect.js +29 -29
- package/dist/attachments/Attachment.d.ts +72 -72
- package/dist/attachments/Attachment.js +149 -141
- package/dist/attachments/AttachmentLoader.d.ts +54 -54
- package/dist/attachments/AttachmentLoader.js +29 -29
- package/dist/attachments/BoundingBoxAttachment.d.ts +40 -40
- package/dist/attachments/BoundingBoxAttachment.js +47 -47
- package/dist/attachments/ClippingAttachment.d.ts +42 -42
- package/dist/attachments/ClippingAttachment.js +51 -48
- package/dist/attachments/HasTextureRegion.d.ts +44 -44
- package/dist/attachments/HasTextureRegion.js +29 -29
- package/dist/attachments/MeshAttachment.d.ts +79 -79
- package/dist/attachments/MeshAttachment.js +189 -167
- package/dist/attachments/PathAttachment.d.ts +47 -47
- package/dist/attachments/PathAttachment.js +59 -57
- package/dist/attachments/PointAttachment.d.ts +48 -48
- package/dist/attachments/PointAttachment.js +66 -63
- package/dist/attachments/RegionAttachment.d.ts +111 -111
- package/dist/attachments/RegionAttachment.js +204 -199
- package/dist/attachments/Sequence.d.ts +55 -55
- package/dist/attachments/Sequence.js +90 -90
- package/dist/attachments/index.d.ts +8 -8
- package/dist/attachments/index.js +8 -8
- package/dist/iife/spine-core.js +178 -8
- package/dist/iife/spine-core.js.map +2 -2
- package/dist/iife/spine-core.min.js +2 -2
- package/dist/index.d.ts +42 -42
- package/dist/index.js +42 -42
- package/dist/polyfills.d.ts +29 -29
- package/dist/polyfills.js +38 -38
- package/dist/vertexeffects/JitterEffect.d.ts +39 -39
- package/dist/vertexeffects/JitterEffect.js +45 -45
- package/dist/vertexeffects/SwirlEffect.d.ts +44 -44
- package/dist/vertexeffects/SwirlEffect.js +60 -60
- package/package.json +32 -32
package/dist/TextureAtlas.js
CHANGED
|
@@ -1,246 +1,267 @@
|
|
|
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 { TextureFilter, TextureWrap, TextureRegion } from "./Texture";
|
|
30
|
-
import { Utils } from "./Utils";
|
|
31
|
-
export class TextureAtlas {
|
|
32
|
-
constructor(atlasText) {
|
|
33
|
-
this.pages = new Array();
|
|
34
|
-
this.regions = new Array();
|
|
35
|
-
let reader = new TextureAtlasReader(atlasText);
|
|
36
|
-
let entry = new Array(4);
|
|
37
|
-
let page = null;
|
|
38
|
-
let region = null;
|
|
39
|
-
let pageFields = {};
|
|
40
|
-
pageFields["size"] = () => {
|
|
41
|
-
page.width = parseInt(entry[1]);
|
|
42
|
-
page.height = parseInt(entry[2]);
|
|
43
|
-
};
|
|
44
|
-
pageFields["format"] = () => {
|
|
45
|
-
// page.format = Format[tuple[0]]; we don't need format in WebGL
|
|
46
|
-
};
|
|
47
|
-
pageFields["filter"] = () => {
|
|
48
|
-
page.minFilter = Utils.enumValue(TextureFilter, entry[1]);
|
|
49
|
-
page.magFilter = Utils.enumValue(TextureFilter, entry[2]);
|
|
50
|
-
};
|
|
51
|
-
pageFields["repeat"] = () => {
|
|
52
|
-
if (entry[1].indexOf('x') != -1)
|
|
53
|
-
page.uWrap = TextureWrap.Repeat;
|
|
54
|
-
if (entry[1].indexOf('y') != -1)
|
|
55
|
-
page.vWrap = TextureWrap.Repeat;
|
|
56
|
-
};
|
|
57
|
-
pageFields["pma"] = () => {
|
|
58
|
-
page.pma = entry[1] == "true";
|
|
59
|
-
};
|
|
60
|
-
var regionFields = {};
|
|
61
|
-
regionFields["xy"] = () => {
|
|
62
|
-
region.x = parseInt(entry[1]);
|
|
63
|
-
region.y = parseInt(entry[2]);
|
|
64
|
-
};
|
|
65
|
-
regionFields["size"] = () => {
|
|
66
|
-
region.width = parseInt(entry[1]);
|
|
67
|
-
region.height = parseInt(entry[2]);
|
|
68
|
-
};
|
|
69
|
-
regionFields["bounds"] = () => {
|
|
70
|
-
region.x = parseInt(entry[1]);
|
|
71
|
-
region.y = parseInt(entry[2]);
|
|
72
|
-
region.width = parseInt(entry[3]);
|
|
73
|
-
region.height = parseInt(entry[4]);
|
|
74
|
-
};
|
|
75
|
-
regionFields["offset"] = () => {
|
|
76
|
-
region.offsetX = parseInt(entry[1]);
|
|
77
|
-
region.offsetY = parseInt(entry[2]);
|
|
78
|
-
};
|
|
79
|
-
regionFields["orig"] = () => {
|
|
80
|
-
region.originalWidth = parseInt(entry[1]);
|
|
81
|
-
region.originalHeight = parseInt(entry[2]);
|
|
82
|
-
};
|
|
83
|
-
regionFields["offsets"] = () => {
|
|
84
|
-
region.offsetX = parseInt(entry[1]);
|
|
85
|
-
region.offsetY = parseInt(entry[2]);
|
|
86
|
-
region.originalWidth = parseInt(entry[3]);
|
|
87
|
-
region.originalHeight = parseInt(entry[4]);
|
|
88
|
-
};
|
|
89
|
-
regionFields["rotate"] = () => {
|
|
90
|
-
let value = entry[1];
|
|
91
|
-
if (value == "true")
|
|
92
|
-
region.degrees = 90;
|
|
93
|
-
else if (value != "false")
|
|
94
|
-
region.degrees = parseInt(value);
|
|
95
|
-
};
|
|
96
|
-
regionFields["index"] = () => {
|
|
97
|
-
region.index = parseInt(entry[1]);
|
|
98
|
-
};
|
|
99
|
-
let line = reader.readLine();
|
|
100
|
-
// Ignore empty lines before first entry.
|
|
101
|
-
while (line && line.trim().length == 0)
|
|
102
|
-
line = reader.readLine();
|
|
103
|
-
// Header entries.
|
|
104
|
-
while (true) {
|
|
105
|
-
if (!line || line.trim().length == 0)
|
|
106
|
-
break;
|
|
107
|
-
if (reader.readEntry(entry, line) == 0)
|
|
108
|
-
break; // Silently ignore all header fields.
|
|
109
|
-
line = reader.readLine();
|
|
110
|
-
}
|
|
111
|
-
// Page and region entries.
|
|
112
|
-
let names = null;
|
|
113
|
-
let values = null;
|
|
114
|
-
while (true) {
|
|
115
|
-
if (line === null)
|
|
116
|
-
break;
|
|
117
|
-
if (line.trim().length == 0) {
|
|
118
|
-
page = null;
|
|
119
|
-
line = reader.readLine();
|
|
120
|
-
}
|
|
121
|
-
else if (!page) {
|
|
122
|
-
page = new TextureAtlasPage();
|
|
123
|
-
page.name = line.trim();
|
|
124
|
-
while (true) {
|
|
125
|
-
if (reader.readEntry(entry, line = reader.readLine()) == 0)
|
|
126
|
-
break;
|
|
127
|
-
let field = pageFields[entry[0]];
|
|
128
|
-
if (field)
|
|
129
|
-
field();
|
|
130
|
-
}
|
|
131
|
-
this.pages.push(page);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
region = new TextureAtlasRegion();
|
|
135
|
-
region.page = page;
|
|
136
|
-
region.name = line;
|
|
137
|
-
while (true) {
|
|
138
|
-
let count = reader.readEntry(entry, line = reader.readLine());
|
|
139
|
-
if (count == 0)
|
|
140
|
-
break;
|
|
141
|
-
let field = regionFields[entry[0]];
|
|
142
|
-
if (field)
|
|
143
|
-
field();
|
|
144
|
-
else {
|
|
145
|
-
if (!names) {
|
|
146
|
-
names = [];
|
|
147
|
-
values = [];
|
|
148
|
-
}
|
|
149
|
-
names.push(entry[0]);
|
|
150
|
-
let entryValues = [];
|
|
151
|
-
for (let i = 0; i < count; i++)
|
|
152
|
-
entryValues.push(parseInt(entry[i + 1]));
|
|
153
|
-
values.push(entryValues);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (region.originalWidth == 0 && region.originalHeight == 0) {
|
|
157
|
-
region.originalWidth = region.width;
|
|
158
|
-
region.originalHeight = region.height;
|
|
159
|
-
}
|
|
160
|
-
if (names && names.length > 0) {
|
|
161
|
-
region.names = names;
|
|
162
|
-
region.values = values;
|
|
163
|
-
names = null;
|
|
164
|
-
values = null;
|
|
165
|
-
}
|
|
166
|
-
region.u = region.x / page.width;
|
|
167
|
-
region.v = region.y / page.height;
|
|
168
|
-
if (region.degrees == 90) {
|
|
169
|
-
region.u2 = (region.x + region.height) / page.width;
|
|
170
|
-
region.v2 = (region.y + region.width) / page.height;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
region.u2 = (region.x + region.width) / page.width;
|
|
174
|
-
region.v2 = (region.y + region.height) / page.height;
|
|
175
|
-
}
|
|
176
|
-
this.regions.push(region);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
findRegion(name) {
|
|
181
|
-
for (let i = 0; i < this.regions.length; i++) {
|
|
182
|
-
if (this.regions[i].name == name) {
|
|
183
|
-
return this.regions[i];
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
setTextures(assetManager, pathPrefix = "") {
|
|
189
|
-
for (let page of this.pages)
|
|
190
|
-
page.setTexture(assetManager.get(pathPrefix + page.name));
|
|
191
|
-
}
|
|
192
|
-
dispose() {
|
|
193
|
-
for (let i = 0; i < this.pages.length; i++) {
|
|
194
|
-
this.pages[i].texture.dispose();
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
class TextureAtlasReader {
|
|
199
|
-
constructor(text) {
|
|
200
|
-
this.
|
|
201
|
-
this.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
236
|
-
this.
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
this.texture =
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZUF0bGFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RleHR1cmVBdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQVcsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9FLE9BQU8sRUFBYyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFFdkQsTUFBTSxPQUFPLFlBQVk7SUFJeEIsWUFBYSxTQUFpQjtRQUg5QixVQUFLLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO1FBR3pDLElBQUksTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLEdBQXFCLElBQUksQ0FBQztRQUNsQyxJQUFJLE1BQU0sR0FBdUIsSUFBSSxDQUFDO1FBRXRDLElBQUksVUFBVSxHQUF3QixFQUFFLENBQUM7UUFDekMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQzNCLGdFQUFnRTtRQUNqRSxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFD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
|
|
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 { TextureFilter, TextureWrap, TextureRegion } from "./Texture";
|
|
30
|
+
import { Utils } from "./Utils";
|
|
31
|
+
export class TextureAtlas {
|
|
32
|
+
constructor(atlasText) {
|
|
33
|
+
this.pages = new Array();
|
|
34
|
+
this.regions = new Array();
|
|
35
|
+
let reader = new TextureAtlasReader(atlasText);
|
|
36
|
+
let entry = new Array(4);
|
|
37
|
+
let page = null;
|
|
38
|
+
let region = null;
|
|
39
|
+
let pageFields = {};
|
|
40
|
+
pageFields["size"] = () => {
|
|
41
|
+
page.width = parseInt(entry[1]);
|
|
42
|
+
page.height = parseInt(entry[2]);
|
|
43
|
+
};
|
|
44
|
+
pageFields["format"] = () => {
|
|
45
|
+
// page.format = Format[tuple[0]]; we don't need format in WebGL
|
|
46
|
+
};
|
|
47
|
+
pageFields["filter"] = () => {
|
|
48
|
+
page.minFilter = Utils.enumValue(TextureFilter, entry[1]);
|
|
49
|
+
page.magFilter = Utils.enumValue(TextureFilter, entry[2]);
|
|
50
|
+
};
|
|
51
|
+
pageFields["repeat"] = () => {
|
|
52
|
+
if (entry[1].indexOf('x') != -1)
|
|
53
|
+
page.uWrap = TextureWrap.Repeat;
|
|
54
|
+
if (entry[1].indexOf('y') != -1)
|
|
55
|
+
page.vWrap = TextureWrap.Repeat;
|
|
56
|
+
};
|
|
57
|
+
pageFields["pma"] = () => {
|
|
58
|
+
page.pma = entry[1] == "true";
|
|
59
|
+
};
|
|
60
|
+
var regionFields = {};
|
|
61
|
+
regionFields["xy"] = () => {
|
|
62
|
+
region.x = parseInt(entry[1]);
|
|
63
|
+
region.y = parseInt(entry[2]);
|
|
64
|
+
};
|
|
65
|
+
regionFields["size"] = () => {
|
|
66
|
+
region.width = parseInt(entry[1]);
|
|
67
|
+
region.height = parseInt(entry[2]);
|
|
68
|
+
};
|
|
69
|
+
regionFields["bounds"] = () => {
|
|
70
|
+
region.x = parseInt(entry[1]);
|
|
71
|
+
region.y = parseInt(entry[2]);
|
|
72
|
+
region.width = parseInt(entry[3]);
|
|
73
|
+
region.height = parseInt(entry[4]);
|
|
74
|
+
};
|
|
75
|
+
regionFields["offset"] = () => {
|
|
76
|
+
region.offsetX = parseInt(entry[1]);
|
|
77
|
+
region.offsetY = parseInt(entry[2]);
|
|
78
|
+
};
|
|
79
|
+
regionFields["orig"] = () => {
|
|
80
|
+
region.originalWidth = parseInt(entry[1]);
|
|
81
|
+
region.originalHeight = parseInt(entry[2]);
|
|
82
|
+
};
|
|
83
|
+
regionFields["offsets"] = () => {
|
|
84
|
+
region.offsetX = parseInt(entry[1]);
|
|
85
|
+
region.offsetY = parseInt(entry[2]);
|
|
86
|
+
region.originalWidth = parseInt(entry[3]);
|
|
87
|
+
region.originalHeight = parseInt(entry[4]);
|
|
88
|
+
};
|
|
89
|
+
regionFields["rotate"] = () => {
|
|
90
|
+
let value = entry[1];
|
|
91
|
+
if (value == "true")
|
|
92
|
+
region.degrees = 90;
|
|
93
|
+
else if (value != "false")
|
|
94
|
+
region.degrees = parseInt(value);
|
|
95
|
+
};
|
|
96
|
+
regionFields["index"] = () => {
|
|
97
|
+
region.index = parseInt(entry[1]);
|
|
98
|
+
};
|
|
99
|
+
let line = reader.readLine();
|
|
100
|
+
// Ignore empty lines before first entry.
|
|
101
|
+
while (line && line.trim().length == 0)
|
|
102
|
+
line = reader.readLine();
|
|
103
|
+
// Header entries.
|
|
104
|
+
while (true) {
|
|
105
|
+
if (!line || line.trim().length == 0)
|
|
106
|
+
break;
|
|
107
|
+
if (reader.readEntry(entry, line) == 0)
|
|
108
|
+
break; // Silently ignore all header fields.
|
|
109
|
+
line = reader.readLine();
|
|
110
|
+
}
|
|
111
|
+
// Page and region entries.
|
|
112
|
+
let names = null;
|
|
113
|
+
let values = null;
|
|
114
|
+
while (true) {
|
|
115
|
+
if (line === null)
|
|
116
|
+
break;
|
|
117
|
+
if (line.trim().length == 0) {
|
|
118
|
+
page = null;
|
|
119
|
+
line = reader.readLine();
|
|
120
|
+
}
|
|
121
|
+
else if (!page) {
|
|
122
|
+
page = new TextureAtlasPage();
|
|
123
|
+
page.name = line.trim();
|
|
124
|
+
while (true) {
|
|
125
|
+
if (reader.readEntry(entry, line = reader.readLine()) == 0)
|
|
126
|
+
break;
|
|
127
|
+
let field = pageFields[entry[0]];
|
|
128
|
+
if (field)
|
|
129
|
+
field();
|
|
130
|
+
}
|
|
131
|
+
this.pages.push(page);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
region = new TextureAtlasRegion();
|
|
135
|
+
region.page = page;
|
|
136
|
+
region.name = line;
|
|
137
|
+
while (true) {
|
|
138
|
+
let count = reader.readEntry(entry, line = reader.readLine());
|
|
139
|
+
if (count == 0)
|
|
140
|
+
break;
|
|
141
|
+
let field = regionFields[entry[0]];
|
|
142
|
+
if (field)
|
|
143
|
+
field();
|
|
144
|
+
else {
|
|
145
|
+
if (!names) {
|
|
146
|
+
names = [];
|
|
147
|
+
values = [];
|
|
148
|
+
}
|
|
149
|
+
names.push(entry[0]);
|
|
150
|
+
let entryValues = [];
|
|
151
|
+
for (let i = 0; i < count; i++)
|
|
152
|
+
entryValues.push(parseInt(entry[i + 1]));
|
|
153
|
+
values.push(entryValues);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (region.originalWidth == 0 && region.originalHeight == 0) {
|
|
157
|
+
region.originalWidth = region.width;
|
|
158
|
+
region.originalHeight = region.height;
|
|
159
|
+
}
|
|
160
|
+
if (names && names.length > 0) {
|
|
161
|
+
region.names = names;
|
|
162
|
+
region.values = values;
|
|
163
|
+
names = null;
|
|
164
|
+
values = null;
|
|
165
|
+
}
|
|
166
|
+
region.u = region.x / page.width;
|
|
167
|
+
region.v = region.y / page.height;
|
|
168
|
+
if (region.degrees == 90) {
|
|
169
|
+
region.u2 = (region.x + region.height) / page.width;
|
|
170
|
+
region.v2 = (region.y + region.width) / page.height;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
region.u2 = (region.x + region.width) / page.width;
|
|
174
|
+
region.v2 = (region.y + region.height) / page.height;
|
|
175
|
+
}
|
|
176
|
+
this.regions.push(region);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
findRegion(name) {
|
|
181
|
+
for (let i = 0; i < this.regions.length; i++) {
|
|
182
|
+
if (this.regions[i].name == name) {
|
|
183
|
+
return this.regions[i];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
setTextures(assetManager, pathPrefix = "") {
|
|
189
|
+
for (let page of this.pages)
|
|
190
|
+
page.setTexture(assetManager.get(pathPrefix + page.name));
|
|
191
|
+
}
|
|
192
|
+
dispose() {
|
|
193
|
+
for (let i = 0; i < this.pages.length; i++) {
|
|
194
|
+
this.pages[i].texture.dispose();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
class TextureAtlasReader {
|
|
199
|
+
constructor(text) {
|
|
200
|
+
this.lines = null;
|
|
201
|
+
this.index = 0;
|
|
202
|
+
this.lines = text.split(/\r\n|\r|\n/);
|
|
203
|
+
}
|
|
204
|
+
readLine() {
|
|
205
|
+
if (this.index >= this.lines.length)
|
|
206
|
+
return null;
|
|
207
|
+
return this.lines[this.index++];
|
|
208
|
+
}
|
|
209
|
+
readEntry(entry, line) {
|
|
210
|
+
if (!line)
|
|
211
|
+
return 0;
|
|
212
|
+
line = line.trim();
|
|
213
|
+
if (line.length == 0)
|
|
214
|
+
return 0;
|
|
215
|
+
let colon = line.indexOf(':');
|
|
216
|
+
if (colon == -1)
|
|
217
|
+
return 0;
|
|
218
|
+
entry[0] = line.substr(0, colon).trim();
|
|
219
|
+
for (let i = 1, lastMatch = colon + 1;; i++) {
|
|
220
|
+
let comma = line.indexOf(',', lastMatch);
|
|
221
|
+
if (comma == -1) {
|
|
222
|
+
entry[i] = line.substr(lastMatch).trim();
|
|
223
|
+
return i;
|
|
224
|
+
}
|
|
225
|
+
entry[i] = line.substr(lastMatch, comma - lastMatch).trim();
|
|
226
|
+
lastMatch = comma + 1;
|
|
227
|
+
if (i == 4)
|
|
228
|
+
return 4;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export class TextureAtlasPage {
|
|
233
|
+
constructor() {
|
|
234
|
+
this.name = null;
|
|
235
|
+
this.minFilter = TextureFilter.Nearest;
|
|
236
|
+
this.magFilter = TextureFilter.Nearest;
|
|
237
|
+
this.uWrap = TextureWrap.ClampToEdge;
|
|
238
|
+
this.vWrap = TextureWrap.ClampToEdge;
|
|
239
|
+
this.texture = null;
|
|
240
|
+
this.width = 0;
|
|
241
|
+
this.height = 0;
|
|
242
|
+
this.pma = false;
|
|
243
|
+
}
|
|
244
|
+
setTexture(texture) {
|
|
245
|
+
this.texture = texture;
|
|
246
|
+
texture.setFilters(this.minFilter, this.magFilter);
|
|
247
|
+
texture.setWraps(this.uWrap, this.vWrap);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
export class TextureAtlasRegion extends TextureRegion {
|
|
251
|
+
constructor() {
|
|
252
|
+
super(...arguments);
|
|
253
|
+
this.page = null;
|
|
254
|
+
this.name = null;
|
|
255
|
+
this.x = 0;
|
|
256
|
+
this.y = 0;
|
|
257
|
+
this.offsetX = 0;
|
|
258
|
+
this.offsetY = 0;
|
|
259
|
+
this.originalWidth = 0;
|
|
260
|
+
this.originalHeight = 0;
|
|
261
|
+
this.index = 0;
|
|
262
|
+
this.degrees = 0;
|
|
263
|
+
this.names = null;
|
|
264
|
+
this.values = null;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZUF0bGFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RleHR1cmVBdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQVcsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9FLE9BQU8sRUFBYyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFFdkQsTUFBTSxPQUFPLFlBQVk7SUFJeEIsWUFBYSxTQUFpQjtRQUg5QixVQUFLLEdBQUcsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFDdEMsWUFBTyxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO1FBR3pDLElBQUksTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLEdBQXFCLElBQUksQ0FBQztRQUNsQyxJQUFJLE1BQU0sR0FBdUIsSUFBSSxDQUFDO1FBRXRDLElBQUksVUFBVSxHQUF3QixFQUFFLENBQUM7UUFDekMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQzNCLGdFQUFnRTtRQUNqRSxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFD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
|