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,155 @@
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 pool from '../../../system/pooling.js';
10
+ import TMXRenderer from './TMXRenderer.js';
11
+
12
+ /**
13
+ * @classdesc
14
+ * an Orthogonal Map Renderder
15
+ * @augments TMXRenderer
16
+ */
17
+ class TMXOrthogonalRenderer extends TMXRenderer {
18
+ /**
19
+ * @param {TMXTileMap} map - the TMX map
20
+ */
21
+ constructor(map) {
22
+ super(
23
+ map.cols,
24
+ map.rows,
25
+ map.tilewidth,
26
+ map.tileheight
27
+ );
28
+ }
29
+
30
+ /**
31
+ * return true if the renderer can render the specified layer
32
+ * @ignore
33
+ */
34
+ canRender(layer) {
35
+ return (
36
+ (layer.orientation === "orthogonal") &&
37
+ super.canRender(layer)
38
+ );
39
+ }
40
+
41
+ /**
42
+ * return the tile position corresponding to the specified pixel
43
+ * @ignore
44
+ */
45
+ pixelToTileCoords(x, y, v) {
46
+ var ret = v || new Vector2d();
47
+ return ret.set(
48
+ x / this.tilewidth,
49
+ y / this.tileheight
50
+ );
51
+ }
52
+
53
+
54
+ /**
55
+ * return the pixel position corresponding of the specified tile
56
+ * @ignore
57
+ */
58
+ tileToPixelCoords(x, y, v) {
59
+ var ret = v || new Vector2d();
60
+ return ret.set(
61
+ x * this.tilewidth,
62
+ y * this.tileheight
63
+ );
64
+ }
65
+
66
+ /**
67
+ * fix the position of Objects to match
68
+ * the way Tiled places them
69
+ * @ignore
70
+ */
71
+ adjustPosition(obj) {
72
+ // only adjust position if obj.gid is defined
73
+ if (typeof(obj.gid) === "number") {
74
+ // Tiled objects origin point is "bottom-left" in Tiled,
75
+ // "top-left" in melonJS)
76
+ obj.y -= obj.height;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * draw the tile map
82
+ * @ignore
83
+ */
84
+ drawTile(renderer, x, y, tmxTile) {
85
+ var tileset = tmxTile.tileset;
86
+ // draw the tile
87
+ tileset.drawTile(
88
+ renderer,
89
+ tileset.tileoffset.x + x * this.tilewidth,
90
+ tileset.tileoffset.y + (y + 1) * this.tileheight - tileset.tileheight,
91
+ tmxTile
92
+ );
93
+ }
94
+
95
+ /**
96
+ * draw the tile map
97
+ * @ignore
98
+ */
99
+ drawTileLayer(renderer, layer, rect) {
100
+ var incX = 1, incY = 1;
101
+
102
+ // get top-left and bottom-right tile position
103
+ var start = this.pixelToTileCoords(
104
+ Math.max(rect.pos.x - (layer.maxTileSize.width - layer.tilewidth), 0),
105
+ Math.max(rect.pos.y - (layer.maxTileSize.height - layer.tileheight), 0),
106
+ pool.pull("Vector2d")
107
+ ).floorSelf();
108
+
109
+ var end = this.pixelToTileCoords(
110
+ rect.pos.x + rect.width + this.tilewidth,
111
+ rect.pos.y + rect.height + this.tileheight,
112
+ pool.pull("Vector2d")
113
+ ).ceilSelf();
114
+
115
+ //ensure we are in the valid tile range
116
+ end.x = end.x > this.cols ? this.cols : end.x;
117
+ end.y = end.y > this.rows ? this.rows : end.y;
118
+
119
+ switch (layer.renderorder) {
120
+ case "right-up" :
121
+ // swapping start.y and end.y
122
+ end.y = start.y + (start.y = end.y) - end.y;
123
+ incY = -1;
124
+ break;
125
+ case "left-down" :
126
+ // swapping start.x and end.x
127
+ end.x = start.x + (start.x = end.x) - end.x;
128
+ incX = -1;
129
+ break;
130
+ case "left-up" :
131
+ // swapping start.x and end.x
132
+ end.x = start.x + (start.x = end.x) - end.x;
133
+ // swapping start.y and end.y
134
+ end.y = start.y + (start.y = end.y) - end.y;
135
+ incX = -1;
136
+ incY = -1;
137
+ break;
138
+ }
139
+
140
+ // main drawing loop
141
+ for (var y = start.y; y !== end.y; y+= incY) {
142
+ for (var x = start.x; x !== end.x; x+= incX) {
143
+ var tmxTile = layer.cellAt(x, y, false);
144
+ if (tmxTile) {
145
+ this.drawTile(renderer, x, y, tmxTile);
146
+ }
147
+ }
148
+ }
149
+
150
+ pool.push(start);
151
+ pool.push(end);
152
+ }
153
+ }
154
+
155
+ export { TMXOrthogonalRenderer as default };
@@ -0,0 +1,124 @@
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 pool from '../../../system/pooling.js';
9
+ import TMXLayer from '../TMXLayer.js';
10
+ import Bounds from '../../../physics/bounds.js';
11
+
12
+ /* eslint-disable no-unused-vars */
13
+
14
+ /**
15
+ * @classdesc
16
+ * The map renderer base class
17
+ */
18
+ class TMXRenderer {
19
+ /**
20
+ * @param {number} cols - width of the tilemap in tiles
21
+ * @param {number} rows - height of the tilemap in tiles
22
+ * @param {number} tilewidth - width of each tile in pixels
23
+ * @param {number} tileheight - height of each tile in pixels
24
+ */
25
+ constructor(cols, rows, tilewidth, tileheight) {
26
+ this.cols = cols;
27
+ this.rows = rows;
28
+ this.tilewidth = tilewidth;
29
+ this.tileheight = tileheight;
30
+ this.bounds = new Bounds();
31
+ }
32
+
33
+ /**
34
+ * return true if the renderer can render the specified map or layer
35
+ * @name TMXRenderer#canRender
36
+ * @public
37
+ * @param {TMXTileMap|TMXLayer} component - TMX Map or Layer
38
+ * @returns {boolean}
39
+ */
40
+ canRender(component) {
41
+ return (
42
+ /*
43
+ // layers can have different size within
44
+ // the same maps, so commenting these two lines
45
+ (this.cols === component.cols) &&
46
+ (this.rows === component.rows) &&
47
+ */
48
+ (this.tilewidth === component.tilewidth) &&
49
+ (this.tileheight === component.tileheight)
50
+ );
51
+ }
52
+
53
+ /**
54
+ * return the bounding rect for this map renderer
55
+ * @name TMXRenderer#getBounds
56
+ * @public
57
+ * @param {TMXLayer} [layer] - calculate the bounding rect for a specific layer (will return a new bounds object)
58
+ * @returns {Bounds}
59
+ */
60
+ getBounds(layer) {
61
+ var bounds = layer instanceof TMXLayer ? pool.pull("Bounds") : this.bounds;
62
+ bounds.setMinMax(
63
+ 0, 0,
64
+ this.cols * this.tilewidth,
65
+ this.rows * this.tileheight
66
+ );
67
+ return bounds;
68
+ }
69
+
70
+ /**
71
+ * return the tile position corresponding to the specified pixel
72
+ * @name TMXRenderer#pixelToTileCoords
73
+ * @public
74
+ * @param {number} x - X coordinate
75
+ * @param {number} y - Y coordinate
76
+ * @param {Vector2d} [v] - an optional vector object where to put the return values
77
+ * @returns {Vector2d}
78
+ */
79
+ pixelToTileCoords(x, y, v) {
80
+ return v;
81
+ }
82
+
83
+ /**
84
+ * return the pixel position corresponding of the specified tile
85
+ * @name TMXRenderer#tileToPixelCoords
86
+ * @public
87
+ * @param {number} col - tile horizontal position
88
+ * @param {number} row - tile vertical position
89
+ * @param {Vector2d} [v] - an optional vector object where to put the return values
90
+ * @returns {Vector2d}
91
+ */
92
+ tileToPixelCoords(col, row, v) {
93
+ return v;
94
+ }
95
+
96
+ /**
97
+ * draw the given tile at the specified layer
98
+ * @name TMXRenderer#drawTile
99
+ * @public
100
+ * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer object
101
+ * @param {number} x - X coordinate where to draw the tile
102
+ * @param {number} y - Y coordinate where to draw the tile
103
+ * @param {Tile} tile - the tile object to draw
104
+ */
105
+ drawTile(renderer, x, y, tile) {
106
+ }
107
+
108
+ /**
109
+ * draw the given TMX Layer for the given area
110
+ * @name TMXRenderer#drawTileLayer
111
+ * @public
112
+ * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer object
113
+ * @param {TMXLayer} layer - a TMX Layer object
114
+ * @param {Rect} rect - the area of the layer to draw
115
+ */
116
+ drawTileLayer(renderer, layer, rect) {
117
+ }
118
+
119
+ }
120
+
121
+
122
+ /* eslint-enable no-unused-vars */
123
+
124
+ export { TMXRenderer as default };
@@ -0,0 +1,107 @@
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 pool from '../../../system/pooling.js';
10
+ import TMXHexagonalRenderer from './TMXHexagonalRenderer.js';
11
+ import { degToRad } from '../../../math/math.js';
12
+
13
+ /**
14
+ * @classdesc
15
+ * a Staggered Map Renderder
16
+ * @augments TMXHexagonalRenderer
17
+ */
18
+ class TMXStaggeredRenderer extends TMXHexagonalRenderer {
19
+
20
+ /**
21
+ * return true if the renderer can render the specified layer
22
+ * @ignore
23
+ */
24
+ canRender(layer) {
25
+ return (
26
+ (layer.orientation === "staggered") &&
27
+ super.canRender(layer)
28
+ );
29
+ }
30
+
31
+ /**
32
+ * return the tile position corresponding to the specified pixel
33
+ * @ignore
34
+ */
35
+ pixelToTileCoords(x, y, v) {
36
+ var ret = v || new Vector2d();
37
+
38
+ var alignedX = x,
39
+ alignedY = y;
40
+
41
+ if (this.staggerX) {
42
+ alignedX -= this.staggerEven ? this.sideoffsetx : 0;
43
+ } else {
44
+ alignedY -= this.staggerEven ? this.sideoffsety : 0;
45
+ }
46
+
47
+ // Start with the coordinates of a grid-aligned tile
48
+ var referencePoint = pool.pull("Vector2d",
49
+ Math.floor(alignedX / this.tilewidth),
50
+ Math.floor(alignedY / this.tileheight)
51
+ );
52
+
53
+ // Adjust the reference point to the correct tile coordinates
54
+ if (this.staggerX) {
55
+ referencePoint.x = referencePoint.x * 2;
56
+ if (this.staggerEven) {
57
+ ++referencePoint.x;
58
+ }
59
+ } else {
60
+ referencePoint.y = referencePoint.y * 2;
61
+ if (this.staggerEven) {
62
+ ++referencePoint.y;
63
+ }
64
+ }
65
+
66
+ // Relative x and y position on the base square of the grid-aligned tile
67
+ var rel = pool.pull("Vector2d",
68
+ alignedX - referencePoint.x * this.tilewidth,
69
+ alignedY - referencePoint.y * this.tileheight
70
+ );
71
+
72
+ // Check whether the cursor is in any of the corners (neighboring tiles)
73
+ var y_pos = rel.x * (this.tileheight / this.tilewidth);
74
+
75
+ if (this.sideoffsety - y_pos > rel.y) {
76
+ referencePoint = this.topLeft(referencePoint.x, referencePoint.y, referencePoint);
77
+ }
78
+ if (-this.sideoffsety + y_pos > rel.y) {
79
+ referencePoint = this.topRight(referencePoint.x, referencePoint.y, referencePoint);
80
+ }
81
+ if (this.sideoffsety + y_pos < rel.y) {
82
+ referencePoint = this.bottomLeft(referencePoint.x, referencePoint.y, referencePoint);
83
+ }
84
+ if (this.sideoffsety * 3 - y_pos < rel.y) {
85
+ referencePoint = this.bottomRight(referencePoint.x, referencePoint.y, referencePoint);
86
+ }
87
+
88
+ ret = this.tileToPixelCoords(referencePoint.x, referencePoint.y, ret);
89
+
90
+ ret.set(x - ret.x, y - ret.y);
91
+
92
+ // Start with the coordinates of a grid-aligned tile
93
+ ret.set(
94
+ ret.x - (this.tilewidth / 2),
95
+ ret.y * (this.tilewidth / this.tileheight)
96
+ );
97
+
98
+ ret.div(this.tilewidth / Math.sqrt(2)).rotate(degToRad(-45)).add(referencePoint);
99
+
100
+ pool.push(referencePoint);
101
+ pool.push(rel);
102
+
103
+ return ret;
104
+ }
105
+ }
106
+
107
+ export { TMXStaggeredRenderer as default };