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,355 @@
1
+ /*!
2
+ * melonJS Game Engine - v14.1.0
3
+ * http://www.melonjs.org
4
+ * melonjs is licensed under the MIT License.
5
+ * http://www.opensource.org/licenses/mit-license
6
+ * @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
7
+ */
8
+ import pool from '../../system/pooling.js';
9
+ import { applyTMXProperties } from './TMXUtils.js';
10
+ import Tile from './TMXTile.js';
11
+ import { degToRad } from '../../math/math.js';
12
+
13
+ /**
14
+ * @classdesc
15
+ * a TMX Object defintion, as defined in Tiled
16
+ * (Object definition is translated into the virtual `me.game.world` using `me.Renderable`)
17
+ * @ignore
18
+ */
19
+ class TMXObject {
20
+
21
+ constructor(map, settings, z) {
22
+
23
+ /**
24
+ * point list in JSON format
25
+ * @public
26
+ * @type {object[]}
27
+ * @name points
28
+ * @memberof TMXObject
29
+ */
30
+ this.points = undefined;
31
+
32
+ /**
33
+ * object name
34
+ * @public
35
+ * @type {string}
36
+ * @name name
37
+ * @memberof TMXObject
38
+ */
39
+ this.name = settings.name;
40
+
41
+ /**
42
+ * object x position
43
+ * @public
44
+ * @type {number}
45
+ * @name x
46
+ * @memberof TMXObject
47
+ */
48
+ this.x = +settings.x;
49
+
50
+ /**
51
+ * object y position
52
+ * @public
53
+ * @type {number}
54
+ * @name y
55
+ * @memberof TMXObject
56
+ */
57
+ this.y = +settings.y;
58
+
59
+ /**
60
+ * object z order
61
+ * @public
62
+ * @type {number}
63
+ * @name z
64
+ * @memberof TMXObject
65
+ */
66
+ this.z = +z;
67
+
68
+ /**
69
+ * object width
70
+ * @public
71
+ * @type {number}
72
+ * @name width
73
+ * @memberof TMXObject
74
+ */
75
+ this.width = +settings.width || 0;
76
+
77
+ /**
78
+ * object height
79
+ * @public
80
+ * @type {number}
81
+ * @name height
82
+ * @memberof TMXObject
83
+ */
84
+ this.height = +settings.height || 0;
85
+
86
+ /**
87
+ * object gid value
88
+ * when defined the object is a tiled object
89
+ * @public
90
+ * @type {number}
91
+ * @name gid
92
+ * @memberof TMXObject
93
+ */
94
+ this.gid = +settings.gid || null;
95
+
96
+ /**
97
+ * tint color
98
+ * @public
99
+ * @type {string}
100
+ * @name tintcolor
101
+ * @memberof TMXObject
102
+ */
103
+ this.tintcolor = settings.tintcolor;
104
+
105
+ /**
106
+ * object type
107
+ * @public
108
+ * @type {string}
109
+ * @deprecated since Tiled 1.9
110
+ * @see https://docs.mapeditor.org/en/stable/reference/tmx-changelog/#tiled-1-9
111
+ * @name type
112
+ * @memberof TMXObject
113
+ */
114
+ this.type = settings.type;
115
+
116
+ /**
117
+ * the object class
118
+ * @public
119
+ * @type {string}
120
+ * @name class
121
+ * @memberof TMXObject
122
+ */
123
+ this.class = typeof settings.class !== "undefined" ? settings.class : settings.type;
124
+
125
+ /**
126
+ * object text
127
+ * @public
128
+ * @type {object}
129
+ * @see http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#text
130
+ * @name text
131
+ * @memberof TMXObject
132
+ */
133
+ this.text = undefined;
134
+
135
+ /**
136
+ * The rotation of the object in radians clockwise (defaults to 0)
137
+ * @public
138
+ * @type {number}
139
+ * @name rotation
140
+ * @memberof TMXObject
141
+ */
142
+ this.rotation = degToRad(+settings.rotation || 0);
143
+
144
+ /**
145
+ * object unique identifier per level (Tiled 0.11.x+)
146
+ * @public
147
+ * @type {number}
148
+ * @name id
149
+ * @memberof TMXObject
150
+ */
151
+ this.id = +settings.id || undefined;
152
+
153
+ /**
154
+ * object orientation (orthogonal or isometric)
155
+ * @public
156
+ * @type {string}
157
+ * @name orientation
158
+ * @memberof TMXObject
159
+ */
160
+ this.orientation = map.orientation;
161
+
162
+ /**
163
+ * the collision shapes defined for this object
164
+ * @public
165
+ * @type {object[]}
166
+ * @name shapes
167
+ * @memberof TMXObject
168
+ */
169
+ this.shapes = undefined;
170
+
171
+ /**
172
+ * if true, the object is an Ellipse
173
+ * @public
174
+ * @type {boolean}
175
+ * @name isEllipse
176
+ * @memberof TMXObject
177
+ */
178
+ this.isEllipse = false;
179
+
180
+ /**
181
+ * if true, the object is a Point
182
+ * @public
183
+ * @type {boolean}
184
+ * @name isPoint
185
+ * @memberof TMXObject
186
+ */
187
+ this.isPoint = false;
188
+
189
+ /**
190
+ * if true, the object is a Polygon
191
+ * @public
192
+ * @type {boolean}
193
+ * @name isPolygon
194
+ * @memberof TMXObject
195
+ */
196
+ this.isPolygon = false;
197
+
198
+ /**
199
+ * if true, the object is a PolyLine
200
+ * @public
201
+ * @type {boolean}
202
+ * @name isPolyLine
203
+ * @memberof TMXObject
204
+ */
205
+ this.isPolyLine = false;
206
+
207
+ // check if the object has an associated gid
208
+ if (typeof this.gid === "number") {
209
+ this.setTile(map.tilesets);
210
+ }
211
+ else {
212
+ if (typeof settings.ellipse !== "undefined") {
213
+ this.isEllipse = true;
214
+ } else if (typeof settings.point !== "undefined") {
215
+ this.isPoint = true;
216
+ } else if (typeof settings.polygon !== "undefined") {
217
+ this.points = settings.polygon;
218
+ this.isPolygon = true;
219
+ } else if (typeof settings.polyline !== "undefined") {
220
+ this.points = settings.polyline;
221
+ this.isPolyLine = true;
222
+ }
223
+ }
224
+
225
+ // check for text information
226
+ if (typeof settings.text !== "undefined") {
227
+ // a text object
228
+ this.text = settings.text;
229
+ // normalize field name and default value the melonjs way
230
+ this.text.font = settings.text.fontfamily || "sans-serif";
231
+ this.text.size = settings.text.pixelsize || 16;
232
+ this.text.fillStyle = settings.text.color || "#000000";
233
+ this.text.textAlign = settings.text.halign || "left";
234
+ this.text.textBaseline = settings.text.valign || "top";
235
+ this.text.width = this.width;
236
+ this.text.height = this.height;
237
+ // set the object properties
238
+ applyTMXProperties(this.text, settings);
239
+ } else {
240
+ // set the object properties
241
+ applyTMXProperties(this, settings);
242
+ // a standard object
243
+ if (!this.shapes) {
244
+ // else define the object shapes if required
245
+ this.shapes = this.parseTMXShapes();
246
+ }
247
+ }
248
+
249
+ // Adjust the Position to match Tiled
250
+ if (!map.isEditor) {
251
+ map.getRenderer().adjustPosition(this);
252
+ }
253
+ }
254
+
255
+ /**
256
+ * set the object image (for Tiled Object)
257
+ * @ignore
258
+ */
259
+ setTile(tilesets) {
260
+ // get the corresponding tileset
261
+ var tileset = tilesets.getTilesetByGid(this.gid);
262
+
263
+ if (tileset.isCollection === false) {
264
+ // set width and height equal to tile size
265
+ this.width = this.framewidth = tileset.tilewidth;
266
+ this.height = this.frameheight = tileset.tileheight;
267
+ }
268
+
269
+ // the object corresponding tile object
270
+ this.tile = new Tile(this.x, this.y, this.gid, tileset);
271
+ }
272
+
273
+ /**
274
+ * parses the TMX shape definition and returns a corresponding array of me.Shape object
275
+ * @name parseTMXShapes
276
+ * @memberof TMXObject
277
+ * @private
278
+ * @returns {Polygon[]|Line[]|Ellipse[]} an array of shape objects
279
+ */
280
+ parseTMXShapes() {
281
+ var i = 0;
282
+ var shapes = [];
283
+
284
+ // add an ellipse shape
285
+ if (this.isEllipse === true) {
286
+ // ellipse coordinates are the center position, so set default to the corresonding radius
287
+ shapes.push((pool.pull("Ellipse",
288
+ this.width / 2,
289
+ this.height / 2,
290
+ this.width,
291
+ this.height
292
+ )).rotate(this.rotation));
293
+ } else if (this.isPoint === true) {
294
+ shapes.push(pool.pull("Point", this.x, this.y));
295
+ } else {
296
+ // add a polygon
297
+ if (this.isPolygon === true) {
298
+ var _polygon = pool.pull("Polygon", 0, 0, this.points);
299
+ // make sure it's a convex polygon
300
+ if (_polygon.isConvex() === false ) {
301
+ throw new Error("collision polygones in Tiled should be defined as Convex");
302
+ }
303
+ shapes.push(_polygon.rotate(this.rotation));
304
+
305
+ } else if (this.isPolyLine === true) {
306
+ var p = this.points;
307
+ var p1, p2;
308
+ var segments = p.length - 1;
309
+ for (i = 0; i < segments; i++) {
310
+ // clone the value before, as [i + 1]
311
+ // is reused later by the next segment
312
+ p1 = pool.pull("Vector2d", p[i].x, p[i].y);
313
+ p2 = pool.pull("Vector2d", p[i + 1].x, p[i + 1].y);
314
+ if (this.rotation !== 0) {
315
+ p1 = p1.rotate(this.rotation);
316
+ p2 = p2.rotate(this.rotation);
317
+ }
318
+ shapes.push(pool.pull("Line", 0, 0, [ p1, p2 ]));
319
+ }
320
+ }
321
+
322
+ // it's a rectangle, returns a polygon object anyway
323
+ else {
324
+ shapes.push((pool.pull("Polygon",
325
+ 0, 0, [
326
+ pool.pull("Vector2d"), pool.pull("Vector2d", this.width, 0),
327
+ pool.pull("Vector2d", this.width, this.height), pool.pull("Vector2d", 0, this.height)
328
+ ]
329
+ )).rotate(this.rotation));
330
+ }
331
+
332
+ }
333
+
334
+ // Apply isometric projection
335
+ if (this.orientation === "isometric") {
336
+ for (i = 0; i < shapes.length; i++) {
337
+ if (typeof shapes[i].toIso === "function") {
338
+ shapes[i].toIso();
339
+ }
340
+ }
341
+ }
342
+
343
+ return shapes;
344
+ }
345
+
346
+ /**
347
+ * getObjectPropertyByName
348
+ * @ignore
349
+ */
350
+ getObjectPropertyByName(name) {
351
+ return this[name];
352
+ }
353
+ }
354
+
355
+ export { TMXObject as default };
@@ -0,0 +1,194 @@
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 Matrix2d from '../../math/matrix2.js';
9
+ import Sprite from '../../renderable/sprite.js';
10
+ import Bounds from '../../physics/bounds.js';
11
+
12
+ // bitmask constants to check for flipped & rotated tiles
13
+ const TMX_FLIP_H = 0x80000000,
14
+ TMX_FLIP_V = 0x40000000,
15
+ TMX_FLIP_AD = 0x20000000,
16
+ TMX_CLEAR_BIT_MASK = ~(0x80000000 | 0x40000000 | 0x20000000);
17
+
18
+ /**
19
+ * @classdesc
20
+ * a basic tile object
21
+ * @augments Bounds
22
+ */
23
+ class Tile extends Bounds {
24
+ /**
25
+ * @param {number} x - x index of the Tile in the map
26
+ * @param {number} y - y index of the Tile in the map
27
+ * @param {number} gid - tile gid
28
+ * @param {TMXTileset} tileset - the corresponding tileset object
29
+ */
30
+ constructor(x, y, gid, tileset) {
31
+ var width, height;
32
+
33
+ // call the parent constructor
34
+ super();
35
+
36
+ // determine the tile size
37
+ if (tileset.isCollection) {
38
+ var image = tileset.getTileImage(gid & TMX_CLEAR_BIT_MASK);
39
+ width = image.width;
40
+ height = image.height;
41
+ } else {
42
+ width = tileset.tilewidth;
43
+ height = tileset.tileheight;
44
+ }
45
+
46
+ this.setMinMax(0, 0, width, height);
47
+
48
+ /**
49
+ * tileset
50
+ * @public
51
+ * @type {TMXTileset}
52
+ * @name Tile#tileset
53
+ */
54
+ this.tileset = tileset;
55
+
56
+ /**
57
+ * the tile transformation matrix (if defined)
58
+ * @ignore
59
+ */
60
+ this.currentTransform = null;
61
+
62
+ // Tile col / row pos
63
+ this.col = x;
64
+ this.row = y;
65
+
66
+ /**
67
+ * tileId
68
+ * @public
69
+ * @type {number}
70
+ * @name Tile#tileId
71
+ */
72
+ this.tileId = gid;
73
+ /**
74
+ * True if the tile is flipped horizontally<br>
75
+ * @public
76
+ * @type {boolean}
77
+ * @name Tile#flipX
78
+ */
79
+ this.flippedX = (this.tileId & TMX_FLIP_H) !== 0;
80
+ /**
81
+ * True if the tile is flipped vertically<br>
82
+ * @public
83
+ * @type {boolean}
84
+ * @name Tile#flippedY
85
+ */
86
+ this.flippedY = (this.tileId & TMX_FLIP_V) !== 0;
87
+ /**
88
+ * True if the tile is flipped anti-diagonally<br>
89
+ * @public
90
+ * @type {boolean}
91
+ * @name Tile#flippedAD
92
+ */
93
+ this.flippedAD = (this.tileId & TMX_FLIP_AD) !== 0;
94
+
95
+ /**
96
+ * Global flag that indicates if the tile is flipped<br>
97
+ * @public
98
+ * @type {boolean}
99
+ * @name Tile#flipped
100
+ */
101
+ this.flipped = this.flippedX || this.flippedY || this.flippedAD;
102
+
103
+ // create and apply transformation matrix if required
104
+ if (this.flipped === true) {
105
+ if (this.currentTransform === null) {
106
+ this.currentTransform = new Matrix2d();
107
+ }
108
+ this.setTileTransform(this.currentTransform.identity());
109
+ }
110
+
111
+ // clear out the flags and set the tileId
112
+ this.tileId &= TMX_CLEAR_BIT_MASK;
113
+ }
114
+
115
+ /**
116
+ * set the transformation matrix for this tile
117
+ * @ignore
118
+ */
119
+ setTileTransform(transform) {
120
+ transform.translate(this.width / 2, this.height / 2);
121
+ if (this.flippedAD) {
122
+ transform.rotate(-90 * Math.PI / 180);
123
+ transform.scale(-1, 1);
124
+ }
125
+ if (this.flippedX) {
126
+ transform.scale(
127
+ this.flippedAD ? 1 : -1, this.flippedAD ? -1 : 1
128
+ );
129
+ }
130
+ if (this.flippedY) {
131
+ transform.scale(
132
+ this.flippedAD ? -1 : 1, this.flippedAD ? 1 : -1
133
+ );
134
+ }
135
+ transform.translate(-this.width / 2, -this.height / 2);
136
+ }
137
+
138
+ /**
139
+ * return a renderable object for this Tile object
140
+ * @name Tile#getRenderable
141
+ * @public
142
+ * @param {object} [settings] - see {@link Sprite}
143
+ * @returns {Renderable} a me.Sprite object
144
+ */
145
+ getRenderable(settings) {
146
+ var renderable;
147
+ var tileset = this.tileset;
148
+
149
+ if (tileset.animations.has(this.tileId)) {
150
+ var frames = [];
151
+ var frameId = [];
152
+ (tileset.animations.get(this.tileId).frames).forEach((frame) => {
153
+ frameId.push(frame.tileid);
154
+ frames.push({
155
+ name : "" + frame.tileid,
156
+ delay : frame.duration
157
+ });
158
+ });
159
+ renderable = tileset.texture.createAnimationFromName(frameId, settings);
160
+ renderable.addAnimation(this.tileId - tileset.firstgid, frames);
161
+ renderable.setCurrentAnimation(this.tileId - tileset.firstgid);
162
+
163
+ } else {
164
+ if (tileset.isCollection === true) {
165
+ var image = tileset.getTileImage(this.tileId);
166
+ renderable = new Sprite(0, 0,
167
+ Object.assign({
168
+ image: image
169
+ })//, settings)
170
+ );
171
+ renderable.anchorPoint.set(0, 0);
172
+ renderable.scale((settings.width / this.width), (settings.height / this.height));
173
+ if (typeof settings.rotation !== "undefined") {
174
+ renderable.anchorPoint.set(0.5, 0.5);
175
+ renderable.currentTransform.rotate(settings.rotation);
176
+ renderable.currentTransform.translate(settings.width / 2, settings.height / 2);
177
+ // TODO : move the rotation related code from TMXTiledMap to here (under)
178
+ settings.rotation = undefined;
179
+ }
180
+ } else {
181
+ renderable = tileset.texture.createSpriteFromName(this.tileId - tileset.firstgid, settings);
182
+ renderable.anchorPoint.set(0, 0);
183
+ }
184
+ }
185
+
186
+ // any H/V flipping to apply?
187
+ this.setTileTransform(renderable.currentTransform);
188
+
189
+ return renderable;
190
+ }
191
+ }
192
+ var Tile$1 = Tile;
193
+
194
+ export { Tile$1 as default };