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.
Files changed (214) hide show
  1. package/README.md +2 -0
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
  3. package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
  4. package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
  5. package/dist/melonjs.mjs/_virtual/howler.js +10 -0
  6. package/dist/melonjs.mjs/_virtual/index.js +10 -0
  7. package/dist/melonjs.mjs/_virtual/index2.js +10 -0
  8. package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
  9. package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
  10. package/dist/melonjs.mjs/application/application.js +240 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +732 -0
  13. package/dist/melonjs.mjs/entity/entity.js +248 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +275 -0
  16. package/dist/melonjs.mjs/geometries/line.js +116 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +319 -0
  18. package/dist/melonjs.mjs/geometries/point.js +89 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +500 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +375 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +168 -0
  22. package/dist/melonjs.mjs/index.js +248 -0
  23. package/dist/melonjs.mjs/input/gamepad.js +501 -0
  24. package/dist/melonjs.mjs/input/input.js +26 -0
  25. package/dist/melonjs.mjs/input/keyboard.js +470 -0
  26. package/dist/melonjs.mjs/input/pointer.js +393 -0
  27. package/dist/melonjs.mjs/input/pointerevent.js +818 -0
  28. package/dist/melonjs.mjs/lang/deprecated.js +157 -0
  29. package/dist/melonjs.mjs/level/level.js +297 -0
  30. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
  31. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +448 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +194 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +639 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +311 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +83 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +506 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +220 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +157 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +125 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +109 -0
  43. package/dist/melonjs.mjs/loader/loader.js +801 -0
  44. package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
  45. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
  46. package/dist/melonjs.mjs/math/color.js +618 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +503 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +681 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +471 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +561 -0
  52. package/dist/melonjs.mjs/math/vector2.js +528 -0
  53. package/dist/melonjs.mjs/math/vector3.js +569 -0
  54. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
  55. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
  56. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
  57. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
  58. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
  59. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
  60. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
  61. package/dist/melonjs.mjs/particles/emitter.js +267 -0
  62. package/dist/melonjs.mjs/particles/particle.js +188 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +704 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +460 -0
  66. package/dist/melonjs.mjs/physics/collision.js +132 -0
  67. package/dist/melonjs.mjs/physics/detector.js +194 -0
  68. package/dist/melonjs.mjs/physics/quadtree.js +391 -0
  69. package/dist/melonjs.mjs/physics/response.js +57 -0
  70. package/dist/melonjs.mjs/physics/sat.js +483 -0
  71. package/dist/melonjs.mjs/physics/world.js +221 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +62 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +80 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1018 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +306 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +156 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +247 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +783 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +654 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +157 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +213 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +226 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +128 -0
  86. package/dist/melonjs.mjs/state/stage.js +237 -0
  87. package/dist/melonjs.mjs/state/state.js +596 -0
  88. package/dist/melonjs.mjs/system/device.js +909 -0
  89. package/dist/melonjs.mjs/system/dom.js +78 -0
  90. package/dist/melonjs.mjs/system/event.js +537 -0
  91. package/dist/melonjs.mjs/system/platform.js +41 -0
  92. package/dist/melonjs.mjs/system/pooling.js +209 -0
  93. package/dist/melonjs.mjs/system/save.js +157 -0
  94. package/dist/melonjs.mjs/system/timer.js +286 -0
  95. package/dist/melonjs.mjs/text/bitmaptext.js +364 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +199 -0
  97. package/dist/melonjs.mjs/text/glyph.js +66 -0
  98. package/dist/melonjs.mjs/text/text.js +453 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +176 -0
  100. package/dist/melonjs.mjs/text/textstyle.js +23 -0
  101. package/dist/melonjs.mjs/tweens/easing.js +336 -0
  102. package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
  103. package/dist/melonjs.mjs/tweens/tween.js +480 -0
  104. package/dist/melonjs.mjs/utils/agent.js +76 -0
  105. package/dist/melonjs.mjs/utils/array.js +63 -0
  106. package/dist/melonjs.mjs/utils/file.js +42 -0
  107. package/dist/melonjs.mjs/utils/function.js +70 -0
  108. package/dist/melonjs.mjs/utils/string.js +82 -0
  109. package/dist/melonjs.mjs/utils/utils.js +173 -0
  110. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +807 -0
  111. package/dist/melonjs.mjs/video/renderer.js +411 -0
  112. package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
  113. package/dist/melonjs.mjs/video/texture/cache.js +143 -0
  114. package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
  115. package/dist/melonjs.mjs/video/video.js +462 -0
  116. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +143 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +168 -0
  118. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
  119. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
  120. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
  121. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
  122. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
  123. package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
  124. package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
  125. package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
  126. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
  127. package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +495 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1036 -0
  129. package/dist/melonjs.module.d.ts +1163 -1163
  130. package/dist/melonjs.module.js +1903 -3274
  131. package/package.json +22 -17
  132. package/src/application/application.js +3 -3
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +31 -31
  135. package/src/entity/entity.js +17 -17
  136. package/src/geometries/ellipse.js +16 -16
  137. package/src/geometries/line.js +5 -5
  138. package/src/geometries/path2d.js +32 -32
  139. package/src/geometries/poly.js +15 -15
  140. package/src/geometries/rectangle.js +18 -18
  141. package/src/geometries/roundrect.js +8 -8
  142. package/src/input/gamepad.js +15 -15
  143. package/src/input/keyboard.js +12 -12
  144. package/src/input/pointer.js +6 -6
  145. package/src/input/pointerevent.js +12 -12
  146. package/src/lang/deprecated.js +12 -12
  147. package/src/level/level.js +25 -25
  148. package/src/level/tiled/TMXLayer.js +22 -22
  149. package/src/level/tiled/TMXTile.js +5 -5
  150. package/src/level/tiled/TMXTileMap.js +6 -6
  151. package/src/level/tiled/TMXTileset.js +2 -2
  152. package/src/level/tiled/TMXUtils.js +5 -5
  153. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -2
  154. package/src/level/tiled/renderer/TMXIsometricRenderer.js +2 -2
  155. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  156. package/src/level/tiled/renderer/TMXRenderer.js +19 -19
  157. package/src/loader/loader.js +20 -20
  158. package/src/math/color.js +20 -20
  159. package/src/math/math.js +16 -16
  160. package/src/math/matrix2.js +16 -16
  161. package/src/math/matrix3.js +25 -25
  162. package/src/math/observable_vector2.js +14 -14
  163. package/src/math/observable_vector3.js +16 -16
  164. package/src/math/vector2.js +9 -9
  165. package/src/math/vector3.js +10 -10
  166. package/src/particles/emitter.js +6 -6
  167. package/src/particles/particle.js +2 -2
  168. package/src/physics/body.js +28 -28
  169. package/src/physics/bounds.js +8 -8
  170. package/src/physics/collision.js +2 -2
  171. package/src/physics/detector.js +6 -6
  172. package/src/physics/quadtree.js +11 -11
  173. package/src/physics/sat.js +31 -31
  174. package/src/physics/world.js +5 -5
  175. package/src/plugin/plugin.js +5 -5
  176. package/src/renderable/collectable.js +3 -3
  177. package/src/renderable/colorlayer.js +5 -5
  178. package/src/renderable/container.js +21 -21
  179. package/src/renderable/dragndrop.js +14 -14
  180. package/src/renderable/imagelayer.js +13 -13
  181. package/src/renderable/light2d.js +3 -3
  182. package/src/renderable/nineslicesprite.js +16 -16
  183. package/src/renderable/renderable.js +23 -23
  184. package/src/renderable/sprite.js +28 -28
  185. package/src/renderable/trigger.js +15 -15
  186. package/src/renderable/ui/uibaseelement.js +7 -7
  187. package/src/renderable/ui/uispriteelement.js +6 -6
  188. package/src/renderable/ui/uitextbutton.js +13 -13
  189. package/src/state/stage.js +7 -7
  190. package/src/state/state.js +17 -17
  191. package/src/system/device.js +11 -11
  192. package/src/system/event.js +10 -10
  193. package/src/system/pooling.js +9 -9
  194. package/src/system/save.js +2 -2
  195. package/src/system/timer.js +10 -10
  196. package/src/text/bitmaptext.js +18 -18
  197. package/src/text/bitmaptextdata.js +2 -2
  198. package/src/text/text.js +23 -23
  199. package/src/text/textmetrics.js +8 -8
  200. package/src/tweens/tween.js +19 -19
  201. package/src/utils/agent.js +5 -5
  202. package/src/utils/array.js +4 -4
  203. package/src/utils/file.js +2 -2
  204. package/src/utils/function.js +6 -6
  205. package/src/utils/string.js +5 -5
  206. package/src/utils/utils.js +4 -4
  207. package/src/video/canvas/canvas_renderer.js +70 -70
  208. package/src/video/renderer.js +26 -26
  209. package/src/video/texture/atlas.js +22 -22
  210. package/src/video/texture/canvas_texture.js +9 -9
  211. package/src/video/video.js +17 -17
  212. package/src/video/webgl/glshader.js +10 -10
  213. package/src/video/webgl/webgl_compositor.js +41 -41
  214. package/src/video/webgl/webgl_renderer.js +75 -75
