melonjs 14.0.2 → 14.1.1

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 (219) 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 +238 -0
  11. package/dist/melonjs.mjs/audio/audio.js +536 -0
  12. package/dist/melonjs.mjs/camera/camera2d.js +731 -0
  13. package/dist/melonjs.mjs/entity/entity.js +247 -0
  14. package/dist/melonjs.mjs/game.js +29 -0
  15. package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
  16. package/dist/melonjs.mjs/geometries/line.js +115 -0
  17. package/dist/melonjs.mjs/geometries/path2d.js +318 -0
  18. package/dist/melonjs.mjs/geometries/point.js +88 -0
  19. package/dist/melonjs.mjs/geometries/poly.js +498 -0
  20. package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
  21. package/dist/melonjs.mjs/geometries/roundrect.js +167 -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 +446 -0
  32. package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
  33. package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
  34. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
  35. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
  36. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
  37. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
  38. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
  39. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -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 +616 -0
  47. package/dist/melonjs.mjs/math/math.js +218 -0
  48. package/dist/melonjs.mjs/math/matrix2.js +501 -0
  49. package/dist/melonjs.mjs/math/matrix3.js +679 -0
  50. package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
  51. package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
  52. package/dist/melonjs.mjs/math/vector2.js +526 -0
  53. package/dist/melonjs.mjs/math/vector3.js +567 -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 +265 -0
  62. package/dist/melonjs.mjs/particles/particle.js +186 -0
  63. package/dist/melonjs.mjs/particles/settings.js +319 -0
  64. package/dist/melonjs.mjs/physics/body.js +702 -0
  65. package/dist/melonjs.mjs/physics/bounds.js +459 -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 +394 -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 +219 -0
  72. package/dist/melonjs.mjs/plugin/plugin.js +141 -0
  73. package/dist/melonjs.mjs/renderable/collectable.js +60 -0
  74. package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
  75. package/dist/melonjs.mjs/renderable/container.js +1016 -0
  76. package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
  77. package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
  78. package/dist/melonjs.mjs/renderable/light2d.js +155 -0
  79. package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
  80. package/dist/melonjs.mjs/renderable/renderable.js +781 -0
  81. package/dist/melonjs.mjs/renderable/sprite.js +653 -0
  82. package/dist/melonjs.mjs/renderable/trigger.js +156 -0
  83. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
  84. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
  85. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
  86. package/dist/melonjs.mjs/state/stage.js +236 -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 +363 -0
  96. package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
  97. package/dist/melonjs.mjs/text/glyph.js +65 -0
  98. package/dist/melonjs.mjs/text/text.js +452 -0
  99. package/dist/melonjs.mjs/text/textmetrics.js +175 -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 +479 -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 +806 -0
  111. package/dist/melonjs.mjs/video/renderer.js +410 -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 +142 -0
  117. package/dist/melonjs.mjs/video/webgl/glshader.js +167 -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 +494 -0
  128. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
  129. package/dist/melonjs.module.d.ts +1298 -1359
  130. package/dist/melonjs.module.js +2072 -3520
  131. package/package.json +21 -16
  132. package/src/application/application.js +4 -5
  133. package/src/audio/audio.js +32 -32
  134. package/src/camera/camera2d.js +32 -33
  135. package/src/entity/entity.js +18 -19
  136. package/src/geometries/ellipse.js +17 -18
  137. package/src/geometries/line.js +6 -7
  138. package/src/geometries/path2d.js +33 -34
  139. package/src/geometries/point.js +1 -2
  140. package/src/geometries/poly.js +16 -18
  141. package/src/geometries/rectangle.js +19 -20
  142. package/src/geometries/roundrect.js +9 -10
  143. package/src/input/gamepad.js +15 -15
  144. package/src/input/keyboard.js +12 -12
  145. package/src/input/pointer.js +6 -6
  146. package/src/input/pointerevent.js +12 -12
  147. package/src/lang/deprecated.js +12 -12
  148. package/src/level/level.js +25 -25
  149. package/src/level/tiled/TMXLayer.js +23 -24
  150. package/src/level/tiled/TMXTile.js +6 -7
  151. package/src/level/tiled/TMXTileMap.js +8 -10
  152. package/src/level/tiled/TMXTileset.js +3 -4
  153. package/src/level/tiled/TMXTilesetGroup.js +1 -2
  154. package/src/level/tiled/TMXUtils.js +5 -5
  155. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
  156. package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
  157. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
  158. package/src/level/tiled/renderer/TMXRenderer.js +20 -21
  159. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
  160. package/src/loader/loader.js +20 -20
  161. package/src/math/color.js +21 -22
  162. package/src/math/math.js +16 -16
  163. package/src/math/matrix2.js +17 -18
  164. package/src/math/matrix3.js +26 -27
  165. package/src/math/observable_vector2.js +15 -16
  166. package/src/math/observable_vector3.js +17 -18
  167. package/src/math/vector2.js +10 -11
  168. package/src/math/vector3.js +11 -12
  169. package/src/particles/emitter.js +7 -8
  170. package/src/particles/particle.js +3 -4
  171. package/src/physics/body.js +29 -30
  172. package/src/physics/bounds.js +10 -10
  173. package/src/physics/collision.js +2 -2
  174. package/src/physics/detector.js +6 -6
  175. package/src/physics/quadtree.js +18 -23
  176. package/src/physics/sat.js +31 -31
  177. package/src/physics/world.js +6 -7
  178. package/src/plugin/plugin.js +5 -5
  179. package/src/renderable/collectable.js +4 -6
  180. package/src/renderable/colorlayer.js +6 -8
  181. package/src/renderable/container.js +25 -27
  182. package/src/renderable/dragndrop.js +14 -14
  183. package/src/renderable/imagelayer.js +14 -15
  184. package/src/renderable/light2d.js +4 -5
  185. package/src/renderable/nineslicesprite.js +17 -18
  186. package/src/renderable/renderable.js +26 -28
  187. package/src/renderable/sprite.js +29 -30
  188. package/src/renderable/trigger.js +16 -17
  189. package/src/renderable/ui/uibaseelement.js +8 -9
  190. package/src/renderable/ui/uispriteelement.js +8 -8
  191. package/src/renderable/ui/uitextbutton.js +15 -15
  192. package/src/state/stage.js +8 -9
  193. package/src/state/state.js +17 -17
  194. package/src/system/device.js +11 -11
  195. package/src/system/event.js +10 -10
  196. package/src/system/pooling.js +9 -9
  197. package/src/system/save.js +2 -2
  198. package/src/system/timer.js +10 -10
  199. package/src/text/bitmaptext.js +19 -20
  200. package/src/text/bitmaptextdata.js +3 -4
  201. package/src/text/glyph.js +1 -2
  202. package/src/text/text.js +24 -25
  203. package/src/text/textmetrics.js +9 -10
  204. package/src/tweens/tween.js +20 -21
  205. package/src/utils/agent.js +5 -5
  206. package/src/utils/array.js +4 -4
  207. package/src/utils/file.js +2 -2
  208. package/src/utils/function.js +6 -6
  209. package/src/utils/string.js +5 -5
  210. package/src/utils/utils.js +4 -4
  211. package/src/video/canvas/canvas_renderer.js +72 -73
  212. package/src/video/renderer.js +27 -28
  213. package/src/video/texture/atlas.js +22 -22
  214. package/src/video/texture/canvas_texture.js +9 -9
  215. package/src/video/video.js +17 -17
  216. package/src/video/webgl/buffer/vertex.js +1 -2
  217. package/src/video/webgl/glshader.js +12 -12
  218. package/src/video/webgl/webgl_compositor.js +42 -43
  219. package/src/video/webgl/webgl_renderer.js +76 -77
