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
package/README.md CHANGED
@@ -161,6 +161,7 @@ melonJS 2 now only provides an ES6 Bundle :
161
161
  | build | description |
162
162
  | ------------------- | ----------- |
163
163
  | `melonjs.module.js` | the ES6 Module (ESM) Bundle |
164
+ | `melonjs.mjs` | a tree-shakeable ES6 Module Directory |
164
165
  | `melonjs.module.d.ts` | typescript declaration file for the ES6 Module (ESM) Bundle |
165
166
 
166
167
  >Note: if you need your application to be compatible with ES5, refer to our [boilerplate](https://github.com/melonjs/es6-boilerplate) that provides automatic transpiling to ES5.
@@ -203,6 +204,7 @@ Then build the melonJS source by running:
203
204
 
204
205
  The generated files will be available under the `build` directory :
205
206
  - `melonjs.module.js` : plain ES6 module
207
+ - `melonjs.module.js` : a ES6 chunk directory used for tree-shaking
206
208
  - `melonjs.module.d.ts` : typescript declaration for the ES6 Module
207
209
 
208
210
  To run the melonJS test suite simply use the following:
@@ -0,0 +1,10 @@
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
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
9
+
10
+ export { commonjsGlobal };
@@ -0,0 +1,10 @@
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
+ var arraymultimap = {};
9
+
10
+ export { arraymultimap as __exports };
@@ -0,0 +1,10 @@
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
+ var earcut = {exports: {}};
9
+
10
+ export { earcut as e };
@@ -0,0 +1,10 @@
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
+ var howler = {};
9
+
10
+ export { howler as __exports };
@@ -0,0 +1,10 @@
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
+ var src = {};
9
+
10
+ export { src as __exports };
@@ -0,0 +1,10 @@
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
+ var eventemitter3 = {exports: {}};
9
+
10
+ export { eventemitter3 as e };
@@ -0,0 +1,10 @@
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
+ var multimap = {};
9
+
10
+ export { multimap as __exports };
@@ -0,0 +1,10 @@
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
+ var setmultimap = {};
9
+
10
+ export { setmultimap as __exports };
@@ -0,0 +1,238 @@
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 { renderer } from '../video/video.js';
9
+ import { emit, GAME_INIT, GAME_RESET, GAME_BEFORE_UPDATE, GAME_UPDATE, GAME_AFTER_UPDATE, GAME_BEFORE_DRAW, GAME_AFTER_DRAW } from '../system/event.js';
10
+ import timer from '../system/timer.js';
11
+ import state from '../state/state.js';
12
+ import World from '../physics/world.js';
13
+
14
+ /**
15
+ * @classdesc
16
+ * An Application represents a single melonJS game.
17
+ * An Application is responsible for updating (each frame) all the related object status and draw them.
18
+ * @see game
19
+ */
20
+ class Application {
21
+ constructor() {
22
+ /**
23
+ * a reference to the current active stage "default" camera
24
+ * @public
25
+ * @type {Camera2d}
26
+ */
27
+ this.viewport = undefined;
28
+
29
+ /**
30
+ * a reference to the game world, <br>
31
+ * a world is a virtual environment containing all the game objects
32
+ * @public
33
+ * @type {World}
34
+ */
35
+ this.world = undefined;
36
+
37
+ /**
38
+ * when true, all objects will be added under the root world container.<br>
39
+ * When false, a `me.Container` object will be created for each corresponding groups
40
+ * @public
41
+ * @type {boolean}
42
+ * @default true
43
+ */
44
+ this.mergeGroup = true;
45
+
46
+ /**
47
+ * Specify the property to be used when sorting renderables.
48
+ * Accepted values : "x", "y", "z"
49
+ * @public
50
+ * @type {string}
51
+ * @default "z"
52
+ */
53
+ this.sortOn = "z";
54
+
55
+ /**
56
+ * Last time the game update loop was executed. <br>
57
+ * Use this value to implement frame prediction in drawing events,
58
+ * for creating smooth motion while running game update logic at
59
+ * a lower fps.
60
+ * @public
61
+ * @type {DOMHighResTimeStamp}
62
+ * @name lastUpdate
63
+ * @memberof Application
64
+ */
65
+ this.lastUpdate = 0;
66
+
67
+ // to know when we have to refresh the display
68
+ this.isDirty = true;
69
+
70
+ // always refresh the display when updatesPerSecond are lower than fps
71
+ this.isAlwaysDirty = false;
72
+
73
+ // frame counter for frameSkipping
74
+ // reset the frame counter
75
+ this.frameCounter = 0;
76
+ this.frameRate = 1;
77
+
78
+ // time accumulation for multiple update calls
79
+ this.accumulator = 0.0;
80
+ this.accumulatorMax = 0.0;
81
+ this.accumulatorUpdateDelta = 0;
82
+
83
+ // min update step size
84
+ this.stepSize = 1000 / 60;
85
+ this.updateDelta = 0;
86
+ this.lastUpdateStart = null;
87
+ this.updateAverageDelta = 0;
88
+ }
89
+
90
+ /**
91
+ * init the game instance (create a physic world, update starting time, etc..)
92
+ */
93
+ init() {
94
+ // create a new physic world
95
+ this.world = new World();
96
+ // set the reference to this application instance
97
+ this.world.app = this;
98
+ this.lastUpdate = globalThis.performance.now();
99
+ emit(GAME_INIT, this);
100
+ }
101
+
102
+ /**
103
+ * reset the game Object manager
104
+ * destroy all current objects
105
+ */
106
+ reset() {
107
+ // point to the current active stage "default" camera
108
+ var current = state.get();
109
+ if (typeof current !== "undefined") {
110
+ this.viewport = current.cameras.get("default");
111
+ }
112
+
113
+ // publish reset notification
114
+ emit(GAME_RESET);
115
+
116
+ // Refresh internal variables for framerate limiting
117
+ this.updateFrameRate();
118
+ }
119
+
120
+ /**
121
+ * Fired when a level is fully loaded and all renderable instantiated. <br>
122
+ * Additionnaly the level id will also be passed to the called function.
123
+ * @example
124
+ * // call myFunction () everytime a level is loaded
125
+ * me.game.onLevelLoaded = this.myFunction.bind(this);
126
+ */
127
+ onLevelLoaded() {}
128
+
129
+ /**
130
+ * Update the renderer framerate using the system config variables.
131
+ * @see timer.maxfps
132
+ * @see World.fps
133
+ */
134
+ updateFrameRate() {
135
+ // reset the frame counter
136
+ this.frameCounter = 0;
137
+ this.frameRate = ~~(0.5 + 60 / timer.maxfps);
138
+
139
+ // set step size based on the updatesPerSecond
140
+ this.stepSize = (1000 / this.world.fps);
141
+ this.accumulator = 0.0;
142
+ this.accumulatorMax = this.stepSize * 10;
143
+
144
+ // display should always re-draw when update speed doesn't match fps
145
+ // this means the user intends to write position prediction drawing logic
146
+ this.isAlwaysDirty = (timer.maxfps > this.world.fps);
147
+ }
148
+
149
+ /**
150
+ * Returns the parent container of the specified Child in the game world
151
+ * @param {Renderable} child
152
+ * @returns {Container}
153
+ */
154
+ getParentContainer(child) {
155
+ return child.ancestor;
156
+ }
157
+
158
+ /**
159
+ * force the redraw (not update) of all objects
160
+ */
161
+ repaint() {
162
+ this.isDirty = true;
163
+ }
164
+
165
+ /**
166
+ * update all objects related to this game active scene/stage
167
+ * @param {number} time - current timestamp as provided by the RAF callback
168
+ * @param {Stage} stage - the current stage
169
+ */
170
+ update(time, stage) {
171
+ // handle frame skipping if required
172
+ if ((++this.frameCounter % this.frameRate) === 0) {
173
+ // reset the frame counter
174
+ this.frameCounter = 0;
175
+
176
+ // publish notification
177
+ emit(GAME_BEFORE_UPDATE, time);
178
+
179
+ this.accumulator += timer.getDelta();
180
+ this.accumulator = Math.min(this.accumulator, this.accumulatorMax);
181
+
182
+ this.updateDelta = (timer.interpolation) ? timer.getDelta() : this.stepSize;
183
+ this.accumulatorUpdateDelta = (timer.interpolation) ? this.updateDelta : Math.max(this.updateDelta, this.updateAverageDelta);
184
+
185
+ while (this.accumulator >= this.accumulatorUpdateDelta || timer.interpolation) {
186
+ this.lastUpdateStart = globalThis.performance.now();
187
+
188
+ // game update event
189
+ if (state.isPaused() !== true) {
190
+ emit(GAME_UPDATE, time);
191
+ }
192
+
193
+ // update all objects (and pass the elapsed time since last frame)
194
+ this.isDirty = stage.update(this.updateDelta) || this.isDirty;
195
+
196
+ this.lastUpdate = globalThis.performance.now();
197
+ this.updateAverageDelta = this.lastUpdate - this.lastUpdateStart;
198
+
199
+ this.accumulator -= this.accumulatorUpdateDelta;
200
+ if (timer.interpolation) {
201
+ this.accumulator = 0;
202
+ break;
203
+ }
204
+ }
205
+
206
+ // publish notification
207
+ emit(GAME_AFTER_UPDATE, this.lastUpdate);
208
+ }
209
+ }
210
+
211
+ /**
212
+ * draw the active scene/stage associated to this game
213
+ * @param {Stage} stage - the current stage
214
+ */
215
+ draw(stage) {
216
+ if (renderer.isContextValid === true && (this.isDirty || this.isAlwaysDirty)) {
217
+ // publish notification
218
+ emit(GAME_BEFORE_DRAW, globalThis.performance.now());
219
+
220
+ // prepare renderer to draw a new frame
221
+ renderer.clear();
222
+
223
+ // render the stage
224
+ stage.draw(renderer);
225
+
226
+ // set back to flag
227
+ this.isDirty = false;
228
+
229
+ // flush/render our frame
230
+ renderer.flush();
231
+
232
+ // publish notification
233
+ emit(GAME_AFTER_DRAW, globalThis.performance.now());
234
+ }
235
+ }
236
+ }
237
+
238
+ export { Application as default };