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,506 @@
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 Vector2d from '../../../math/vector2.js';
9
+ import pool from '../../../system/pooling.js';
10
+ import TMXRenderer from './TMXRenderer.js';
11
+ import TMXLayer from '../TMXLayer.js';
12
+
13
+ // scope global var & constants
14
+ const offsetsStaggerX = [
15
+ {x: 0, y: 0},
16
+ {x: + 1, y: - 1},
17
+ {x: + 1, y: 0},
18
+ {x: + 2, y: 0}
19
+ ];
20
+ const offsetsStaggerY = [
21
+ {x: 0, y: 0},
22
+ {x: - 1, y: + 1},
23
+ {x: 0, y: + 1},
24
+ {x: 0, y: + 2}
25
+ ];
26
+
27
+ /**
28
+ * @classdesc
29
+ * an Hexagonal Map Renderder
30
+ * @augments TMXRenderer
31
+ */
32
+ class TMXHexagonalRenderer extends TMXRenderer {
33
+ /**
34
+ * @param {TMXTileMap} map - the TMX map
35
+ */
36
+ constructor(map) {
37
+ super(
38
+ map.cols,
39
+ map.rows,
40
+ map.tilewidth & ~1,
41
+ map.tileheight & ~1
42
+ );
43
+
44
+ this.hexsidelength = map.hexsidelength || 0;
45
+ this.staggerX = map.staggeraxis === "x";
46
+ this.staggerEven = map.staggerindex === "even";
47
+
48
+ this.sidelengthx = 0;
49
+ this.sidelengthy = 0;
50
+
51
+ if (map.orientation === "hexagonal") {
52
+ if (this.staggerX) {
53
+ this.sidelengthx = this.hexsidelength;
54
+ }
55
+ else {
56
+ this.sidelengthy = this.hexsidelength;
57
+ }
58
+ }
59
+
60
+ this.sideoffsetx = (this.tilewidth - this.sidelengthx) / 2;
61
+ this.sideoffsety = (this.tileheight - this.sidelengthy) / 2;
62
+
63
+ this.columnwidth = this.sideoffsetx + this.sidelengthx;
64
+ this.rowheight = this.sideoffsety + this.sidelengthy;
65
+
66
+ this.centers = [
67
+ new Vector2d(),
68
+ new Vector2d(),
69
+ new Vector2d(),
70
+ new Vector2d()
71
+ ];
72
+ }
73
+
74
+ /**
75
+ * return true if the renderer can render the specified layer
76
+ * @ignore
77
+ */
78
+ canRender(layer) {
79
+ return (
80
+ (layer.orientation === "hexagonal") &&
81
+ super.canRender(layer)
82
+ );
83
+ }
84
+
85
+ /**
86
+ * return the bounding rect for this map renderer
87
+ * @name TMXHexagonalRenderer#getBounds
88
+ * @public
89
+ * @param {TMXLayer} [layer] - calculate the bounding rect for a specific layer (will return a new bounds object)
90
+ * @returns {Bounds}
91
+ */
92
+ getBounds(layer) {
93
+ var bounds = layer instanceof TMXLayer ? pool.pull("Bounds") : this.bounds;
94
+
95
+ // The map size is the same regardless of which indexes are shifted.
96
+ if (this.staggerX) {
97
+ bounds.setMinMax(
98
+ 0, 0,
99
+ this.cols * this.columnwidth + this.sideoffsetx,
100
+ this.rows * (this.tileheight + this.sidelengthy)
101
+ );
102
+ if (bounds.width > 1) {
103
+ bounds.height += this.rowheight;
104
+ }
105
+ } else {
106
+ bounds.setMinMax(
107
+ 0, 0,
108
+ this.cols * (this.tilewidth + this.sidelengthx),
109
+ this.rows * this.rowheight + this.sideoffsety
110
+ );
111
+ if (bounds.height > 1) {
112
+ bounds.width += this.columnwidth;
113
+ }
114
+ }
115
+ return bounds;
116
+ }
117
+
118
+ /**
119
+ * @ignore
120
+ */
121
+ doStaggerX (x) {
122
+ return this.staggerX && (x & 1) ^ this.staggerEven;
123
+ }
124
+
125
+ /**
126
+ * @ignore
127
+ */
128
+ doStaggerY(y) {
129
+ return !this.staggerX && (y & 1) ^ this.staggerEven;
130
+ }
131
+
132
+ /**
133
+ * @ignore
134
+ */
135
+ topLeft(x, y, v) {
136
+ var ret = v || new Vector2d();
137
+
138
+ if (!this.staggerX) {
139
+ if ((y & 1) ^ this.staggerEven) {
140
+ ret.set(x, y - 1);
141
+ }
142
+ else {
143
+ ret.set(x - 1, y - 1);
144
+ }
145
+ } else {
146
+ if ((x & 1) ^ this.staggerEven) {
147
+ ret.set(x - 1, y);
148
+ }
149
+ else {
150
+ ret.set(x - 1, y - 1);
151
+ }
152
+ }
153
+ return ret;
154
+ }
155
+
156
+ /**
157
+ * @ignore
158
+ */
159
+ topRight(x, y, v) {
160
+ var ret = v || new Vector2d();
161
+
162
+ if (!this.staggerX) {
163
+ if ((y & 1) ^ this.staggerEven) {
164
+ ret.set(x + 1, y - 1);
165
+ }
166
+ else {
167
+ ret.set(x, y - 1);
168
+ }
169
+ } else {
170
+ if ((x & 1) ^ this.staggerEven) {
171
+ ret.set(x + 1, y);
172
+ }
173
+ else {
174
+ ret.set(x + 1, y - 1);
175
+ }
176
+ }
177
+ return ret;
178
+ }
179
+
180
+
181
+ /**
182
+ * @ignore
183
+ */
184
+ bottomLeft(x, y, v) {
185
+ var ret = v || new Vector2d();
186
+
187
+ if (!this.staggerX) {
188
+ if ((y & 1) ^ this.staggerEven) {
189
+ ret.set(x, y + 1);
190
+ }
191
+ else {
192
+ ret.set(x - 1, y + 1);
193
+ }
194
+ } else {
195
+ if ((x & 1) ^ this.staggerEven) {
196
+ ret.set(x -1, y + 1);
197
+ }
198
+ else {
199
+ ret.set(x -1, y);
200
+ }
201
+ }
202
+ return ret;
203
+ }
204
+
205
+ /**
206
+ * @ignore
207
+ */
208
+ bottomRight(x, y, v) {
209
+ var ret = v || new Vector2d();
210
+
211
+ if (!this.staggerX) {
212
+ if ((y & 1) ^ this.staggerEven) {
213
+ ret.set(x + 1, y + 1);
214
+ }
215
+ else {
216
+ ret.set(x, y + 1);
217
+ }
218
+ } else {
219
+ if ((x & 1) ^ this.staggerEven) {
220
+ ret.set(x + 1, y + 1);
221
+ }
222
+ else {
223
+ ret.set(x + 1, y);
224
+ }
225
+ }
226
+ return ret;
227
+ }
228
+
229
+ /**
230
+ * return the tile position corresponding to the specified pixel
231
+ * @ignore
232
+ */
233
+ pixelToTileCoords(x, y, v) {
234
+ var ret = v || new Vector2d();
235
+
236
+ if (this.staggerX) { //flat top
237
+ x -= this.staggerEven ? this.tilewidth : this.sideoffsetx;
238
+ }
239
+ else { //pointy top
240
+ y -= this.staggerEven ? this.tileheight : this.sideoffsety;
241
+ }
242
+
243
+ // Start with the coordinates of a grid-aligned tile
244
+ var referencePoint = pool.pull("Vector2d",
245
+ Math.floor(x / (this.columnwidth * 2)),
246
+ Math.floor((y / (this.rowheight * 2)))
247
+ );
248
+
249
+ // Relative x and y position on the base square of the grid-aligned tile
250
+ var rel = pool.pull("Vector2d",
251
+ x - referencePoint.x * (this.columnwidth * 2),
252
+ y - referencePoint.y * (this.rowheight * 2)
253
+ );
254
+
255
+ // Adjust the reference point to the correct tile coordinates
256
+ if (this.staggerX) {
257
+ referencePoint.x = referencePoint.x * 2;
258
+ if (this.staggerEven) {
259
+ ++referencePoint.x;
260
+ }
261
+ }
262
+ else {
263
+ referencePoint.y = referencePoint.y * 2;
264
+ if (this.staggerEven) {
265
+ ++referencePoint.y;
266
+ }
267
+ }
268
+
269
+ // Determine the nearest hexagon tile by the distance to the center
270
+ var left, top, centerX, centerY;
271
+ if (this.staggerX) {
272
+ left = this.sidelengthx / 2;
273
+ centerX = left + this.columnwidth;
274
+ centerY = this.tileheight / 2;
275
+
276
+ this.centers[0].set(left, centerY);
277
+ this.centers[1].set(centerX, centerY - this.rowheight);
278
+ this.centers[2].set(centerX, centerY + this.rowheight);
279
+ this.centers[3].set(centerX + this.columnwidth, centerY);
280
+ }
281
+ else {
282
+ top = this.sidelengthy / 2;
283
+ centerX = this.tilewidth / 2;
284
+ centerY = top + this.rowheight;
285
+
286
+ this.centers[0].set(centerX, top);
287
+ this.centers[1].set(centerX - this.columnwidth, centerY);
288
+ this.centers[2].set(centerX + this.columnwidth, centerY);
289
+ this.centers[3].set(centerX, centerY + this.rowheight);
290
+ }
291
+
292
+ var nearest = 0;
293
+ var minDist = Number.MAX_VALUE;
294
+ for (var i = 0; i < 4; ++i) {
295
+ var dc = this.centers[i].sub(rel).length2();
296
+ if (dc < minDist) {
297
+ minDist = dc;
298
+ nearest = i;
299
+ }
300
+ }
301
+
302
+ var offsets = (this.staggerX) ? offsetsStaggerX : offsetsStaggerY;
303
+
304
+ ret.set(
305
+ referencePoint.x + offsets[nearest].x,
306
+ referencePoint.y + offsets[nearest].y
307
+ );
308
+
309
+ pool.push(referencePoint);
310
+ pool.push(rel);
311
+
312
+ return ret;
313
+ }
314
+
315
+ /**
316
+ * return the pixel position corresponding of the specified tile
317
+ * @ignore
318
+ */
319
+ tileToPixelCoords(x, y, v) {
320
+ var tileX = Math.floor(x),
321
+ tileY = Math.floor(y);
322
+ var ret = v || new Vector2d();
323
+
324
+ if (this.staggerX) {
325
+ ret.y = tileY * (this.tileheight + this.sidelengthy);
326
+ if (this.doStaggerX(tileX)) {
327
+ ret.y += this.rowheight;
328
+ }
329
+ ret.x = tileX * this.columnwidth;
330
+ } else {
331
+ ret.x = tileX * (this.tilewidth + this.sidelengthx);
332
+ if (this.doStaggerY(tileY)) {
333
+ ret.x += this.columnwidth;
334
+ }
335
+ ret.y = tileY * this.rowheight;
336
+ }
337
+
338
+ return ret;
339
+ }
340
+
341
+ /**
342
+ * fix the position of Objects to match
343
+ * the way Tiled places them
344
+ * @ignore
345
+ */
346
+ adjustPosition(obj) {
347
+ // only adjust position if obj.gid is defined
348
+ if (typeof(obj.gid) === "number") {
349
+ // Tiled objects origin point is "bottom-left" in Tiled,
350
+ // "top-left" in melonJS)
351
+ obj.y -= obj.height;
352
+ }
353
+ }
354
+
355
+ /**
356
+ * draw the tile map
357
+ * @ignore
358
+ */
359
+ drawTile(renderer, x, y, tmxTile) {
360
+ var tileset = tmxTile.tileset;
361
+ var point = this.tileToPixelCoords(x, y, pool.pull("Vector2d"));
362
+
363
+ // draw the tile
364
+ tileset.drawTile(
365
+ renderer,
366
+ tileset.tileoffset.x + point.x,
367
+ tileset.tileoffset.y + point.y + (this.tileheight - tileset.tileheight),
368
+ tmxTile
369
+ );
370
+
371
+ pool.push(point);
372
+ }
373
+
374
+ /**
375
+ * draw the tile map
376
+ * @ignore
377
+ */
378
+ drawTileLayer(renderer, layer, rect) {
379
+ var tile;
380
+
381
+ // get top-left and bottom-right tile position
382
+ var startTile = this.pixelToTileCoords(
383
+ rect.pos.x,
384
+ rect.pos.y,
385
+ pool.pull("Vector2d")
386
+ );
387
+
388
+ // Compensate for the layer position
389
+ startTile.sub(layer.pos);
390
+
391
+ // get top-left and bottom-right tile position
392
+ var startPos = this.tileToPixelCoords(
393
+ startTile.x + layer.pos.x,
394
+ startTile.y + layer.pos.y,
395
+ pool.pull("Vector2d")
396
+ );
397
+
398
+ var rowTile = startTile.clone();
399
+ var rowPos = startPos.clone();
400
+
401
+ /* Determine in which half of the tile the top-left corner of the area we
402
+ * need to draw is. If we're in the upper half, we need to start one row
403
+ * up due to those tiles being visible as well. How we go up one row
404
+ * depends on whether we're in the left or right half of the tile.
405
+ */
406
+ var inUpperHalf = rect.pos.y - startPos.y < this.sideoffsety;
407
+ var inLeftHalf = rect.pos.x - startPos.x < this.sideoffsetx;
408
+
409
+ if (inUpperHalf) {
410
+ startTile.y--;
411
+ }
412
+ if (inLeftHalf) {
413
+ startTile.x--;
414
+ }
415
+
416
+ var endX = layer.cols;
417
+ var endY = layer.rows;
418
+
419
+ if (this.staggerX) {
420
+ //ensure we are in the valid tile range
421
+ startTile.x = Math.max(0, startTile.x);
422
+ startTile.y = Math.max(0, startTile.y);
423
+
424
+ startPos = this.tileToPixelCoords(
425
+ startTile.x + layer.pos.x,
426
+ startTile.y + layer.pos.y
427
+ );
428
+
429
+ var staggeredRow = this.doStaggerX(startTile.x + layer.pos.x);
430
+
431
+ // main drawing loop
432
+ for (; startPos.y < rect.bottom && startTile.y < endY; ) {
433
+ rowTile.setV(startTile);
434
+ rowPos.setV(startPos);
435
+
436
+ for (; rowPos.x < rect.right && rowTile.x < endX; rowTile.x+=2) {
437
+ tile = layer.cellAt(rowTile.x, rowTile.y, false);
438
+ if (tile) {
439
+ // draw the tile
440
+ tile.tileset.drawTile(renderer, rowPos.x, rowPos.y, tile);
441
+ }
442
+ rowPos.x += this.tilewidth + this.sidelengthx;
443
+ }
444
+
445
+ if (staggeredRow) {
446
+ startTile.x -= 1;
447
+ startTile.y += 1;
448
+ startPos.x -= this.columnwidth;
449
+ staggeredRow = false;
450
+ } else {
451
+ startTile.x += 1;
452
+ startPos.x += this.columnwidth;
453
+ staggeredRow = true;
454
+ }
455
+
456
+ startPos.y += this.rowheight;
457
+ }
458
+ pool.push(rowTile);
459
+ pool.push(rowPos);
460
+
461
+ } else {
462
+ //ensure we are in the valid tile range
463
+ startTile.x = Math.max(0, startTile.x);
464
+ startTile.y = Math.max(0, startTile.y);
465
+
466
+ startPos = this.tileToPixelCoords(
467
+ startTile.x + layer.pos.x,
468
+ startTile.y + layer.pos.y
469
+ );
470
+
471
+ // Odd row shifting is applied in the rendering loop, so un-apply it here
472
+ if (this.doStaggerY(startTile.y)) {
473
+ startPos.x -= this.columnwidth;
474
+ }
475
+
476
+ // main drawing loop
477
+ for (; startPos.y < rect.bottom && startTile.y < endY; startTile.y++) {
478
+ rowTile.setV(startTile);
479
+ rowPos.setV(startPos);
480
+
481
+ if (this.doStaggerY(startTile.y)) {
482
+ rowPos.x += this.columnwidth;
483
+ }
484
+
485
+ for (; rowPos.x < rect.right && rowTile.x < endX; rowTile.x++) {
486
+ tile = layer.cellAt(rowTile.x, rowTile.y, false);
487
+ if (tile) {
488
+ // draw the tile
489
+ tile.tileset.drawTile(renderer, rowPos.x, rowPos.y, tile);
490
+ }
491
+ rowPos.x += this.tilewidth + this.sidelengthx;
492
+ }
493
+ startPos.y += this.rowheight;
494
+ }
495
+ pool.push(rowTile);
496
+ pool.push(rowPos);
497
+ }
498
+
499
+ pool.push(startTile);
500
+ pool.push(startPos);
501
+ }
502
+ }
503
+
504
+ var TMXHexagonalRenderer$1 = TMXHexagonalRenderer;
505
+
506
+ export { TMXHexagonalRenderer$1 as default };