@@ -0,0 +1,309 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
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 Vector2d from '../../math/vector2.js';
9
+ import { renderer } from '../../video/video.js';
10
+ import { getExtension, getBasename } from '../../utils/file.js';
11
+ import timer from '../../system/timer.js';
12
+ import loader from '../../loader/loader.js';
13
+
14
+ /**
15
+ * @classdesc
16
+ * a TMX Tile Set Object
17
+ */
18
+ class TMXTileset {
19
+ /**
20
+ * @param {object} tileset - tileset data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#tileset})
21
+ */
22
+ constructor(tileset) {
23
+ var i = 0;
24
+ // first gid
25
+
26
+ // tile properties (collidable, etc..)
27
+ this.TileProperties = [];
28
+
29
+ // hold reference to each tile image
30
+ this.imageCollection = [];
31
+
32
+ this.firstgid = this.lastgid = +tileset.firstgid;
33
+
34
+ // check if an external tileset is defined
35
+ if (typeof(tileset.source) !== "undefined") {
36
+ var src = tileset.source;
37
+ var ext = getExtension(src);
38
+ if (ext === "tsx" || ext === "json") {
39
+ // load the external tileset (TSX/JSON)
40
+ tileset = loader.getTMX(getBasename(src));
41
+ if (!tileset) {
42
+ throw new Error(src + " external TSX/JSON tileset not found");
43
+ }
44
+ }
45
+ }
46
+
47
+ this.name = tileset.name;
48
+ this.tilewidth = +tileset.tilewidth;
49
+ this.tileheight = +tileset.tileheight;
50
+ this.spacing = +tileset.spacing || 0;
51
+ this.margin = +tileset.margin || 0;
52
+
53
+ // set tile offset properties (if any)
54
+ this.tileoffset = new Vector2d();
55
+
56
+ /**
57
+ * Tileset contains animated tiles
58
+ * @public
59
+ * @type {boolean}
60
+ * @name TMXTileset#isAnimated
61
+ */
62
+ this.isAnimated = false;
63
+
64
+ /**
65
+ * true if the tileset is a "Collection of Image" Tileset
66
+ * @public
67
+ * @type {boolean}
68
+ * @name TMXTileset#isCollection
69
+ */
70
+ this.isCollection = false;
71
+
72
+ /**
73
+ * the tileset class
74
+ * @public
75
+ * @type {boolean}
76
+ * @name TMXTileset#class
77
+ */
78
+ this.class = tileset.class;
79
+
80
+ /**
81
+ * Tileset animations
82
+ * @private
83
+ */
84
+ this.animations = new Map();
85
+
86
+ /**
87
+ * Remember the last update timestamp to prevent too many animation updates
88
+ * @private
89
+ */
90
+ this._lastUpdate = 0;
91
+
92
+ var tiles = tileset.tiles;
93
+ for (i in tiles) {
94
+ if (tiles.hasOwnProperty(i)) {
95
+ if ("animation" in tiles[i]) {
96
+ this.isAnimated = true;
97
+ this.animations.set(tiles[+i].animation[0].tileid, {
98
+ dt : 0,
99
+ idx : 0,
100
+ frames : tiles[+i].animation,
101
+ cur : tiles[+i].animation[0]
102
+ });
103
+ }
104
+ // set tile properties, if any
105
+ if ("properties" in tiles[i]) {
106
+ if (Array.isArray(tiles[i].properties)) { // JSON (new format)
107
+ var tileProperty = {};
108
+ for (var j in tiles[i].properties) {
109
+ tileProperty[tiles[i].properties[j].name] = tiles[i].properties[j].value;
110
+ }
111
+ this.setTileProperty(+tiles[i].id + this.firstgid, tileProperty);
112
+ } else { // XML format
113
+ this.setTileProperty(+i + this.firstgid, tiles[i].properties);
114
+ }
115
+ }
116
+ if ("image" in tiles[i]) {
117
+ var image = loader.getImage(tiles[i].image);
118
+ if (!image) {
119
+ throw new Error("melonJS: '" + tiles[i].image + "' file for tile '" + (+i + this.firstgid) + "' not found!");
120
+ }
121
+ this.imageCollection[+i + this.firstgid] = image;
122
+ }
123
+ }
124
+ }
125
+
126
+ this.isCollection = this.imageCollection.length > 0;
127
+
128
+ var offset = tileset.tileoffset;
129
+ if (offset) {
130
+ this.tileoffset.x = +offset.x;
131
+ this.tileoffset.y = +offset.y;
132
+ }
133
+
134
+ // set tile properties, if any (JSON old format)
135
+ var tileInfo = tileset.tileproperties;
136
+ if (tileInfo) {
137
+ for (i in tileInfo) {
138
+ if (tileInfo.hasOwnProperty(i)) {
139
+ this.setTileProperty(+i + this.firstgid, tileInfo[i]);
140
+ }
141
+ }
142
+ }
143
+
144
+ // if not a tile image collection
145
+ if (this.isCollection === false) {
146
+
147
+ // get the global tileset texture
148
+ this.image = loader.getImage(tileset.image);
149
+
150
+ if (!this.image) {
151
+ throw new Error("melonJS: '" + tileset.image + "' file for tileset '" + this.name + "' not found!");
152
+ }
153
+
154
+ // create a texture atlas for the given tileset
155
+ this.texture = renderer.cache.get(this.image, {
156
+ framewidth : this.tilewidth,
157
+ frameheight : this.tileheight,
158
+ margin : this.margin,
159
+ spacing : this.spacing
160
+ });
161
+ this.atlas = this.texture.getAtlas();
162
+
163
+ // calculate the number of tiles per horizontal line
164
+ var hTileCount = +tileset.columns || Math.round(this.image.width / (this.tilewidth + this.spacing));
165
+ var vTileCount = Math.round(this.image.height / (this.tileheight + this.spacing));
166
+ if (tileset.tilecount % hTileCount > 0) {
167
+ ++vTileCount;
168
+ }
169
+ // compute the last gid value in the tileset
170
+ this.lastgid = this.firstgid + (((hTileCount * vTileCount) - 1) || 0);
171
+ if (tileset.tilecount && this.lastgid - this.firstgid + 1 !== +tileset.tilecount) {
172
+ console.warn(
173
+ "Computed tilecount (" + (this.lastgid - this.firstgid + 1) +
174
+ ") does not match expected tilecount (" + tileset.tilecount + ")"
175
+ );
176
+ }
177
+ }
178
+ }
179
+
180
+ /**
181
+ * return the tile image from a "Collection of Image" tileset
182
+ * @name TMXTileset#getTileImage
183
+ * @public
184
+ * @param {number} gid
185
+ * @returns {Image} corresponding image or undefined
186
+ */
187
+ getTileImage(gid) {
188
+ return this.imageCollection[gid];
189
+ }
190
+
191
+
192
+ /**
193
+ * set the tile properties
194
+ * @ignore
195
+ */
196
+ setTileProperty(gid, prop) {
197
+ // set the given tile id
198
+ this.TileProperties[gid] = prop;
199
+ }
200
+
201
+ /**
202
+ * return true if the gid belongs to the tileset
203
+ * @name TMXTileset#contains
204
+ * @public
205
+ * @param {number} gid
206
+ * @returns {boolean}
207
+ */
208
+ contains(gid) {
209
+ return gid >= this.firstgid && gid <= this.lastgid;
210
+ }
211
+
212
+ /**
213
+ * Get the view (local) tile ID from a GID, with animations applied
214
+ * @name TMXTileset#getViewTileId
215
+ * @public
216
+ * @param {number} gid - Global tile ID
217
+ * @returns {number} View tile ID
218
+ */
219
+ getViewTileId(gid) {
220
+ var localId = gid - this.firstgid;
221
+
222
+ if (this.animations.has(localId)) {
223
+ // return the current corresponding tile id if animated
224
+ return this.animations.get(localId).cur.tileid;
225
+ }
226
+
227
+ return localId;
228
+ }
229
+
230
+ /**
231
+ * return the properties of the specified tile
232
+ * @name TMXTileset#getTileProperties
233
+ * @public
234
+ * @param {number} tileId
235
+ * @returns {object}
236
+ */
237
+ getTileProperties(tileId) {
238
+ return this.TileProperties[tileId];
239
+ }
240
+
241
+ // update tile animations
242
+ update(dt) {
243
+ var duration = 0,
244
+ now = timer.getTime(),
245
+ result = false;
246
+
247
+ if (this._lastUpdate !== now) {
248
+ this._lastUpdate = now;
249
+
250
+ this.animations.forEach((anim) => {
251
+ anim.dt += dt;
252
+ duration = anim.cur.duration;
253
+ while (anim.dt >= duration) {
254
+ anim.dt -= duration;
255
+ anim.idx = (anim.idx + 1) % anim.frames.length;
256
+ anim.cur = anim.frames[anim.idx];
257
+ duration = anim.cur.duration;
258
+ result = true;
259
+ }
260
+ });
261
+ }
262
+
263
+ return result;
264
+ }
265
+
266
+ // draw the x,y tile
267
+ drawTile(renderer, dx, dy, tmxTile) {
268
+
269
+ // check if any transformation is required
270
+ if (tmxTile.flipped) {
271
+ renderer.save();
272
+ // apply the tile current transform
273
+ renderer.translate(dx, dy);
274
+ renderer.transform(tmxTile.currentTransform);
275
+ // reset both values as managed through transform();
276
+ dx = dy = 0;
277
+ }
278
+
279
+ // check if the tile has an associated image
280
+ if (this.isCollection === true) {
281
+ // draw the tile
282
+ renderer.drawImage(
283
+ this.imageCollection[tmxTile.tileId],
284
+ 0, 0,
285
+ tmxTile.width, tmxTile.height,
286
+ dx, dy,
287
+ tmxTile.width, tmxTile.height
288
+ );
289
+ } else {
290
+ // use the tileset texture
291
+ var offset = this.atlas[this.getViewTileId(tmxTile.tileId)].offset;
292
+ // draw the tile
293
+ renderer.drawImage(
294
+ this.image,
295
+ offset.x, offset.y,
296
+ this.tilewidth, this.tileheight,
297
+ dx, dy,
298
+ this.tilewidth + renderer.uvOffset, this.tileheight + renderer.uvOffset
299
+ );
300
+ }
301
+
302
+ if (tmxTile.flipped) {
303
+ // restore the context to the previous state
304
+ renderer.restore();
305
+ }
306
+ }
307
+ }
308
+
309
+ export { TMXTileset as default };
@@ -0,0 +1,81 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.1
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
+ // bitmask constants to check for flipped & rotated tiles
9
+ const TMX_CLEAR_BIT_MASK = ~(0x80000000 | 0x40000000 | 0x20000000);
10
+
11
+ /**
12
+ * @classdesc
13
+ * an object containing all tileset
14
+ */
15
+ class TMXTilesetGroup {
16
+
17
+ constructor() {
18
+ this.tilesets = [];
19
+ this.length = 0;
20
+ }
21
+
22
+ /**
23
+ * add a tileset to the tileset group
24
+ * @name TMXTilesetGroup#add
25
+ * @public
26
+ * @param {TMXTileset} tileset
27
+ */
28
+ add(tileset) {
29
+ this.tilesets.push(tileset);
30
+ this.length++;
31
+ }
32
+
33
+ /**
34
+ * return the tileset at the specified index
35
+ * @name TMXTilesetGroup#getTilesetByIndex
36
+ * @public
37
+ * @param {number} i
38
+ * @returns {TMXTileset} corresponding tileset
39
+ */
40
+ getTilesetByIndex(i) {
41
+ return this.tilesets[i];
42
+ }
43
+
44
+ /**
45
+ * return the tileset corresponding to the specified id <br>
46
+ * will throw an exception if no matching tileset is found
47
+ * @name TMXTilesetGroup#getTilesetByGid
48
+ * @public
49
+ * @param {number} gid
50
+ * @returns {TMXTileset} corresponding tileset
51
+ */
52
+ getTilesetByGid(gid) {
53
+ var invalidRange = -1;
54
+
55
+ // clear the gid of all flip/rotation flags
56
+ gid &= TMX_CLEAR_BIT_MASK;
57
+
58
+ // cycle through all tilesets
59
+ for (var i = 0, len = this.tilesets.length; i < len; i++) {
60
+ // return the corresponding tileset if matching
61
+ if (this.tilesets[i].contains(gid)) {
62
+ return this.tilesets[i];
63
+ }
64
+ // typically indicates a layer with no asset loaded (collision?)
65
+ if (this.tilesets[i].firstgid === this.tilesets[i].lastgid &&
66
+ gid >= this.tilesets[i].firstgid) {
67
+ // store the id if the [firstgid .. lastgid] is invalid
68
+ invalidRange = i;
69
+ }
70
+ }
71
+ // return the tileset with the invalid range
72
+ if (invalidRange !== -1) {
73
+ return this.tilesets[invalidRange];
74
+ }
75
+ else {
76
+ throw new Error("no matching tileset found for gid " + gid);
77
+ }
78
+ }
79
+ }
80
+
81
+ export { TMXTilesetGroup as default };