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,127 @@
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 BitmapText from '../../text/bitmaptext.js';
10
+ import RoundRect from '../../geometries/roundrect.js';
11
+ import UIBaseElement from './uibaseelement.js';
12
+
13
+ /**
14
+ * @classdesc
15
+ * This is a basic base text button which you can use in your Game UI.
16
+ * @augments UIBaseElement
17
+ */
18
+ class UITextButton extends UIBaseElement {
19
+ /**
20
+ * A Text Button with an outlined background border, filled with background color.
21
+ * It uses a RoundRect as background and changes the background color on hovering over.
22
+ * The background will be drawn with 0.5 opacity, so that the background of the button is
23
+ * slightly shining through.
24
+ * @param {number} x - x pos of the button
25
+ * @param {number} y - y pos of the button
26
+ * @param {string} [settings.font] - The name of the BitmapText font to use
27
+ * @param {number} [settings.size] - The scale factor of the font (default: 1)
28
+ * @param {string} [settings.text] - The text to display (default: 'click me')
29
+ * @param {string} [settings.bindKey] - The key to bind the action to (default: none)
30
+ * @param {string} [settings.backgroundColor] - The css value of a background color
31
+ * @param {string} [settings.hoverColor] - The css value of a color to be used if the pointer hovers over the button
32
+ * @param {string} [settings.borderStrokeColor] - The css value of a color to be used to draw the border
33
+ * @param {boolean} [settings.offScreenCanvas] - Weather to use an offScreen canvas or not
34
+ * @param {string} [settings.fillStyle] - The css value of a tint color to be used to tint the text
35
+ * @param {number} [settings.borderWidth] - Width of the button
36
+ * @param {number} [settings.borderHeight] - Height of the button
37
+ * @example
38
+ * // Create a new Button
39
+ * class PlayButton extends BaseTextButton {
40
+ * constructor(x,y) {
41
+ * super(x,y, {
42
+ * font: 'my-font',
43
+ * text: 'Play',
44
+ * // if you omit the next two, size is calculated by the size of the text
45
+ * borderWidth: 200,
46
+ * borderHeight: 20,
47
+ * });
48
+ * }
49
+ *
50
+ * onClick(){
51
+ * state.change(state.PLAY);
52
+ * }
53
+ * }
54
+ *
55
+ * game.world.addChild(new PlayButton(15,200));
56
+ */
57
+ constructor(x, y, settings) {
58
+ super(x, y);
59
+ settings.font = settings.font || "24Outline";
60
+ settings.size = settings.size || 1;
61
+ settings.text = settings.text || "<Click Me>";
62
+ settings.bindKey = settings.bindKey || -1;
63
+ settings.backgroundColor = settings.backgroundColor || "#00aa00";
64
+ settings.hoverColor = settings.hoverColor || "#00ff00";
65
+ settings.borderStrokeColor = settings.borderStrokeColor || "#000000";
66
+ settings.offScreenCanvas = settings.offScreenCanvas || false;
67
+ settings.fillStyle = settings.fillStyle || "#ffffff";
68
+ settings.lineWidth = settings.lineWidth || 1;
69
+ settings.anchorPoint = settings.anchorPoint || new Vector2d(0, 0);
70
+
71
+ let font = new BitmapText(x, y, settings);
72
+ let dimensions = font.measureText();
73
+ settings.borderWidth = settings.borderWidth || dimensions.width + 16;
74
+ settings.borderHeight = settings.borderHeight || dimensions.height + 16;
75
+
76
+ let border = new RoundRect(
77
+ x,
78
+ y,
79
+ settings.borderWidth,
80
+ settings.borderHeight
81
+ );
82
+ super.setShape(
83
+ x,
84
+ y,
85
+ border.getBounds().width,
86
+ border.getBounds().height
87
+ );
88
+
89
+ // build up
90
+ this.font = font;
91
+ this.dimensions = dimensions;
92
+ this.border = border;
93
+ this.settings = settings;
94
+
95
+ // adjust text position
96
+ this.font.pos.set(
97
+ Math.round((border.width - dimensions.width) / 2) + this.font.pos.x,
98
+ Math.round((border.height - dimensions.height) / 2) +
99
+ this.font.pos.y
100
+ );
101
+ }
102
+
103
+ draw(renderer) {
104
+ renderer.setGlobalAlpha(0.5);
105
+ if (!this.hover) {
106
+ renderer.setColor(this.settings.backgroundColor);
107
+ } else {
108
+ renderer.setColor(this.settings.hoverColor);
109
+ }
110
+
111
+ renderer.fill(this.border);
112
+ renderer.setGlobalAlpha(1);
113
+ renderer.setColor(this.settings.borderStrokeColor);
114
+ renderer.stroke(this.border);
115
+
116
+ // fix: supporting tint
117
+ renderer.setTint(this.font.tint, this.font.getOpacity());
118
+ this.font.draw(
119
+ renderer,
120
+ this.settings.text,
121
+ this.font.pos.x,
122
+ this.font.pos.y
123
+ );
124
+ }
125
+ }
126
+
127
+ export { UITextButton as default };
@@ -0,0 +1,236 @@
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 game from '../game.js';
10
+ import Camera2d from '../camera/camera2d.js';
11
+ import Color from '../math/color.js';
12
+
13
+ // a default camera instance to use across all stages
14
+ var default_camera;
15
+
16
+ // default stage settings
17
+ var default_settings = {
18
+ cameras : []
19
+ };
20
+
21
+ /**
22
+ * @classdesc
23
+ * a default "Stage" object.
24
+ * every "stage" object (title screen, credits, ingame, etc...) to be managed
25
+ * through the state manager must inherit from this base class.
26
+ * @see state
27
+ */
28
+ class Stage {
29
+
30
+ /**
31
+ * @param {object} [settings] - The stage` parameters
32
+ * @param {Camera2d[]} [settings.cameras=[new me.Camera2d()]] - a list of cameras (experimental)
33
+ * @param {Function} [settings.onResetEvent] - called by the state manager when reseting the object
34
+ * @param {Function} [settings.onDestroyEvent] - called by the state manager before switching to another state
35
+ */
36
+ constructor(settings) {
37
+ /**
38
+ * The list of active cameras in this stage.
39
+ * Cameras will be renderered based on this order defined in this list.
40
+ * Only the "default" camera will be resized when the window or canvas is resized.
41
+ * @public
42
+ * @type {Map<Camera2d>}
43
+ * @name cameras
44
+ * @memberof Stage
45
+ */
46
+ this.cameras = new Map();
47
+
48
+ /**
49
+ * The list of active lights in this stage.
50
+ * (Note: Canvas Renderering mode will only properly support one light per stage)
51
+ * @public
52
+ * @type {Map<Light2d>}
53
+ * @name lights
54
+ * @memberof Stage
55
+ * @see Light2d
56
+ * @see Stage.ambientLight
57
+ * @example
58
+ * // create a white spot light
59
+ * var whiteLight = new me.Light2d(0, 0, 140, "#fff", 0.7);
60
+ * // and add the light to this current stage
61
+ * this.lights.set("whiteLight", whiteLight);
62
+ * // set a dark ambient light
63
+ * this.ambientLight.parseCSS("#1117");
64
+ * // make the light follow the mouse
65
+ * me.input.registerPointerEvent("pointermove", me.game.viewport, (event) => {
66
+ * whiteLight.centerOn(event.gameX, event.gameY);
67
+ * });
68
+ */
69
+ this.lights = new Map();
70
+
71
+ /**
72
+ * an ambient light that will be added to the stage rendering
73
+ * @public
74
+ * @type {Color}
75
+ * @name ambientLight
76
+ * @memberof Stage
77
+ * @default "#000000"
78
+ * @see Light2d
79
+ */
80
+ this.ambientLight = new Color(0, 0, 0, 0);
81
+
82
+ /**
83
+ * The given constructor options
84
+ * @public
85
+ * @name settings
86
+ * @memberof Stage
87
+ * @type {object}
88
+ */
89
+ this.settings = Object.assign(default_settings, settings || {});
90
+ }
91
+
92
+ /**
93
+ * Object reset function
94
+ * @ignore
95
+ */
96
+ reset() {
97
+
98
+ // add all defined cameras
99
+ this.settings.cameras.forEach((camera) => {
100
+ this.cameras.set(camera.name, camera);
101
+ });
102
+
103
+ // empty or no default camera
104
+ if (this.cameras.has("default") === false) {
105
+ if (typeof default_camera === "undefined") {
106
+ var width = renderer.getWidth();
107
+ var height = renderer.getHeight();
108
+ // new default camera instance
109
+ default_camera = new Camera2d(0, 0, width, height);
110
+ }
111
+ this.cameras.set("default", default_camera);
112
+ }
113
+
114
+ // reset the game
115
+ game.reset();
116
+
117
+ // call the onReset Function
118
+ this.onResetEvent.apply(this, arguments);
119
+ }
120
+
121
+ /**
122
+ * update function
123
+ * @name update
124
+ * @memberof Stage
125
+ * @ignore
126
+ * @param {number} dt - time since the last update in milliseconds.
127
+ * @returns {boolean}
128
+ */
129
+ update(dt) {
130
+ // update all objects (and pass the elapsed time since last frame)
131
+ var isDirty = game.world.update(dt);
132
+
133
+ // update the camera/viewport
134
+ // iterate through all cameras
135
+ this.cameras.forEach((camera) => {
136
+ if (camera.update(dt) === true) {
137
+ isDirty = true;
138
+ }
139
+ });
140
+
141
+ // update all lights
142
+ this.lights.forEach((light) => {
143
+ if (light.update(dt) === true) {
144
+ isDirty = true;
145
+ }
146
+ });
147
+
148
+ return isDirty;
149
+ }
150
+
151
+ /**
152
+ * draw the current stage
153
+ * @name draw
154
+ * @memberof Stage
155
+ * @ignore
156
+ * @param {CanvasRenderer|WebGLRenderer} renderer - a renderer object
157
+ */
158
+ draw(renderer) {
159
+ // iterate through all cameras
160
+ this.cameras.forEach((camera) => {
161
+ // render the root container
162
+ camera.draw(renderer, game.world);
163
+
164
+ // render the ambient light
165
+ if (this.ambientLight.alpha !== 0) {
166
+ renderer.save();
167
+ // iterate through all lights
168
+ this.lights.forEach((light) => {
169
+ // cut out all lights visible areas
170
+ renderer.setMask(light.getVisibleArea(), true);
171
+ });
172
+ // fill the screen with the ambient color
173
+ renderer.setColor(this.ambientLight);
174
+ renderer.fillRect(0, 0, camera.width, camera.height);
175
+ // clear all masks
176
+ renderer.clearMask();
177
+ renderer.restore();
178
+ }
179
+
180
+ // render all lights
181
+ this.lights.forEach((light) => {
182
+ light.preDraw(renderer, game.world);
183
+ light.draw(renderer, game.world);
184
+ light.postDraw(renderer, game.world);
185
+ });
186
+ });
187
+ }
188
+
189
+ /**
190
+ * destroy function
191
+ * @ignore
192
+ */
193
+ destroy() {
194
+ // clear all cameras
195
+ this.cameras.clear();
196
+ // clear all lights
197
+ this.lights.forEach((light) => {
198
+ light.destroy();
199
+ });
200
+ this.lights.clear();
201
+ // notify the object
202
+ this.onDestroyEvent.apply(this, arguments);
203
+ }
204
+
205
+ /**
206
+ * onResetEvent function<br>
207
+ * called by the state manager when reseting the object
208
+ * this is typically where you will load a level, add renderables, etc...
209
+ * @name onResetEvent
210
+ * @memberof Stage
211
+ * @param {object} [...arguments] - optional arguments passed when switching state
212
+ * @see state#change
213
+ */
214
+ onResetEvent() {
215
+ // execute onResetEvent function if given through the constructor
216
+ if (typeof this.settings.onResetEvent === "function") {
217
+ this.settings.onResetEvent.apply(this, arguments);
218
+ }
219
+
220
+ }
221
+
222
+ /**
223
+ * onDestroyEvent function<br>
224
+ * called by the state manager before switching to another state
225
+ * @name onDestroyEvent
226
+ * @memberof Stage
227
+ */
228
+ onDestroyEvent() {
229
+ // execute onDestroyEvent function if given through the constructor
230
+ if (typeof this.settings.onDestroyEvent === "function") {
231
+ this.settings.onDestroyEvent.apply(this, arguments);
232
+ }
233
+ }
234
+ }
235
+
236
+ export { Stage as default };