@@ -0,0 +1,639 @@
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 pool from '../../system/pooling.js';
9
+ import { off, VIEWPORT_ONRESIZE, on } from '../../system/event.js';
10
+ import game from '../../game.js';
11
+ import collision from '../../physics/collision.js';
12
+ import Body from '../../physics/body.js';
13
+ import TMXOrthogonalRenderer from './renderer/TMXOrthogonalRenderer.js';
14
+ import TMXIsometricRenderer from './renderer/TMXIsometricRenderer.js';
15
+ import TMXHexagonalRenderer from './renderer/TMXHexagonalRenderer.js';
16
+ import TMXStaggeredRenderer from './renderer/TMXStaggeredRenderer.js';
17
+ import TMXTileset from './TMXTileset.js';
18
+ import TMXTilesetGroup from './TMXTilesetGroup.js';
19
+ import TMXGroup from './TMXGroup.js';
20
+ import TMXLayer from './TMXLayer.js';
21
+ import { applyTMXProperties } from './TMXUtils.js';
22
+ import Renderable from '../../renderable/renderable.js';
23
+ import Container from '../../renderable/container.js';
24
+
25
+ // constant to identify the collision object layer
26
+ const COLLISION_GROUP = "collision";
27
+
28
+ /**
29
+ * set a compatible renderer object
30
+ * for the specified map
31
+ * @ignore
32
+ */
33
+ function getNewDefaultRenderer(map) {
34
+ switch (map.orientation) {
35
+ case "orthogonal":
36
+ return new TMXOrthogonalRenderer(map);
37
+
38
+ case "isometric":
39
+ return new TMXIsometricRenderer(map);
40
+
41
+ case "hexagonal":
42
+ return new TMXHexagonalRenderer(map);
43
+
44
+ case "staggered":
45
+ return new TMXStaggeredRenderer(map);
46
+
47
+ // if none found, throw an exception
48
+ default:
49
+ throw new Error(map.orientation + " type TMX Tile Map not supported!");
50
+ }
51
+ }
52
+
53
+ /**
54
+ * read the layer Data
55
+ * @ignore
56
+ */
57
+ function readLayer(map, data, z) {
58
+ return new TMXLayer(map, data, map.tilewidth, map.tileheight, map.orientation, map.tilesets, z);
59
+ }
60
+
61
+ /**
62
+ * read the Image Layer Data
63
+ * @ignore
64
+ */
65
+ function readImageLayer(map, data, z) {
66
+ // Normalize properties
67
+ applyTMXProperties(data.properties, data);
68
+
69
+ // create the layer
70
+ var imageLayer = pool.pull("ImageLayer",
71
+ // x/y is deprecated since 0.15 and replace by offsetx/y
72
+ +data.offsetx || +data.x || 0,
73
+ +data.offsety || +data.y || 0,
74
+ Object.assign({
75
+ name: data.name,
76
+ image: data.image,
77
+ ratio : pool.pull("Vector2d", +data.parallaxx || 1.0, +data.parallaxy || 1.0),
78
+ // convert to melonJS color format (note: this should be done earlier when parsing data)
79
+ tint : typeof (data.tintcolor) !== "undefined" ? (pool.pull("Color")).parseHex(data.tintcolor, true) : undefined,
80
+ z: z
81
+ }, data.properties)
82
+ );
83
+
84
+
85
+ // set some additional flags
86
+ var visible = typeof(data.visible) !== "undefined" ? data.visible : true;
87
+ imageLayer.setOpacity(visible ? +data.opacity : 0);
88
+
89
+ return imageLayer;
90
+ }
91
+
92
+ /**
93
+ * read the tileset Data
94
+ * @ignore
95
+ */
96
+ function readTileset(data) {
97
+ return (new TMXTileset(data));
98
+ }
99
+
100
+ /**
101
+ * read the object group Data
102
+ * @ignore
103
+ */
104
+ function readObjectGroup(map, data, z) {
105
+ return (new TMXGroup(map, data, z));
106
+ }
107
+
108
+ /**
109
+ * @classdesc
110
+ * a TMX Tile Map Object
111
+ * Tiled QT +0.7.x format
112
+ */
113
+ class TMXTileMap {
114
+ /**
115
+ * @param {string} levelId - name of TMX map
116
+ * @param {object} data - TMX map in JSON format
117
+ * @example
118
+ * // create a new level object based on the TMX JSON object
119
+ * var level = new me.TMXTileMap(levelId, me.loader.getTMX(levelId));
120
+ * // add the level to the game world container
121
+ * level.addTo(me.game.world, true);
122
+ */
123
+ constructor(levelId, data) {
124
+
125
+ /**
126
+ * the level data (JSON)
127
+ * @ignore
128
+ */
129
+ this.data = data;
130
+
131
+ /**
132
+ * name of the tilemap
133
+ * @public
134
+ * @type {string}
135
+ * @name TMXTileMap#name
136
+ */
137
+ this.name = levelId;
138
+
139
+ /**
140
+ * width of the tilemap in tiles
141
+ * @public
142
+ * @type {number}
143
+ * @name TMXTileMap#cols
144
+ */
145
+ this.cols = +data.width;
146
+ /**
147
+ * height of the tilemap in tiles
148
+ * @public
149
+ * @type {number}
150
+ * @name TMXTileMap#rows
151
+ */
152
+ this.rows = +data.height;
153
+
154
+ /**
155
+ * Tile width
156
+ * @public
157
+ * @type {number}
158
+ * @name TMXTileMap#tilewidth
159
+ */
160
+ this.tilewidth = +data.tilewidth;
161
+
162
+ /**
163
+ * Tile height
164
+ * @public
165
+ * @type {number}
166
+ * @name TMXTileMap#tileheight
167
+ */
168
+ this.tileheight = +data.tileheight;
169
+
170
+ /**
171
+ * is the map an infinite map
172
+ * @public
173
+ * @type {number}
174
+ * @default 0
175
+ * @name TMXTileMap#infinite
176
+ */
177
+ this.infinite = +data.infinite;
178
+
179
+ /**
180
+ * the map orientation type. melonJS supports “orthogonal”, “isometric”, “staggered” and “hexagonal”.
181
+ * @public
182
+ * @type {string}
183
+ * @default "orthogonal"
184
+ * @name TMXTileMap#orientation
185
+ */
186
+ this.orientation = data.orientation;
187
+
188
+ /**
189
+ * the order in which tiles on orthogonal tile layers are rendered.
190
+ * (valid values are "left-down", "left-up", "right-down", "right-up")
191
+ * @public
192
+ * @type {string}
193
+ * @default "right-down"
194
+ * @name TMXTileMap#renderorder
195
+ */
196
+ this.renderorder = data.renderorder || "right-down";
197
+
198
+ /**
199
+ * the TMX format version
200
+ * @public
201
+ * @type {string}
202
+ * @name TMXTileMap#version
203
+ */
204
+ this.version = data.version;
205
+
206
+ /**
207
+ * The Tiled version used to save the file (since Tiled 1.0.1).
208
+ * @public
209
+ * @type {string}
210
+ * @name TMXTileMap#tiledversion
211
+ */
212
+ this.tiledversion = data.tiledversion;
213
+
214
+
215
+ /**
216
+ * The map class.
217
+ * @public
218
+ * @type {string}
219
+ * @name TMXTileMap#class
220
+ */
221
+ this.class = data.class;
222
+
223
+
224
+ // tilesets for this map
225
+ this.tilesets = null;
226
+
227
+ // layers
228
+ if (typeof this.layers === "undefined") {
229
+ this.layers = [];
230
+ }
231
+ // group objects
232
+ if (typeof this.objectGroups === "undefined") {
233
+ this.objectGroups = [];
234
+ }
235
+
236
+ // Check if map is from melon editor
237
+ this.isEditor = data.editor === "melon-editor";
238
+
239
+
240
+ // object id
241
+ this.nextobjectid = +data.nextobjectid || undefined;
242
+
243
+ // hex/iso properties
244
+ this.hexsidelength = +data.hexsidelength;
245
+ this.staggeraxis = data.staggeraxis;
246
+ this.staggerindex = data.staggerindex;
247
+
248
+ // calculate the map bounding rect
249
+ this.bounds = this.getRenderer().getBounds().clone();
250
+
251
+ // map "real" size
252
+ this.width = this.bounds.width;
253
+ this.height = this.bounds.height;
254
+
255
+ // background color
256
+ this.backgroundcolor = data.backgroundcolor;
257
+
258
+ // set additional map properties (if any)
259
+ applyTMXProperties(this, data);
260
+
261
+ // internal flag
262
+ this.initialized = false;
263
+
264
+ if (this.infinite === 1) {
265
+ // #956 Support for Infinite map
266
+ // see as well in me.TMXUtils
267
+ throw new Error("Tiled Infinite Map not supported!");
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Return the map default renderer
273
+ * @name getRenderer
274
+ * @memberof TMXTileMap
275
+ * @public
276
+ * @returns {TMXRenderer} a TMX renderer
277
+ */
278
+ getRenderer() {
279
+ if ((typeof(this.renderer) === "undefined") || (!this.renderer.canRender(this))) {
280
+ this.renderer = getNewDefaultRenderer(this);
281
+ }
282
+ return this.renderer;
283
+ }
284
+
285
+ /**
286
+ * return the map bounding rect
287
+ * @name TMXRenderer#getBounds
288
+ * @public
289
+ * @returns {Bounds}
290
+ */
291
+ getBounds() {
292
+ // calculated in the constructor
293
+ return this.bounds;
294
+ }
295
+
296
+ /**
297
+ * parse the map
298
+ * @ignore
299
+ */
300
+ readMapObjects(data) {
301
+
302
+ if (this.initialized === true) {
303
+ return;
304
+ }
305
+
306
+ // to automatically increment z index
307
+ var zOrder = 0;
308
+
309
+ // Tileset information
310
+ if (!this.tilesets) {
311
+ // make sure we have a TilesetGroup Object
312
+ this.tilesets = new TMXTilesetGroup();
313
+ }
314
+
315
+ // parse all tileset objects
316
+ if (typeof (data.tilesets) !== "undefined") {
317
+ var tilesets = data.tilesets;
318
+ tilesets.forEach((tileset) => {
319
+ // add the new tileset
320
+ this.tilesets.add(readTileset(tileset));
321
+ });
322
+ }
323
+
324
+ // check if a background image is defined
325
+ if (this.background_image) {
326
+ // add a new image layer
327
+ this.layers.push(
328
+ pool.pull("ImageLayer",
329
+ 0, 0, {
330
+ name : "background_image",
331
+ image : this.background_image,
332
+ z : zOrder++
333
+ }
334
+ ));
335
+ }
336
+
337
+ data.layers.forEach((layer) => {
338
+ switch (layer.type) {
339
+ case "imagelayer":
340
+ this.layers.push(readImageLayer(this, layer, zOrder++));
341
+ break;
342
+
343
+ case "tilelayer":
344
+ this.layers.push(readLayer(this, layer, zOrder++));
345
+ break;
346
+
347
+ // get the object groups information
348
+ case "objectgroup":
349
+ this.objectGroups.push(readObjectGroup(this, layer, zOrder++));
350
+ break;
351
+
352
+ // get the object groups information
353
+ case "group":
354
+ this.objectGroups.push(readObjectGroup(this, layer, zOrder++));
355
+ break;
356
+ }
357
+ });
358
+
359
+ this.initialized = true;
360
+ }
361
+
362
+
363
+ /**
364
+ * add all the map layers and objects to the given container.
365
+ * note : this will not automatically update the camera viewport
366
+ * @name TMXTileMap#addTo
367
+ * @public
368
+ * @param {Container} container - target container
369
+ * @param {boolean} [flatten=true] - if true, flatten all objects into the given container, else a `me.Container` object will be created for each corresponding groups
370
+ * @param {boolean} [setViewportBounds=false] - if true, set the viewport bounds to the map size, this should be set to true especially if adding a level to the game world container.
371
+ * @example
372
+ * // create a new level object based on the TMX JSON object
373
+ * var level = new me.TMXTileMap(levelId, me.loader.getTMX(levelId));
374
+ * // add the level to the game world container
375
+ * level.addTo(me.game.world, true, true);
376
+ */
377
+ addTo(container, flatten, setViewportBounds) {
378
+ var _sort = container.autoSort;
379
+ var _depth = container.autoDepth;
380
+
381
+ var levelBounds = this.getBounds();
382
+
383
+ // disable auto-sort and auto-depth
384
+ container.autoSort = false;
385
+ container.autoDepth = false;
386
+
387
+ if (this.backgroundcolor) {
388
+ container.backgroundColor.parseCSS(this.backgroundcolor);
389
+ }
390
+
391
+ // add all layers instances
392
+ this.getLayers().forEach((layer) => {
393
+ container.addChild(layer);
394
+ });
395
+
396
+ // add all Object instances
397
+ this.getObjects(flatten).forEach((object) => {
398
+ container.addChild(object);
399
+ });
400
+
401
+ // resize the container accordingly
402
+ container.resize(this.bounds.width, this.bounds.height);
403
+
404
+ // sort everything (recursively)
405
+ container.sort(true);
406
+
407
+ /**
408
+ * callback funtion for the viewport resize event
409
+ * @ignore
410
+ */
411
+ function _setBounds(width, height) {
412
+ // adjust the viewport bounds if level is smaller
413
+ game.viewport.setBounds(
414
+ 0, 0,
415
+ Math.max(levelBounds.width, width),
416
+ Math.max(levelBounds.height, height)
417
+ );
418
+ // center the map if smaller than the current viewport
419
+ container.pos.set(
420
+ Math.max(0, ~~((width - levelBounds.width) / 2)),
421
+ Math.max(0, ~~((height - levelBounds.height) / 2)),
422
+ // don't change the container z position if defined
423
+ container.pos.z
424
+ );
425
+ }
426
+
427
+ if (setViewportBounds === true) {
428
+ off(VIEWPORT_ONRESIZE, _setBounds);
429
+ // force viewport bounds update
430
+ _setBounds(game.viewport.width, game.viewport.height);
431
+ // Replace the resize handler
432
+ on(VIEWPORT_ONRESIZE, _setBounds, this);
433
+ }
434
+
435
+ // set back auto-sort and auto-depth
436
+ container.autoSort = _sort;
437
+ container.autoDepth = _depth;
438
+ }
439
+
440
+ /**
441
+ * return an Array of instantiated objects, based on the map object definition
442
+ * @name TMXTileMap#getObjects
443
+ * @public
444
+ * @param {boolean} [flatten=true] - if true, flatten all objects into the returned array.
445
+ * when false, a `me.Container` object will be created for each corresponding groups
446
+ * @returns {Renderable[]} Array of Objects
447
+ */
448
+ getObjects(flatten) {
449
+ var objects = [];
450
+ var isCollisionGroup = false;
451
+ var targetContainer;
452
+
453
+ // parse the map for objects
454
+ this.readMapObjects(this.data);
455
+
456
+ for (var g = 0; g < this.objectGroups.length; g++) {
457
+ var group = this.objectGroups[g];
458
+
459
+ // check if this is the collision shape group
460
+ isCollisionGroup = group.name.toLowerCase().includes(COLLISION_GROUP);
461
+
462
+ if (flatten === false) {
463
+ // create a new container
464
+ targetContainer = new Container(0, 0, this.width, this.height);
465
+
466
+ // tiled uses 0,0 by default
467
+ targetContainer.anchorPoint.set(0, 0);
468
+
469
+ // set additional properties
470
+ targetContainer.name = group.name;
471
+ targetContainer.pos.z = group.z;
472
+ targetContainer.setOpacity(group.opacity);
473
+
474
+ // disable auto-sort and auto-depth
475
+ targetContainer.autoSort = false;
476
+ targetContainer.autoDepth = false;
477
+ }
478
+
479
+ // iterate through the group and add all object into their
480
+ // corresponding target Container
481
+ for (var o = 0; o < group.objects.length; o++) {
482
+ // TMX object settings
483
+ var settings = group.objects[o];
484
+ // reference to the instantiated object
485
+ var obj;
486
+ // a reference to the default shape
487
+ var shape;
488
+
489
+ // Tiled uses 0,0 by default
490
+ if (typeof (settings.anchorPoint) === "undefined") {
491
+ settings.anchorPoint = {x : 0, y : 0};
492
+ }
493
+ // convert to melonJS renderable argument name
494
+ if (typeof (settings.tintcolor) !== "undefined") {
495
+ settings.tint = pool.pull("Color");
496
+ settings.tint.parseHex(settings.tintcolor, true);
497
+ }
498
+
499
+ /// XXX Clean/rewrite all this part to remove object
500
+ /// specific instantiation logic/details from here
501
+
502
+ // groups can contains either text, objects or layers
503
+ if (settings instanceof TMXLayer) {
504
+ // layers are already instantiated & initialized
505
+ obj = settings;
506
+ // z value set already
507
+ } else if (typeof settings.text === "object") {
508
+ // Tiled uses 0,0 by default
509
+ if (typeof (settings.text.anchorPoint) === "undefined") {
510
+ settings.text.anchorPoint = settings.anchorPoint;
511
+ }
512
+ if (settings.text.bitmap === true) {
513
+ obj = pool.pull("BitmapText", settings.x, settings.y, settings.text);
514
+ } else {
515
+ obj = pool.pull("Text", settings.x, settings.y, settings.text);
516
+ }
517
+ // set the obj z order
518
+ obj.pos.z = settings.z;
519
+ } else if (typeof settings.tile === "object") {
520
+ // create a default shape if none is specified
521
+ shape = settings.shapes;
522
+ if (typeof shape === "undefined") {
523
+ shape = pool.pull("Polygon", 0, 0, [
524
+ pool.pull("Vector2d", 0, 0),
525
+ pool.pull("Vector2d", this.width, 0),
526
+ pool.pull("Vector2d", this.width, this.height)
527
+ ]);
528
+ }
529
+ // check if a me.Tile object is embedded
530
+ obj = settings.tile.getRenderable(settings);
531
+ obj.body = new Body(obj, shape);
532
+ obj.body.setStatic(true);
533
+ // set the obj z order
534
+ obj.pos.setMuted(settings.x, settings.y, settings.z);
535
+ } else {
536
+ // pull the corresponding object from the object pool
537
+ if (typeof settings.name !== "undefined" && settings.name !== "") {
538
+ obj = pool.pull(
539
+ settings.name,
540
+ settings.x, settings.y,
541
+ settings
542
+ );
543
+ } else {
544
+ // unnamed shape object
545
+ obj = pool.pull(
546
+ "Renderable",
547
+ settings.x, settings.y,
548
+ settings.width, settings.height
549
+ );
550
+ // create a default shape if none is specified
551
+ shape = settings.shapes;
552
+ if (typeof shape === "undefined") {
553
+ shape = pool.pull("Polygon", 0, 0, [
554
+ pool.pull("Vector2d", 0, 0),
555
+ pool.pull("Vector2d", this.width, 0),
556
+ pool.pull("Vector2d", this.width, this.height)
557
+ ]);
558
+ }
559
+ obj.anchorPoint.set(0, 0);
560
+ obj.name = settings.name;
561
+ obj.type = settings.type;
562
+ // for backward compatibility
563
+ obj.class = settings.class || settings.type;
564
+ obj.id = settings.id;
565
+ obj.body = new Body(obj, shape);
566
+ obj.body.setStatic(true);
567
+ obj.resize(obj.body.getBounds().width, obj.body.getBounds().height);
568
+ }
569
+ // set the obj z order
570
+ obj.pos.z = settings.z;
571
+ }
572
+
573
+ if (isCollisionGroup && !settings.name && obj.body) {
574
+ // configure the body accordingly
575
+ obj.body.collisionType = collision.types.WORLD_SHAPE;
576
+ // mark collision shapes as static
577
+ obj.body.isStatic = true;
578
+ }
579
+
580
+ //apply group opacity value to the child objects if group are merged
581
+ if (flatten !== false) {
582
+ if (obj.isRenderable === true) {
583
+ obj.setOpacity(obj.getOpacity() * group.opacity);
584
+ // and to child renderables if any
585
+ if (obj.renderable instanceof Renderable) {
586
+ obj.renderable.setOpacity(obj.renderable.getOpacity() * group.opacity);
587
+ }
588
+ }
589
+ // directly add the obj into the objects array
590
+ objects.push(obj);
591
+ } else /* false*/ {
592
+ // add it to the new container
593
+ targetContainer.addChild(obj);
594
+ }
595
+
596
+ }
597
+
598
+ // if we created a new container
599
+ if ((flatten === false) && (targetContainer.children.length > 0)) {
600
+
601
+ // re-enable auto-sort and auto-depth
602
+ targetContainer.autoSort = true;
603
+ targetContainer.autoDepth = true;
604
+
605
+ // add our container to the world
606
+ objects.push(targetContainer);
607
+ }
608
+ }
609
+ return objects;
610
+ }
611
+
612
+ /**
613
+ * return all the existing layers
614
+ * @name TMXTileMap#getLayers
615
+ * @public
616
+ * @returns {TMXLayer[]} Array of Layers
617
+ */
618
+ getLayers() {
619
+ // parse the map for objects
620
+ this.readMapObjects(this.data);
621
+ return this.layers;
622
+ }
623
+
624
+ /**
625
+ * destroy function, clean all allocated objects
626
+ * @name TMXTileMap#destroy
627
+ * @public
628
+ */
629
+ destroy() {
630
+ this.tilesets = undefined;
631
+ this.layers.length = 0;
632
+ this.objectGroups.length = 0;
633
+ this.initialized = false;
634
+ }
635
+ }
636
+
637
+ var TMXTileMap$1 = TMXTileMap;
638
+
639
+ export { TMXTileMap$1 as default };