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,446 @@
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 { createCanvas } from '../../video/video.js';
9
+ import pool from '../../system/pooling.js';
10
+ import { applyTMXProperties, decode } from './TMXUtils.js';
11
+ import Tile from './TMXTile.js';
12
+ import Renderable from '../../renderable/renderable.js';
13
+ import CanvasRenderer from '../../video/canvas/canvas_renderer.js';
14
+ import game from '../../game.js';
15
+
16
+ /**
17
+ * Create required arrays for the given layer object
18
+ * @ignore
19
+ */
20
+ function initArray(layer) {
21
+ // initialize the array
22
+ layer.layerData = new Array(layer.cols);
23
+ for (var x = 0; x < layer.cols; x++) {
24
+ layer.layerData[x] = new Array(layer.rows);
25
+ for (var y = 0; y < layer.rows; y++) {
26
+ layer.layerData[x][y] = null;
27
+ }
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Set a tiled layer Data
33
+ * @ignore
34
+ */
35
+ function setLayerData(layer, data) {
36
+ var idx = 0;
37
+ // initialize the data array
38
+ initArray(layer);
39
+ // set everything
40
+ for (var y = 0; y < layer.rows; y++) {
41
+ for (var x = 0; x < layer.cols; x++) {
42
+ // get the value of the gid
43
+ var gid = data[idx++];
44
+ // fill the array
45
+ if (gid !== 0) {
46
+ // add a new tile to the layer
47
+ layer.layerData[x][y] = layer.getTileById(gid, x, y);
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ /**
54
+ * preRender a tile layer using the given renderer
55
+ * @ignore
56
+ */
57
+ function preRenderLayer(layer, renderer) {
58
+ // set everything
59
+ for (var y = 0; y < layer.rows; y++) {
60
+ for (var x = 0; x < layer.cols; x++) {
61
+ // get the value of the gid
62
+ var tile = layer.layerData[x][y];
63
+ // draw the tile if defined
64
+ if (tile instanceof Tile) {
65
+ // add a new tile to the layer
66
+ layer.getRenderer().drawTile(renderer, x, y, tile);
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ /**
73
+ * @classdesc
74
+ * a TMX Tile Layer Object
75
+ * Tiled QT 0.7.x format
76
+ * @augments Renderable
77
+ */
78
+ class TMXLayer extends Renderable {
79
+ /**
80
+ * @param {object} map - layer data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#layer})
81
+ * @param {object} data - layer data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#layer})
82
+ * @param {number} tilewidth - width of each tile in pixels
83
+ * @param {number} tileheight - height of each tile in pixels
84
+ * @param {string} orientation - "isometric" or "orthogonal"
85
+ * @param {TMXTilesetGroup} tilesets - tileset as defined in Tiled
86
+ * @param {number} z - z-index position
87
+ */
88
+ constructor(map, data, tilewidth, tileheight, orientation, tilesets, z) {
89
+ // super constructor
90
+ super(0, 0, 0, 0);
91
+
92
+ // tile width & height
93
+ this.tilewidth = data.tilewidth || tilewidth;
94
+ this.tileheight = data.tileheight || tileheight;
95
+
96
+ // layer orientation
97
+ this.orientation = orientation;
98
+
99
+ /**
100
+ * The Layer corresponding Tilesets
101
+ * @public
102
+ * @type {TMXTilesetGroup}
103
+ * @name TMXLayer#tilesets
104
+ */
105
+ this.tilesets = tilesets;
106
+
107
+ // the default tileset
108
+ // XXX: Is this even used?
109
+ this.tileset = (this.tilesets ? this.tilesets.getTilesetByIndex(0) : null);
110
+
111
+ // Biggest tile size to draw
112
+ this.maxTileSize = {
113
+ "width" : 0,
114
+ "height" : 0
115
+ };
116
+ for (var i = 0; i < this.tilesets.length; i++) {
117
+ var tileset = this.tilesets.getTilesetByIndex(i);
118
+ this.maxTileSize.width = Math.max(this.maxTileSize.width, tileset.tilewidth);
119
+ this.maxTileSize.height = Math.max(this.maxTileSize.height, tileset.tileheight);
120
+ }
121
+
122
+ /**
123
+ * All animated tilesets in this layer
124
+ * @ignore
125
+ * @type {TMXTileset[]}
126
+ * @name TMXLayer#animatedTilesets
127
+ */
128
+ this.animatedTilesets = [];
129
+
130
+ /**
131
+ * Layer contains tileset animations
132
+ * @public
133
+ * @type {boolean}
134
+ * @name TMXLayer#isAnimated
135
+ */
136
+ this.isAnimated = false;
137
+
138
+ /**
139
+ * the order in which tiles on orthogonal tile layers are rendered.
140
+ * (valid values are "left-down", "left-up", "right-down", "right-up")
141
+ * @public
142
+ * @type {string}
143
+ * @default "right-down"
144
+ * @name TMXLayer#renderorder
145
+ */
146
+ this.renderorder = data.renderorder || "right-down";
147
+
148
+ /**
149
+ * the layer class
150
+ * @public
151
+ * @type {string}
152
+ * @name class
153
+ * @name TMXLayer#class
154
+ */
155
+ this.class = data.class;
156
+
157
+ // for displaying order
158
+ this.pos.z = z;
159
+
160
+ // tiled default coordinates are top-left
161
+ this.anchorPoint.set(0, 0);
162
+
163
+ // additional TMX flags
164
+ this.name = data.name;
165
+ this.cols = +data.width;
166
+ this.rows = +data.height;
167
+
168
+ // layer opacity
169
+ var visible = typeof(data.visible) !== "undefined" ? +data.visible : 1;
170
+ this.setOpacity(visible ? +data.opacity : 0);
171
+
172
+ // layer tint
173
+ if (typeof data.tintcolor === "string") {
174
+ // Tiled provides #RRGGBB or #AARRGGBB
175
+ this.tint.parseHex(data.tintcolor, true);
176
+ }
177
+
178
+ // layer "real" size
179
+ if (this.orientation === "isometric") {
180
+ this.width = (this.cols + this.rows) * (this.tilewidth / 2);
181
+ this.height = (this.cols + this.rows) * (this.tileheight / 2);
182
+ } else {
183
+ this.width = this.cols * this.tilewidth;
184
+ this.height = this.rows * this.tileheight;
185
+ }
186
+
187
+ // check if we have any user-defined properties
188
+ applyTMXProperties(this, data);
189
+
190
+ // check for the correct rendering method
191
+ if (typeof (this.preRender) === "undefined") {
192
+ this.preRender = game.world.preRender;
193
+ }
194
+
195
+ // set a renderer
196
+ this.setRenderer(map.getRenderer());
197
+
198
+
199
+ // initialize and set the layer data
200
+ setLayerData(this,
201
+ decode(
202
+ data.data,
203
+ data.encoding,
204
+ data.compression
205
+ )
206
+ );
207
+ }
208
+
209
+
210
+ // called when the layer is added to the game world or a container
211
+ onActivateEvent() {
212
+
213
+ if (this.animatedTilesets === undefined) {
214
+ this.animatedTilesets = [];
215
+ }
216
+
217
+ if (this.tilesets) {
218
+ var tileset = this.tilesets.tilesets;
219
+ for (var i = 0; i < tileset.length; i++) {
220
+ if (tileset[i].isAnimated) {
221
+ this.animatedTilesets.push(tileset[i]);
222
+ }
223
+ }
224
+ }
225
+
226
+ this.isAnimated = this.animatedTilesets.length > 0;
227
+
228
+ // Force pre-render off when tileset animation is used
229
+ if (this.isAnimated) {
230
+ this.preRender = false;
231
+ }
232
+
233
+ // Resize the bounding rect
234
+ this.getBounds().addBounds(this.getRenderer().getBounds(), true);
235
+ this.getBounds().shift(this.pos);
236
+
237
+ // if pre-rendering method is use, create an offline canvas/renderer
238
+ if ((this.preRender === true) && (!this.canvasRenderer)) {
239
+ this.canvasRenderer = new CanvasRenderer({
240
+ canvas : createCanvas(this.width, this.height),
241
+ widht : this.width,
242
+ heigth : this.height,
243
+ transparent : true
244
+ });
245
+ preRenderLayer(this, this.canvasRenderer);
246
+ }
247
+ }
248
+
249
+ // called when the layer is removed from the game world or a container
250
+ onDeactivateEvent() {
251
+ // clear all allocated objects
252
+ //this.layerData = undefined;
253
+ this.animatedTilesets = undefined;
254
+ }
255
+
256
+ /**
257
+ * Set the TMX renderer for this layer object
258
+ * @name setRenderer
259
+ * @memberof TMXLayer
260
+ * @public
261
+ * @param {TMXRenderer} renderer
262
+ * @example
263
+ * // use the parent map default renderer
264
+ * var layer = new me.TMXLayer(...);
265
+ * layer.setRenderer(map.getRenderer());
266
+ */
267
+ setRenderer(renderer) {
268
+ this.renderer = renderer;
269
+ }
270
+
271
+ /**
272
+ * Return the layer current renderer object
273
+ * @name getRenderer
274
+ * @memberof TMXLayer
275
+ * @public
276
+ * @returns {TMXRenderer} renderer
277
+ */
278
+ getRenderer() {
279
+ return this.renderer;
280
+ }
281
+
282
+
283
+ /**
284
+ * Return the TileId of the Tile at the specified position
285
+ * @name getTileId
286
+ * @memberof TMXLayer
287
+ * @public
288
+ * @param {number} x - X coordinate (in world/pixels coordinates)
289
+ * @param {number} y - Y coordinate (in world/pixels coordinates)
290
+ * @returns {number} TileId or null if there is no Tile at the given position
291
+ */
292
+ getTileId(x, y) {
293
+ var tile = this.getTile(x, y);
294
+ return (tile ? tile.tileId : null);
295
+ }
296
+
297
+ /**
298
+ * Return the Tile object at the specified position
299
+ * @name getTile
300
+ * @memberof TMXLayer
301
+ * @public
302
+ * @param {number} x - X coordinate (in world/pixels coordinates)
303
+ * @param {number} y - Y coordinate (in world/pixels coordinates)
304
+ * @returns {Tile} corresponding tile or null if there is no defined tile at the coordinate or if outside of the layer bounds
305
+ * @example
306
+ * // get the TMX Map Layer called "Front layer"
307
+ * var layer = me.game.world.getChildByName("Front Layer")[0];
308
+ * // get the tile object corresponding to the latest pointer position
309
+ * var tile = layer.getTile(me.input.pointer.x, me.input.pointer.y);
310
+ */
311
+ getTile(x, y) {
312
+ var tile = null;
313
+
314
+ if (this.contains(x, y)) {
315
+ var coord = this.getRenderer().pixelToTileCoords(x, y, pool.pull("Vector2d"));
316
+ tile = this.cellAt(coord.x, coord.y);
317
+ pool.push(coord);
318
+ }
319
+ return tile;
320
+ }
321
+
322
+ /**
323
+ * assign the given Tile object to the specified position
324
+ * @name getTile
325
+ * @memberof TMXLayer
326
+ * @public
327
+ * @param {Tile} tile - the tile object to be assigned
328
+ * @param {number} x - x coordinate (in world/pixels coordinates)
329
+ * @param {number} y - y coordinate (in world/pixels coordinates)
330
+ * @returns {Tile} the tile object
331
+ */
332
+ setTile(tile, x, y) {
333
+ this.layerData[x][y] = tile;
334
+ return tile;
335
+ }
336
+
337
+ /**
338
+ * return a new the Tile object corresponding to the given tile id
339
+ * @name setTile
340
+ * @memberof TMXLayer
341
+ * @public
342
+ * @param {number} tileId - tileId
343
+ * @param {number} x - X coordinate (in world/pixels coordinates)
344
+ * @param {number} y - Y coordinate (in world/pixels coordinates)
345
+ * @returns {Tile} the tile object
346
+ */
347
+ getTileById(tileId, x, y) {
348
+ if (!this.tileset.contains(tileId)) {
349
+ // look for the corresponding tileset
350
+ this.tileset = this.tilesets.getTilesetByGid(tileId);
351
+ }
352
+ return new Tile(x, y, tileId, this.tileset);
353
+ }
354
+
355
+ /**
356
+ * Return the Tile object at the specified tile coordinates
357
+ * @name cellAt
358
+ * @memberof TMXLayer
359
+ * @public
360
+ * @param {number} x - x position of the tile (in Tile unit)
361
+ * @param {number} y - x position of the tile (in Tile unit)
362
+ * @param {number} [boundsCheck=true] - check first if within the layer bounds
363
+ * @returns {Tile} corresponding tile or null if there is no defined tile at the position or if outside of the layer bounds
364
+ * @example
365
+ * // return the first tile at offset 0, 0
366
+ * var tile = layer.cellAt(0, 0);
367
+ */
368
+ cellAt(x, y, boundsCheck) {
369
+ var _x = ~~x;
370
+ var _y = ~~y;
371
+
372
+ var renderer = this.getRenderer();
373
+ // boundsCheck only used internally by the tiled renderer, when the layer bound check was already done
374
+ if (boundsCheck === false || (_x >= 0 && _x < renderer.cols && _y >= 0 && _y < renderer.rows)) {
375
+ return this.layerData[_x][_y];
376
+ } else {
377
+ return null;
378
+ }
379
+ }
380
+
381
+ /**
382
+ * clear the tile at the specified position
383
+ * @name clearTile
384
+ * @memberof TMXLayer
385
+ * @public
386
+ * @param {number} x - X coordinate (in map coordinates: row/column)
387
+ * @param {number} y - Y coordinate (in map coordinates: row/column)
388
+ * @example
389
+ * me.game.world.getChildByType(me.TMXLayer).forEach(function(layer) {
390
+ * // clear all tiles at the given x,y coordinates
391
+ * layer.clearTile(x, y);
392
+ * });
393
+ */
394
+ clearTile(x, y) {
395
+ // clearing tile
396
+ this.layerData[x][y] = null;
397
+ // erase the corresponding area in the canvas
398
+ if (this.preRender) {
399
+ this.canvasRenderer.clearRect(x * this.tilewidth, y * this.tileheight, this.tilewidth, this.tileheight);
400
+ }
401
+ }
402
+
403
+ /**
404
+ * update animations in a tileset layer
405
+ * @ignore
406
+ */
407
+ update(dt) {
408
+ if (this.isAnimated) {
409
+ var result = false;
410
+ for (var i = 0; i < this.animatedTilesets.length; i++) {
411
+ result = this.animatedTilesets[i].update(dt) || result;
412
+ }
413
+ return result;
414
+ }
415
+
416
+ return false;
417
+ }
418
+
419
+ /**
420
+ * draw a tileset layer
421
+ * @ignore
422
+ */
423
+ draw(renderer, rect) {
424
+ // use the offscreen canvas
425
+ if (this.preRender) {
426
+ var width = Math.min(rect.width, this.width);
427
+ var height = Math.min(rect.height, this.height);
428
+
429
+ // draw using the cached canvas
430
+ renderer.drawImage(
431
+ this.canvasRenderer.getCanvas(),
432
+ rect.pos.x, rect.pos.y, // sx,sy
433
+ width, height, // sw,sh
434
+ rect.pos.x, rect.pos.y, // dx,dy
435
+ width, height // dw,dh
436
+ );
437
+ }
438
+ // dynamically render the layer
439
+ else {
440
+ // draw the layer
441
+ this.getRenderer().drawTileLayer(renderer, this, rect);
442
+ }
443
+ }
444
+ }
445
+
446
+ export { TMXLayer as default };