melonjs 14.0.1 → 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,157 @@
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 { TextureAtlas } from '../video/texture/atlas.js';
9
+ import Renderer from '../video/renderer.js';
10
+ import { Draggable, DropTarget } from '../renderable/dragndrop.js';
11
+ import UISpriteElement from '../renderable/ui/uispriteelement.js';
12
+
13
+ /*
14
+ * placeholder for all deprecated classes and corresponding alias for backward compatibility
15
+ */
16
+
17
+ /**
18
+ * display a deprecation warning in the console
19
+ * @ignore
20
+ * @param {string} deprecated - deprecated class,function or property name
21
+ * @param {string} replacement - the replacement class, function, or property name
22
+ * @param {string} version - the version since when the lass,function or property is deprecated
23
+ */
24
+ function warning(deprecated, replacement, version) {
25
+ var msg = "melonJS: %s is deprecated since version %s, please use %s";
26
+ var stack = new Error().stack;
27
+
28
+ if (console.groupCollapsed) {
29
+ console.groupCollapsed(
30
+ "%c" + msg,
31
+ "font-weight:normal;color:yellow;",
32
+ deprecated,
33
+ version,
34
+ replacement
35
+ );
36
+ } else {
37
+ console.warn(
38
+ msg,
39
+ deprecated,
40
+ version,
41
+ replacement
42
+ );
43
+ }
44
+
45
+ if (typeof stack !== "undefined") {
46
+ console.warn(stack);
47
+ }
48
+
49
+ if (console.groupCollapsed) {
50
+ console.groupEnd();
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Alias of {@link TextureAtlas}
56
+ * @public
57
+ * @name Texture
58
+ * @class
59
+ * @memberof Renderer#
60
+ * @deprecated since 10.4.0
61
+ * @see TextureAtlas
62
+ */
63
+ Object.defineProperty(Renderer.prototype, "Texture", {
64
+ /**
65
+ * @ignore
66
+ */
67
+ get : function () {
68
+ warning("me.video.renderer.Texture", "me.TextureAtlas", "10.4.0");
69
+ return TextureAtlas;
70
+ }
71
+ });
72
+
73
+ /**
74
+ * @classdesc
75
+ * Used to make a game entity draggable
76
+ * @augments Entity
77
+ * @deprecated since 10.5.0
78
+ * @see Draggable
79
+ */
80
+ class DraggableEntity extends Draggable {
81
+ /**
82
+ * @param {number} x - the x coordinates of the draggable object
83
+ * @param {number} y - the y coordinates of the draggable object
84
+ * @param {object} settings - Entity properties (see {@link Entity})
85
+ */
86
+ constructor(x, y, settings) {
87
+ warning("DraggableEntity", "Draggable", "10.5.0");
88
+ super(x, y, settings.width, settings.height);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * @classdesc
94
+ * Used to make a game entity a droptarget
95
+ * @augments Entity
96
+ * @deprecated since 10.5.0
97
+ * @see DropTarget
98
+ */
99
+ class DroptargetEntity extends DropTarget {
100
+ /**
101
+ * @param {number} x - the x coordinates of the draggable object
102
+ * @param {number} y - the y coordinates of the draggable object
103
+ * @param {object} settings - Entity properties (see {@link Entity})
104
+ */
105
+ constructor(x, y, settings) {
106
+ warning("DroptargetEntity", "DropTarget", "10.5.0");
107
+ super(x, y, settings.width, settings.height);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * return a reference to the screen canvas
113
+ * @name getScreenCanvas
114
+ * @memberof Renderer
115
+ * @returns {HTMLCanvasElement}
116
+ * @deprecated since 13.1.0
117
+ * @see getCanvas();
118
+ */
119
+ Renderer.prototype.getScreenCanvas = function() {
120
+ warning("getScreenCanvas", "getCanvas", "13.1.0");
121
+ return this.getCanvas();
122
+ };
123
+
124
+ /**
125
+ * return a reference to the screen canvas corresponding 2d Context<br>
126
+ * (will return buffered context if double buffering is enabled, or a reference to the Screen Context)
127
+ * @name getScreenContext
128
+ * @memberof Renderer
129
+ * @returns {CanvasRenderingContext2D}
130
+ * @deprecated since 13.1.0
131
+ * @see getContext();
132
+ */
133
+ Renderer.prototype.getScreenContext = function() {
134
+ warning("getScreenContext", "getContext", "13.1.0");
135
+ return this.getContext();
136
+ };
137
+
138
+ /**
139
+ * @classdesc
140
+ * A very basic object to manage GUI elements
141
+ * @augments Sprite
142
+ * @deprecated since 14.0.0
143
+ * @see UISpriteElement
144
+ */
145
+ class GUI_Object extends UISpriteElement {
146
+ /**
147
+ * @param {number} x - the x coordinate of the GUI Object
148
+ * @param {number} y - the y coordinate of the GUI Object
149
+ * @param {object} settings - See {@link Sprite}
150
+ */
151
+ constructor(x, y, settings) {
152
+ warning("GUI_Object", "UISpriteElement", "14.0.0");
153
+ super(x, y, settings);
154
+ }
155
+ }
156
+
157
+ export { DraggableEntity, DroptargetEntity, GUI_Object, warning };
@@ -0,0 +1,297 @@
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 utils from '../utils/utils.js';
9
+ import { emit, LEVEL_LOADED } from '../system/event.js';
10
+ import state from '../state/state.js';
11
+ import loader from '../loader/loader.js';
12
+ import game from '../game.js';
13
+ import TMXTileMap from './tiled/TMXTileMap.js';
14
+
15
+ // our levels
16
+ var levels = {};
17
+ // level index table
18
+ var levelIdx = [];
19
+ // current level index
20
+ var currentLevelIdx = 0;
21
+
22
+ /**
23
+ * @ignore
24
+ */
25
+ function safeLoadLevel(levelId, options, restart) {
26
+ // clean the destination container
27
+ options.container.reset();
28
+
29
+ // reset the renderer
30
+ game.reset();
31
+
32
+ // clean the current (previous) level
33
+ if (levels[level.getCurrentLevelId()]) {
34
+ levels[level.getCurrentLevelId()].destroy();
35
+ }
36
+
37
+ // update current level index
38
+ currentLevelIdx = levelIdx.indexOf(levelId);
39
+
40
+ // add the specified level to the game world
41
+ loadTMXLevel(levelId, options.container, options.flatten, options.setViewportBounds);
42
+
43
+ // publish the corresponding message
44
+ emit(LEVEL_LOADED, levelId);
45
+
46
+ // fire the callback
47
+ options.onLoaded(levelId);
48
+
49
+ if (restart) {
50
+ // resume the game loop if it was previously running
51
+ state.restart();
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Load a TMX level
57
+ * @name loadTMXLevel
58
+ * @memberof level
59
+ * @private
60
+ * @param {string} levelId - level id
61
+ * @param {Container} container - target container
62
+ * @param {boolean} [flatten=true] - if true, flatten all objects into the given container
63
+ * @param {boolean} [setViewportBounds=false] - if true, set the viewport bounds to the map size, this should be set to true especially if adding a level to the game world container.
64
+ * @ignore
65
+ */
66
+ function loadTMXLevel(levelId, container, flatten, setViewportBounds) {
67
+ var level = levels[levelId];
68
+
69
+ // reset the GUID generator
70
+ // and pass the level id as parameter
71
+ utils.resetGUID(levelId, level.nextobjectid);
72
+
73
+ // Tiled use 0,0 anchor coordinates
74
+ container.anchorPoint.set(0, 0);
75
+
76
+ // add all level elements to the target container
77
+ level.addTo(container, flatten, setViewportBounds);
78
+ }
79
+
80
+
81
+ /**
82
+ * a level manager. once ressources loaded, the level manager contains all references of defined levels.
83
+ * @namespace level
84
+ */
85
+
86
+ var level = {
87
+
88
+ /**
89
+ * add a level into the game manager (usually called by the preloader)
90
+ * @name add
91
+ * @memberof level
92
+ * @public
93
+ * @param {string} format - level format (only "tmx" supported)
94
+ * @param {string} levelId - the level id (or name)
95
+ * @param {Function} [callback] - a function to be called once the level is loaded
96
+ * @returns {boolean} true if the level was loaded
97
+ */
98
+ add(format, levelId, callback) {
99
+ switch (format) {
100
+ case "tmx" :
101
+ // just load the level with the XML stuff
102
+ if (levels[levelId] == null) {
103
+ //console.log("loading "+ levelId);
104
+ levels[levelId] = new TMXTileMap(levelId, loader.getTMX(levelId));
105
+ // level index
106
+ levelIdx.push(levelId);
107
+ }
108
+ else {
109
+ //console.log("level %s already loaded", levelId);
110
+ return false;
111
+ }
112
+
113
+ // call the callback if defined
114
+ if (callback) {
115
+ callback();
116
+ }
117
+ // true if level loaded
118
+ return true;
119
+
120
+ default :
121
+ throw new Error("no level loader defined for format " + format);
122
+ }
123
+ },
124
+
125
+ /**
126
+ * load a level into the game manager<br>
127
+ * (will also create all level defined entities, etc..)
128
+ * @name load
129
+ * @memberof level
130
+ * @public
131
+ * @param {string} levelId - level id
132
+ * @param {object} [options] - additional optional parameters
133
+ * @param {Container} [options.container=game.world] - container in which to load the specified level
134
+ * @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
135
+ * @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
136
+ * @param {boolean} [options.setViewportBounds=true] - if true, set the viewport bounds to the map size
137
+ * @returns {boolean} true if the level was successfully loaded
138
+ * @example
139
+ * // the game assets to be be preloaded
140
+ * // TMX maps
141
+ * var resources = [
142
+ * {name: "a4_level1", type: "tmx", src: "data/level/a4_level1.tmx"},
143
+ * {name: "a4_level2", type: "tmx", src: "data/level/a4_level2.tmx"},
144
+ * {name: "a4_level3", type: "tmx", src: "data/level/a4_level3.tmx"},
145
+ * // ...
146
+ * ];
147
+ *
148
+ * // ...
149
+ *
150
+ * // load a level into the game world
151
+ * me.level.load("a4_level1");
152
+ * ...
153
+ * ...
154
+ * // load a level into a specific container
155
+ * var levelContainer = new me.Container();
156
+ * me.level.load("a4_level2", {container:levelContainer});
157
+ * // add a simple transformation
158
+ * levelContainer.currentTransform.translate(levelContainer.width / 2, levelContainer.height / 2 );
159
+ * levelContainer.currentTransform.rotate(0.05);
160
+ * levelContainer.currentTransform.translate(-levelContainer.width / 2, -levelContainer.height / 2 );
161
+ * // add it to the game world
162
+ * me.game.world.addChild(levelContainer);
163
+ */
164
+ load(levelId, options) {
165
+ options = Object.assign({
166
+ "container" : game.world,
167
+ "onLoaded" : game.onLevelLoaded,
168
+ "flatten" : game.mergeGroup,
169
+ "setViewportBounds" : true
170
+ }, options || {});
171
+
172
+ // throw an exception if not existing
173
+ if (typeof(levels[levelId]) === "undefined") {
174
+ throw new Error("level " + levelId + " not found");
175
+ }
176
+
177
+ if (levels[levelId] instanceof TMXTileMap) {
178
+
179
+ // check the status of the state mngr
180
+ var wasRunning = state.isRunning();
181
+
182
+ if (wasRunning) {
183
+ // stop the game loop to avoid
184
+ // some silly side effects
185
+ state.stop();
186
+
187
+ utils.function.defer(safeLoadLevel, this, levelId, options, true);
188
+ }
189
+ else {
190
+ safeLoadLevel(levelId, options);
191
+ }
192
+ }
193
+ else {
194
+ throw new Error("no level loader defined");
195
+ }
196
+ return true;
197
+ },
198
+
199
+ /**
200
+ * return the current level id<br>
201
+ * @name getCurrentLevelId
202
+ * @memberof level
203
+ * @public
204
+ * @returns {string}
205
+ */
206
+ getCurrentLevelId() {
207
+ return levelIdx[currentLevelIdx];
208
+ },
209
+
210
+ /**
211
+ * return the current level definition.
212
+ * for a reference to the live instantiated level,
213
+ * rather use the container in which it was loaded (e.g. me.game.world)
214
+ * @name getCurrentLevel
215
+ * @memberof level
216
+ * @public
217
+ * @returns {TMXTileMap}
218
+ */
219
+ getCurrentLevel() {
220
+ return levels[this.getCurrentLevelId()];
221
+ },
222
+
223
+ /**
224
+ * reload the current level
225
+ * @name reload
226
+ * @memberof level
227
+ * @public
228
+ * @param {object} [options] - additional optional parameters
229
+ * @param {Container} [options.container=game.world] - container in which to load the specified level
230
+ * @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
231
+ * @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
232
+ * @returns {object} the current level
233
+ */
234
+ reload(options) {
235
+ // reset the level to initial state
236
+ //levels[currentLevel].reset();
237
+ return this.load(this.getCurrentLevelId(), options);
238
+ },
239
+
240
+ /**
241
+ * load the next level
242
+ * @name next
243
+ * @memberof level
244
+ * @public
245
+ * @param {object} [options] - additional optional parameters
246
+ * @param {Container} [options.container=game.world] - container in which to load the specified level
247
+ * @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
248
+ * @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
249
+ * @returns {boolean} true if the next level was successfully loaded
250
+ */
251
+ next(options) {
252
+ //go to the next level
253
+ if (currentLevelIdx + 1 < levelIdx.length) {
254
+ return this.load(levelIdx[currentLevelIdx + 1], options);
255
+ }
256
+ else {
257
+ return false;
258
+ }
259
+ },
260
+
261
+ /**
262
+ * load the previous level<br>
263
+ * @name previous
264
+ * @memberof level
265
+ * @public
266
+ * @param {object} [options] - additional optional parameters
267
+ * @param {Container} [options.container=game.world] - container in which to load the specified level
268
+ * @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
269
+ * @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
270
+ * @returns {boolean} true if the previous level was successfully loaded
271
+ */
272
+ previous(options) {
273
+ // go to previous level
274
+ if (currentLevelIdx - 1 >= 0) {
275
+ return this.load(levelIdx[currentLevelIdx - 1], options);
276
+ }
277
+ else {
278
+ return false;
279
+ }
280
+ },
281
+
282
+ /**
283
+ * return the amount of level preloaded
284
+ * @name levelCount
285
+ * @memberof level
286
+ * @public
287
+ * @returns {number} the amount of level preloaded
288
+ */
289
+ levelCount() {
290
+ return levelIdx.length;
291
+ }
292
+
293
+ };
294
+
295
+ var level$1 = level;
296
+
297
+ export { level$1 as default };
@@ -0,0 +1,141 @@
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 { applyTMXProperties } from './TMXUtils.js';
9
+ import TMXObject from './TMXObject.js';
10
+ import TMXLayer from './TMXLayer.js';
11
+ import { clamp } from '../../math/math.js';
12
+
13
+ /**
14
+ * @classdesc
15
+ * object group definition as defined in Tiled.
16
+ * (group definition is translated into the virtual `me.game.world` using `me.Container`)
17
+ * @ignore
18
+ */
19
+ class TMXGroup {
20
+
21
+ constructor(map, data, z) {
22
+
23
+ /**
24
+ * group name
25
+ * @public
26
+ * @type {string}
27
+ * @name name
28
+ * @memberof TMXGroup
29
+ */
30
+ this.name = data.name;
31
+
32
+ /**
33
+ * group width
34
+ * @public
35
+ * @type {number}
36
+ * @name width
37
+ * @memberof TMXGroup
38
+ */
39
+ this.width = data.width || 0;
40
+
41
+ /**
42
+ * group height
43
+ * @public
44
+ * @type {number}
45
+ * @name height
46
+ * @memberof TMXGroup
47
+ */
48
+ this.height = data.height || 0;
49
+
50
+ /**
51
+ * tint color
52
+ * @public
53
+ * @type {string}
54
+ * @name tintcolor
55
+ * @memberof TMXGroup
56
+ */
57
+ this.tintcolor = data.tintcolor;
58
+
59
+
60
+ /**
61
+ * the group class
62
+ * @public
63
+ * @type {string}
64
+ * @name class
65
+ * @memberof TMXGroup
66
+ */
67
+ this.class = data.class;
68
+
69
+ /**
70
+ * group z order
71
+ * @public
72
+ * @type {number}
73
+ * @name z
74
+ * @memberof TMXGroup
75
+ */
76
+ this.z = z;
77
+
78
+ /**
79
+ * group objects list definition
80
+ * @see TMXObject
81
+ * @public
82
+ * @type {object[]}
83
+ * @name name
84
+ * @memberof TMXGroup
85
+ */
86
+ this.objects = [];
87
+
88
+ var visible = typeof(data.visible) !== "undefined" ? data.visible : true;
89
+ this.opacity = (visible === true) ? clamp(+data.opacity || 1.0, 0.0, 1.0) : 0;
90
+
91
+ // check if we have any user-defined properties
92
+ applyTMXProperties(this, data);
93
+
94
+ // parse all child objects/layers
95
+ if (data.objects) {
96
+ data.objects.forEach((object) => {
97
+ object.tintcolor = this.tintcolor;
98
+ this.objects.push(new TMXObject(map, object, z));
99
+ });
100
+ }
101
+
102
+ if (data.layers) {
103
+ data.layers.forEach((data) => {
104
+ var layer = new TMXLayer(map, data, map.tilewidth, map.tileheight, map.orientation, map.tilesets, z++);
105
+ // set a renderer
106
+ layer.setRenderer(map.getRenderer());
107
+ // resize container accordingly
108
+ this.width = Math.max(this.width, layer.width);
109
+ this.height = Math.max(this.height, layer.height);
110
+ this.objects.push(layer);
111
+ });
112
+ }
113
+ }
114
+
115
+ /**
116
+ * reset function
117
+ * @ignore
118
+ */
119
+ destroy() {
120
+ // clear all allocated objects
121
+ this.objects = null;
122
+ }
123
+
124
+ /**
125
+ * return the object count
126
+ * @ignore
127
+ */
128
+ getObjectCount() {
129
+ return this.objects.length;
130
+ }
131
+
132
+ /**
133
+ * returns the object at the specified index
134
+ * @ignore
135
+ */
136
+ getObjectByIndex(idx) {
137
+ return this.objects[idx];
138
+ }
139
+ }
140
+
141
+ export { TMXGroup as default };