melonjs 14.0.2 → 14.1.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/README.md +2 -0
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
- package/dist/melonjs.mjs/_virtual/howler.js +10 -0
- package/dist/melonjs.mjs/_virtual/index.js +10 -0
- package/dist/melonjs.mjs/_virtual/index2.js +10 -0
- package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
- package/dist/melonjs.mjs/application/application.js +240 -0
- package/dist/melonjs.mjs/audio/audio.js +536 -0
- package/dist/melonjs.mjs/camera/camera2d.js +732 -0
- package/dist/melonjs.mjs/entity/entity.js +248 -0
- package/dist/melonjs.mjs/game.js +29 -0
- package/dist/melonjs.mjs/geometries/ellipse.js +275 -0
- package/dist/melonjs.mjs/geometries/line.js +116 -0
- package/dist/melonjs.mjs/geometries/path2d.js +319 -0
- package/dist/melonjs.mjs/geometries/point.js +89 -0
- package/dist/melonjs.mjs/geometries/poly.js +500 -0
- package/dist/melonjs.mjs/geometries/rectangle.js +375 -0
- package/dist/melonjs.mjs/geometries/roundrect.js +168 -0
- package/dist/melonjs.mjs/index.js +248 -0
- package/dist/melonjs.mjs/input/gamepad.js +501 -0
- package/dist/melonjs.mjs/input/input.js +26 -0
- package/dist/melonjs.mjs/input/keyboard.js +470 -0
- package/dist/melonjs.mjs/input/pointer.js +393 -0
- package/dist/melonjs.mjs/input/pointerevent.js +818 -0
- package/dist/melonjs.mjs/lang/deprecated.js +157 -0
- package/dist/melonjs.mjs/level/level.js +297 -0
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +448 -0
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +194 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +639 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +311 -0
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +83 -0
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +506 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +220 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +157 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +125 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +109 -0
- package/dist/melonjs.mjs/loader/loader.js +801 -0
- package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
- package/dist/melonjs.mjs/math/color.js +618 -0
- package/dist/melonjs.mjs/math/math.js +218 -0
- package/dist/melonjs.mjs/math/matrix2.js +503 -0
- package/dist/melonjs.mjs/math/matrix3.js +681 -0
- package/dist/melonjs.mjs/math/observable_vector2.js +471 -0
- package/dist/melonjs.mjs/math/observable_vector3.js +561 -0
- package/dist/melonjs.mjs/math/vector2.js +528 -0
- package/dist/melonjs.mjs/math/vector3.js +569 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
- package/dist/melonjs.mjs/particles/emitter.js +267 -0
- package/dist/melonjs.mjs/particles/particle.js +188 -0
- package/dist/melonjs.mjs/particles/settings.js +319 -0
- package/dist/melonjs.mjs/physics/body.js +704 -0
- package/dist/melonjs.mjs/physics/bounds.js +460 -0
- package/dist/melonjs.mjs/physics/collision.js +132 -0
- package/dist/melonjs.mjs/physics/detector.js +194 -0
- package/dist/melonjs.mjs/physics/quadtree.js +391 -0
- package/dist/melonjs.mjs/physics/response.js +57 -0
- package/dist/melonjs.mjs/physics/sat.js +483 -0
- package/dist/melonjs.mjs/physics/world.js +221 -0
- package/dist/melonjs.mjs/plugin/plugin.js +141 -0
- package/dist/melonjs.mjs/renderable/collectable.js +62 -0
- package/dist/melonjs.mjs/renderable/colorlayer.js +80 -0
- package/dist/melonjs.mjs/renderable/container.js +1018 -0
- package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
- package/dist/melonjs.mjs/renderable/imagelayer.js +306 -0
- package/dist/melonjs.mjs/renderable/light2d.js +156 -0
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +247 -0
- package/dist/melonjs.mjs/renderable/renderable.js +783 -0
- package/dist/melonjs.mjs/renderable/sprite.js +654 -0
- package/dist/melonjs.mjs/renderable/trigger.js +157 -0
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +213 -0
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +226 -0
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +128 -0
- package/dist/melonjs.mjs/state/stage.js +237 -0
- package/dist/melonjs.mjs/state/state.js +596 -0
- package/dist/melonjs.mjs/system/device.js +909 -0
- package/dist/melonjs.mjs/system/dom.js +78 -0
- package/dist/melonjs.mjs/system/event.js +537 -0
- package/dist/melonjs.mjs/system/platform.js +41 -0
- package/dist/melonjs.mjs/system/pooling.js +209 -0
- package/dist/melonjs.mjs/system/save.js +157 -0
- package/dist/melonjs.mjs/system/timer.js +286 -0
- package/dist/melonjs.mjs/text/bitmaptext.js +364 -0
- package/dist/melonjs.mjs/text/bitmaptextdata.js +199 -0
- package/dist/melonjs.mjs/text/glyph.js +66 -0
- package/dist/melonjs.mjs/text/text.js +453 -0
- package/dist/melonjs.mjs/text/textmetrics.js +176 -0
- package/dist/melonjs.mjs/text/textstyle.js +23 -0
- package/dist/melonjs.mjs/tweens/easing.js +336 -0
- package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
- package/dist/melonjs.mjs/tweens/tween.js +480 -0
- package/dist/melonjs.mjs/utils/agent.js +76 -0
- package/dist/melonjs.mjs/utils/array.js +63 -0
- package/dist/melonjs.mjs/utils/file.js +42 -0
- package/dist/melonjs.mjs/utils/function.js +70 -0
- package/dist/melonjs.mjs/utils/string.js +82 -0
- package/dist/melonjs.mjs/utils/utils.js +173 -0
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +807 -0
- package/dist/melonjs.mjs/video/renderer.js +411 -0
- package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
- package/dist/melonjs.mjs/video/texture/cache.js +143 -0
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
- package/dist/melonjs.mjs/video/video.js +462 -0
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +143 -0
- package/dist/melonjs.mjs/video/webgl/glshader.js +168 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
- package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
- package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
- package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +495 -0
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1036 -0
- package/dist/melonjs.module.d.ts +1163 -1163
- package/dist/melonjs.module.js +1903 -3274
- package/package.json +22 -17
- package/src/application/application.js +3 -3
- package/src/audio/audio.js +32 -32
- package/src/camera/camera2d.js +31 -31
- package/src/entity/entity.js +17 -17
- package/src/geometries/ellipse.js +16 -16
- package/src/geometries/line.js +5 -5
- package/src/geometries/path2d.js +32 -32
- package/src/geometries/poly.js +15 -15
- package/src/geometries/rectangle.js +18 -18
- package/src/geometries/roundrect.js +8 -8
- package/src/input/gamepad.js +15 -15
- package/src/input/keyboard.js +12 -12
- package/src/input/pointer.js +6 -6
- package/src/input/pointerevent.js +12 -12
- package/src/lang/deprecated.js +12 -12
- package/src/level/level.js +25 -25
- package/src/level/tiled/TMXLayer.js +22 -22
- package/src/level/tiled/TMXTile.js +5 -5
- package/src/level/tiled/TMXTileMap.js +6 -6
- package/src/level/tiled/TMXTileset.js +2 -2
- package/src/level/tiled/TMXUtils.js +5 -5
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -2
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +2 -2
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXRenderer.js +19 -19
- package/src/loader/loader.js +20 -20
- package/src/math/color.js +20 -20
- package/src/math/math.js +16 -16
- package/src/math/matrix2.js +16 -16
- package/src/math/matrix3.js +25 -25
- package/src/math/observable_vector2.js +14 -14
- package/src/math/observable_vector3.js +16 -16
- package/src/math/vector2.js +9 -9
- package/src/math/vector3.js +10 -10
- package/src/particles/emitter.js +6 -6
- package/src/particles/particle.js +2 -2
- package/src/physics/body.js +28 -28
- package/src/physics/bounds.js +8 -8
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +6 -6
- package/src/physics/quadtree.js +11 -11
- package/src/physics/sat.js +31 -31
- package/src/physics/world.js +5 -5
- package/src/plugin/plugin.js +5 -5
- package/src/renderable/collectable.js +3 -3
- package/src/renderable/colorlayer.js +5 -5
- package/src/renderable/container.js +21 -21
- package/src/renderable/dragndrop.js +14 -14
- package/src/renderable/imagelayer.js +13 -13
- package/src/renderable/light2d.js +3 -3
- package/src/renderable/nineslicesprite.js +16 -16
- package/src/renderable/renderable.js +23 -23
- package/src/renderable/sprite.js +28 -28
- package/src/renderable/trigger.js +15 -15
- package/src/renderable/ui/uibaseelement.js +7 -7
- package/src/renderable/ui/uispriteelement.js +6 -6
- package/src/renderable/ui/uitextbutton.js +13 -13
- package/src/state/stage.js +7 -7
- package/src/state/state.js +17 -17
- package/src/system/device.js +11 -11
- package/src/system/event.js +10 -10
- package/src/system/pooling.js +9 -9
- package/src/system/save.js +2 -2
- package/src/system/timer.js +10 -10
- package/src/text/bitmaptext.js +18 -18
- package/src/text/bitmaptextdata.js +2 -2
- package/src/text/text.js +23 -23
- package/src/text/textmetrics.js +8 -8
- package/src/tweens/tween.js +19 -19
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +4 -4
- package/src/utils/file.js +2 -2
- package/src/utils/function.js +6 -6
- package/src/utils/string.js +5 -5
- package/src/utils/utils.js +4 -4
- package/src/video/canvas/canvas_renderer.js +70 -70
- package/src/video/renderer.js +26 -26
- package/src/video/texture/atlas.js +22 -22
- package/src/video/texture/canvas_texture.js +9 -9
- package/src/video/video.js +17 -17
- package/src/video/webgl/glshader.js +10 -10
- package/src/video/webgl/webgl_compositor.js +41 -41
- package/src/video/webgl/webgl_renderer.js +75 -75
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import { isBoolean, isNumeric } from '../../utils/string.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* set and interpret a TMX property value
|
|
12
|
+
* @ignore
|
|
13
|
+
*/
|
|
14
|
+
function setTMXValue(name, type, value) {
|
|
15
|
+
var match;
|
|
16
|
+
|
|
17
|
+
if (typeof(value) !== "string") {
|
|
18
|
+
// Value is already normalized (e.g. with JSON maps)
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
switch (type) {
|
|
23
|
+
|
|
24
|
+
case "int" :
|
|
25
|
+
case "float" :
|
|
26
|
+
value = Number(value);
|
|
27
|
+
break;
|
|
28
|
+
|
|
29
|
+
case "bool" :
|
|
30
|
+
value = (value === "true");
|
|
31
|
+
break;
|
|
32
|
+
|
|
33
|
+
default :
|
|
34
|
+
// try to parse it anyway
|
|
35
|
+
if (!value || isBoolean(value)) {
|
|
36
|
+
// if value not defined or boolean
|
|
37
|
+
value = value ? (value === "true") : true;
|
|
38
|
+
}
|
|
39
|
+
else if (isNumeric(value)) {
|
|
40
|
+
// check if numeric
|
|
41
|
+
value = Number(value);
|
|
42
|
+
}
|
|
43
|
+
else if (value.search(/^json:/i) === 0) {
|
|
44
|
+
// try to parse it
|
|
45
|
+
match = value.split(/^json:/i)[1];
|
|
46
|
+
try {
|
|
47
|
+
value = JSON.parse(match);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
throw new Error("Unable to parse JSON: " + match);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (value.search(/^eval:/i) === 0) {
|
|
54
|
+
// try to evaluate it
|
|
55
|
+
match = value.split(/^eval:/i)[1];
|
|
56
|
+
try {
|
|
57
|
+
// eslint-disable-next-line
|
|
58
|
+
value = Function("'use strict';return (" + match + ")")();
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
throw new Error("Unable to evaluate: " + match);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (
|
|
65
|
+
((match = value.match(/^#([\da-fA-F])([\da-fA-F]{3})$/))) ||
|
|
66
|
+
((match = value.match(/^#([\da-fA-F]{2})([\da-fA-F]{6})$/)))
|
|
67
|
+
) {
|
|
68
|
+
value = "#" + match[2] + match[1];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// normalize values
|
|
72
|
+
if (name.search(/^(ratio|anchorPoint)$/) === 0) {
|
|
73
|
+
// convert number to vector
|
|
74
|
+
if (typeof(value) === "number") {
|
|
75
|
+
value = {
|
|
76
|
+
"x" : value,
|
|
77
|
+
"y" : value
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// return the interpreted value
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @ignore
|
|
88
|
+
*/
|
|
89
|
+
function parseAttributes(obj, elt) {
|
|
90
|
+
// do attributes
|
|
91
|
+
if (elt.attributes && elt.attributes.length > 0) {
|
|
92
|
+
for (var j = 0; j < elt.attributes.length; j++) {
|
|
93
|
+
var attribute = elt.attributes.item(j);
|
|
94
|
+
if (typeof(attribute.name) !== "undefined") {
|
|
95
|
+
// DOM4 (Attr no longer inherit from Node)
|
|
96
|
+
obj[attribute.name] = attribute.value;
|
|
97
|
+
} else {
|
|
98
|
+
// else use the deprecated ones
|
|
99
|
+
obj[attribute.nodeName] = attribute.nodeValue;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* decompress zlib/gzip data (NOT IMPLEMENTED)
|
|
107
|
+
* @ignore
|
|
108
|
+
* @name decompress
|
|
109
|
+
* @param {number[]} data- - Array of bytes
|
|
110
|
+
* @param {string} format- - compressed data format ("gzip","zlib")
|
|
111
|
+
*/
|
|
112
|
+
function decompress() {
|
|
113
|
+
throw new Error("GZIP/ZLIB compressed TMX Tile Map not supported!");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Decode a CSV encoded array into a binary array
|
|
118
|
+
* @ignore
|
|
119
|
+
* @name decodeCSV
|
|
120
|
+
* @param {string} input- - CSV formatted data (only numbers, everything else will be converted to NaN)
|
|
121
|
+
* @returns {number[]} Decoded data
|
|
122
|
+
*/
|
|
123
|
+
function decodeCSV(input) {
|
|
124
|
+
var entries = input.replace("\n", "").trim().split(",");
|
|
125
|
+
|
|
126
|
+
var result = [];
|
|
127
|
+
for (var i = 0; i < entries.length; i++) {
|
|
128
|
+
result.push(+entries[i]);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Decode a base64 encoded string into a byte array
|
|
135
|
+
* @ignore
|
|
136
|
+
* @name decodeBase64AsArray
|
|
137
|
+
* @param {string} input - Base64 encoded data
|
|
138
|
+
* @param {number} [bytes] - number of bytes per array entry
|
|
139
|
+
* @returns {Uint32Array} Decoded data
|
|
140
|
+
*/
|
|
141
|
+
function decodeBase64AsArray(input, bytes) {
|
|
142
|
+
bytes = bytes || 1;
|
|
143
|
+
|
|
144
|
+
var i, j, len;
|
|
145
|
+
var dec = globalThis.atob(input.replace(/[^A-Za-z0-9\+\/\=]/g, ""));
|
|
146
|
+
var ar = new Uint32Array(dec.length / bytes);
|
|
147
|
+
|
|
148
|
+
for (i = 0, len = dec.length / bytes; i < len; i++) {
|
|
149
|
+
ar[i] = 0;
|
|
150
|
+
for (j = bytes - 1; j >= 0; --j) {
|
|
151
|
+
ar[i] += dec.charCodeAt((i * bytes) + j) << (j << 3);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return ar;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Decode the given data
|
|
159
|
+
* @ignore
|
|
160
|
+
*/
|
|
161
|
+
function decode(data, encoding, compression) {
|
|
162
|
+
compression = compression || "none";
|
|
163
|
+
encoding = encoding || "none";
|
|
164
|
+
|
|
165
|
+
switch (encoding) {
|
|
166
|
+
case "csv":
|
|
167
|
+
return decodeCSV(data);
|
|
168
|
+
|
|
169
|
+
case "base64":
|
|
170
|
+
var decoded = decodeBase64AsArray(data, 4);
|
|
171
|
+
return (
|
|
172
|
+
(compression === "none") ?
|
|
173
|
+
decoded :
|
|
174
|
+
decompress()
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
case "none":
|
|
178
|
+
return data;
|
|
179
|
+
|
|
180
|
+
case "xml":
|
|
181
|
+
throw new Error("XML encoding is deprecated, use base64 instead");
|
|
182
|
+
|
|
183
|
+
default:
|
|
184
|
+
throw new Error("Unknown layer encoding: " + encoding);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Normalize TMX format to Tiled JSON format
|
|
190
|
+
* @ignore
|
|
191
|
+
*/
|
|
192
|
+
function normalize(obj, item) {
|
|
193
|
+
var nodeName = item.nodeName;
|
|
194
|
+
|
|
195
|
+
switch (nodeName) {
|
|
196
|
+
case "data":
|
|
197
|
+
var data = parse(item);
|
|
198
|
+
// #956 Support for Infinite map
|
|
199
|
+
// workaround to prevent the parsing code from crashing
|
|
200
|
+
data.text = data.text || data.chunk.text;
|
|
201
|
+
// When no encoding is given, the tiles are stored as individual XML tile elements.
|
|
202
|
+
data.encoding = data.encoding || "xml";
|
|
203
|
+
obj.data = decode(data.text, data.encoding, data.compression);
|
|
204
|
+
obj.encoding = "none";
|
|
205
|
+
break;
|
|
206
|
+
|
|
207
|
+
case "imagelayer":
|
|
208
|
+
case "layer":
|
|
209
|
+
case "objectgroup":
|
|
210
|
+
case "group":
|
|
211
|
+
var layer = parse(item);
|
|
212
|
+
layer.type = (nodeName === "layer" ? "tilelayer" : nodeName);
|
|
213
|
+
if (layer.image) {
|
|
214
|
+
layer.image = layer.image.source;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
obj.layers = obj.layers || [];
|
|
218
|
+
obj.layers.push(layer);
|
|
219
|
+
break;
|
|
220
|
+
|
|
221
|
+
case "animation":
|
|
222
|
+
obj.animation = parse(item).frames;
|
|
223
|
+
break;
|
|
224
|
+
|
|
225
|
+
case "frame":
|
|
226
|
+
case "object":
|
|
227
|
+
var name = nodeName + "s";
|
|
228
|
+
obj[name] = obj[name] || [];
|
|
229
|
+
obj[name].push(parse(item));
|
|
230
|
+
break;
|
|
231
|
+
|
|
232
|
+
case "tile":
|
|
233
|
+
var tile = parse(item);
|
|
234
|
+
if (tile.image) {
|
|
235
|
+
tile.imagewidth = tile.image.width;
|
|
236
|
+
tile.imageheight = tile.image.height;
|
|
237
|
+
tile.image = tile.image.source;
|
|
238
|
+
}
|
|
239
|
+
obj.tiles = obj.tiles || {};
|
|
240
|
+
obj.tiles[tile.id] = tile;
|
|
241
|
+
break;
|
|
242
|
+
|
|
243
|
+
case "tileset":
|
|
244
|
+
var tileset = parse(item);
|
|
245
|
+
if (tileset.image) {
|
|
246
|
+
tileset.imagewidth = tileset.image.width;
|
|
247
|
+
tileset.imageheight = tileset.image.height;
|
|
248
|
+
tileset.image = tileset.image.source;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
obj.tilesets = obj.tilesets || [];
|
|
252
|
+
obj.tilesets.push(tileset);
|
|
253
|
+
break;
|
|
254
|
+
|
|
255
|
+
case "polygon":
|
|
256
|
+
case "polyline":
|
|
257
|
+
obj[nodeName] = [];
|
|
258
|
+
|
|
259
|
+
// Get a point array
|
|
260
|
+
var points = parse(item).points.split(" ");
|
|
261
|
+
|
|
262
|
+
// And normalize them into an array of vectors
|
|
263
|
+
for (var i = 0, v; i < points.length; i++) {
|
|
264
|
+
v = points[i].split(",");
|
|
265
|
+
obj[nodeName].push({
|
|
266
|
+
"x" : +v[0],
|
|
267
|
+
"y" : +v[1]
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
break;
|
|
272
|
+
|
|
273
|
+
case "properties":
|
|
274
|
+
obj.properties = parse(item);
|
|
275
|
+
break;
|
|
276
|
+
|
|
277
|
+
case "property":
|
|
278
|
+
var property = parse(item);
|
|
279
|
+
// for custom properties, text is used
|
|
280
|
+
var value = (typeof property.value !== "undefined") ? property.value : property.text;
|
|
281
|
+
|
|
282
|
+
obj[property.name] = setTMXValue(
|
|
283
|
+
property.name,
|
|
284
|
+
// in XML type is undefined for "string" values
|
|
285
|
+
property.type || "string",
|
|
286
|
+
value
|
|
287
|
+
);
|
|
288
|
+
break;
|
|
289
|
+
|
|
290
|
+
default:
|
|
291
|
+
obj[nodeName] = parse(item);
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Parse a XML TMX object and returns the corresponding javascript object
|
|
298
|
+
* @ignore
|
|
299
|
+
*/
|
|
300
|
+
function parse(xml) {
|
|
301
|
+
// Create the return object
|
|
302
|
+
var obj = {};
|
|
303
|
+
|
|
304
|
+
var text = "";
|
|
305
|
+
|
|
306
|
+
if (xml.nodeType === 1) {
|
|
307
|
+
// do attributes
|
|
308
|
+
parseAttributes(obj, xml);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// do children
|
|
312
|
+
if (xml.hasChildNodes()) {
|
|
313
|
+
for (var i = 0; i < xml.childNodes.length; i++) {
|
|
314
|
+
var item = xml.childNodes.item(i);
|
|
315
|
+
|
|
316
|
+
switch (item.nodeType) {
|
|
317
|
+
case 1:
|
|
318
|
+
normalize(obj, item);
|
|
319
|
+
break;
|
|
320
|
+
|
|
321
|
+
case 3:
|
|
322
|
+
text += item.nodeValue.trim();
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (text) {
|
|
329
|
+
obj.text = text;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return obj;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Apply TMX Properties to the given object
|
|
337
|
+
* @ignore
|
|
338
|
+
*/
|
|
339
|
+
function applyTMXProperties(obj, data) {
|
|
340
|
+
var properties = data.properties;
|
|
341
|
+
var types = data.propertytypes;
|
|
342
|
+
if (typeof(properties) !== "undefined") {
|
|
343
|
+
for (var property in properties) {
|
|
344
|
+
if (properties.hasOwnProperty(property)) {
|
|
345
|
+
var type = "string";
|
|
346
|
+
var name = property;
|
|
347
|
+
var value = properties[property];
|
|
348
|
+
// proof-check for new and old JSON format
|
|
349
|
+
if (typeof properties[property].name !== "undefined") {
|
|
350
|
+
name = properties[property].name;
|
|
351
|
+
}
|
|
352
|
+
if (typeof(types) !== "undefined") {
|
|
353
|
+
type = types[property];
|
|
354
|
+
} else if (typeof properties[property].type !== "undefined") {
|
|
355
|
+
type = properties[property].type;
|
|
356
|
+
}
|
|
357
|
+
if (typeof properties[property].value !== "undefined") {
|
|
358
|
+
value = properties[property].value;
|
|
359
|
+
}
|
|
360
|
+
// set the value
|
|
361
|
+
obj[name] = setTMXValue(name, type, value);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export { applyTMXProperties, decode, decodeBase64AsArray, decodeCSV, decompress, normalize, parse };
|