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.
- package/README.md +2 -0
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
- package/dist/melonjs.mjs/_virtual/howler.js +10 -0
- package/dist/melonjs.mjs/_virtual/index.js +10 -0
- package/dist/melonjs.mjs/_virtual/index2.js +10 -0
- package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
- package/dist/melonjs.mjs/application/application.js +238 -0
- package/dist/melonjs.mjs/audio/audio.js +536 -0
- package/dist/melonjs.mjs/camera/camera2d.js +731 -0
- package/dist/melonjs.mjs/entity/entity.js +247 -0
- package/dist/melonjs.mjs/game.js +29 -0
- package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
- package/dist/melonjs.mjs/geometries/line.js +115 -0
- package/dist/melonjs.mjs/geometries/path2d.js +318 -0
- package/dist/melonjs.mjs/geometries/point.js +88 -0
- package/dist/melonjs.mjs/geometries/poly.js +498 -0
- package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
- package/dist/melonjs.mjs/geometries/roundrect.js +167 -0
- package/dist/melonjs.mjs/index.js +248 -0
- package/dist/melonjs.mjs/input/gamepad.js +501 -0
- package/dist/melonjs.mjs/input/input.js +26 -0
- package/dist/melonjs.mjs/input/keyboard.js +470 -0
- package/dist/melonjs.mjs/input/pointer.js +393 -0
- package/dist/melonjs.mjs/input/pointerevent.js +818 -0
- package/dist/melonjs.mjs/lang/deprecated.js +157 -0
- package/dist/melonjs.mjs/level/level.js +297 -0
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +446 -0
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -0
- package/dist/melonjs.mjs/loader/loader.js +801 -0
- package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
- package/dist/melonjs.mjs/math/color.js +616 -0
- package/dist/melonjs.mjs/math/math.js +218 -0
- package/dist/melonjs.mjs/math/matrix2.js +501 -0
- package/dist/melonjs.mjs/math/matrix3.js +679 -0
- package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
- package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
- package/dist/melonjs.mjs/math/vector2.js +526 -0
- package/dist/melonjs.mjs/math/vector3.js +567 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
- package/dist/melonjs.mjs/particles/emitter.js +265 -0
- package/dist/melonjs.mjs/particles/particle.js +186 -0
- package/dist/melonjs.mjs/particles/settings.js +319 -0
- package/dist/melonjs.mjs/physics/body.js +702 -0
- package/dist/melonjs.mjs/physics/bounds.js +459 -0
- package/dist/melonjs.mjs/physics/collision.js +132 -0
- package/dist/melonjs.mjs/physics/detector.js +194 -0
- package/dist/melonjs.mjs/physics/quadtree.js +394 -0
- package/dist/melonjs.mjs/physics/response.js +57 -0
- package/dist/melonjs.mjs/physics/sat.js +483 -0
- package/dist/melonjs.mjs/physics/world.js +219 -0
- package/dist/melonjs.mjs/plugin/plugin.js +141 -0
- package/dist/melonjs.mjs/renderable/collectable.js +60 -0
- package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
- package/dist/melonjs.mjs/renderable/container.js +1016 -0
- package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
- package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
- package/dist/melonjs.mjs/renderable/light2d.js +155 -0
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
- package/dist/melonjs.mjs/renderable/renderable.js +781 -0
- package/dist/melonjs.mjs/renderable/sprite.js +653 -0
- package/dist/melonjs.mjs/renderable/trigger.js +156 -0
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
- package/dist/melonjs.mjs/state/stage.js +236 -0
- package/dist/melonjs.mjs/state/state.js +596 -0
- package/dist/melonjs.mjs/system/device.js +909 -0
- package/dist/melonjs.mjs/system/dom.js +78 -0
- package/dist/melonjs.mjs/system/event.js +537 -0
- package/dist/melonjs.mjs/system/platform.js +41 -0
- package/dist/melonjs.mjs/system/pooling.js +209 -0
- package/dist/melonjs.mjs/system/save.js +157 -0
- package/dist/melonjs.mjs/system/timer.js +286 -0
- package/dist/melonjs.mjs/text/bitmaptext.js +363 -0
- package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
- package/dist/melonjs.mjs/text/glyph.js +65 -0
- package/dist/melonjs.mjs/text/text.js +452 -0
- package/dist/melonjs.mjs/text/textmetrics.js +175 -0
- package/dist/melonjs.mjs/text/textstyle.js +23 -0
- package/dist/melonjs.mjs/tweens/easing.js +336 -0
- package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
- package/dist/melonjs.mjs/tweens/tween.js +479 -0
- package/dist/melonjs.mjs/utils/agent.js +76 -0
- package/dist/melonjs.mjs/utils/array.js +63 -0
- package/dist/melonjs.mjs/utils/file.js +42 -0
- package/dist/melonjs.mjs/utils/function.js +70 -0
- package/dist/melonjs.mjs/utils/string.js +82 -0
- package/dist/melonjs.mjs/utils/utils.js +173 -0
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +806 -0
- package/dist/melonjs.mjs/video/renderer.js +410 -0
- package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
- package/dist/melonjs.mjs/video/texture/cache.js +143 -0
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
- package/dist/melonjs.mjs/video/video.js +462 -0
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +142 -0
- package/dist/melonjs.mjs/video/webgl/glshader.js +167 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
- package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
- package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
- package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +494 -0
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
- package/dist/melonjs.module.d.ts +1298 -1359
- package/dist/melonjs.module.js +2072 -3520
- package/package.json +21 -16
- package/src/application/application.js +4 -5
- package/src/audio/audio.js +32 -32
- package/src/camera/camera2d.js +32 -33
- package/src/entity/entity.js +18 -19
- package/src/geometries/ellipse.js +17 -18
- package/src/geometries/line.js +6 -7
- package/src/geometries/path2d.js +33 -34
- package/src/geometries/point.js +1 -2
- package/src/geometries/poly.js +16 -18
- package/src/geometries/rectangle.js +19 -20
- package/src/geometries/roundrect.js +9 -10
- package/src/input/gamepad.js +15 -15
- package/src/input/keyboard.js +12 -12
- package/src/input/pointer.js +6 -6
- package/src/input/pointerevent.js +12 -12
- package/src/lang/deprecated.js +12 -12
- package/src/level/level.js +25 -25
- package/src/level/tiled/TMXLayer.js +23 -24
- package/src/level/tiled/TMXTile.js +6 -7
- package/src/level/tiled/TMXTileMap.js +8 -10
- package/src/level/tiled/TMXTileset.js +3 -4
- package/src/level/tiled/TMXTilesetGroup.js +1 -2
- package/src/level/tiled/TMXUtils.js +5 -5
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
- package/src/level/tiled/renderer/TMXRenderer.js +20 -21
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
- package/src/loader/loader.js +20 -20
- package/src/math/color.js +21 -22
- package/src/math/math.js +16 -16
- package/src/math/matrix2.js +17 -18
- package/src/math/matrix3.js +26 -27
- package/src/math/observable_vector2.js +15 -16
- package/src/math/observable_vector3.js +17 -18
- package/src/math/vector2.js +10 -11
- package/src/math/vector3.js +11 -12
- package/src/particles/emitter.js +7 -8
- package/src/particles/particle.js +3 -4
- package/src/physics/body.js +29 -30
- package/src/physics/bounds.js +10 -10
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +6 -6
- package/src/physics/quadtree.js +18 -23
- package/src/physics/sat.js +31 -31
- package/src/physics/world.js +6 -7
- package/src/plugin/plugin.js +5 -5
- package/src/renderable/collectable.js +4 -6
- package/src/renderable/colorlayer.js +6 -8
- package/src/renderable/container.js +25 -27
- package/src/renderable/dragndrop.js +14 -14
- package/src/renderable/imagelayer.js +14 -15
- package/src/renderable/light2d.js +4 -5
- package/src/renderable/nineslicesprite.js +17 -18
- package/src/renderable/renderable.js +26 -28
- package/src/renderable/sprite.js +29 -30
- package/src/renderable/trigger.js +16 -17
- package/src/renderable/ui/uibaseelement.js +8 -9
- package/src/renderable/ui/uispriteelement.js +8 -8
- package/src/renderable/ui/uitextbutton.js +15 -15
- package/src/state/stage.js +8 -9
- package/src/state/state.js +17 -17
- package/src/system/device.js +11 -11
- package/src/system/event.js +10 -10
- package/src/system/pooling.js +9 -9
- package/src/system/save.js +2 -2
- package/src/system/timer.js +10 -10
- package/src/text/bitmaptext.js +19 -20
- package/src/text/bitmaptextdata.js +3 -4
- package/src/text/glyph.js +1 -2
- package/src/text/text.js +24 -25
- package/src/text/textmetrics.js +9 -10
- package/src/tweens/tween.js +20 -21
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +4 -4
- package/src/utils/file.js +2 -2
- package/src/utils/function.js +6 -6
- package/src/utils/string.js +5 -5
- package/src/utils/utils.js +4 -4
- package/src/video/canvas/canvas_renderer.js +72 -73
- package/src/video/renderer.js +27 -28
- package/src/video/texture/atlas.js +22 -22
- package/src/video/texture/canvas_texture.js +9 -9
- package/src/video/video.js +17 -17
- package/src/video/webgl/buffer/vertex.js +1 -2
- package/src/video/webgl/glshader.js +12 -12
- package/src/video/webgl/webgl_compositor.js +42 -43
- 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 };
|