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,224 @@
|
|
|
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 { emit, DRAGSTART, DRAGEND, on, POINTERMOVE, off } from '../system/event.js';
|
|
10
|
+
import Renderable from './renderable.js';
|
|
11
|
+
import { registerPointerEvent, releasePointerEvent } from '../input/pointerevent.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @classdesc
|
|
15
|
+
* A Draggable base object
|
|
16
|
+
* @see DropTarget
|
|
17
|
+
* @augments Renderable
|
|
18
|
+
*/
|
|
19
|
+
class Draggable extends Renderable {
|
|
20
|
+
/**
|
|
21
|
+
* @param {number} x - the x coordinates of the draggable object
|
|
22
|
+
* @param {number} y - the y coordinates of the draggable object
|
|
23
|
+
* @param {number} width - draggable object width
|
|
24
|
+
* @param {number} height - draggable object height
|
|
25
|
+
*/
|
|
26
|
+
constructor(x, y, width, height) {
|
|
27
|
+
super(x, y, width, height);
|
|
28
|
+
this.isKinematic = false;
|
|
29
|
+
this.dragging = false;
|
|
30
|
+
this.dragId = null;
|
|
31
|
+
this.grabOffset = new Vector2d(0, 0);
|
|
32
|
+
this.initEvents();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Initializes the events the modules needs to listen to
|
|
37
|
+
* It translates the pointer events to me.events
|
|
38
|
+
* in order to make them pass through the system and to make
|
|
39
|
+
* this module testable. Then we subscribe this module to the
|
|
40
|
+
* transformed events.
|
|
41
|
+
* @name initEvents
|
|
42
|
+
* @memberof Draggable
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
initEvents() {
|
|
46
|
+
registerPointerEvent("pointerdown", this, (e) => { emit(DRAGSTART, e, this); });
|
|
47
|
+
registerPointerEvent("pointerup", this, (e) => { emit(DRAGEND, e, this); });
|
|
48
|
+
registerPointerEvent("pointercancel", this, (e) => { emit(DRAGEND, e, this); });
|
|
49
|
+
on(POINTERMOVE, this.dragMove.bind(this));
|
|
50
|
+
on(DRAGSTART, (e, draggable) => {
|
|
51
|
+
if (draggable === this) {
|
|
52
|
+
this.dragStart(e);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
on(DRAGEND, (e, draggable) => {
|
|
56
|
+
if (draggable === this) {
|
|
57
|
+
this.dragEnd(e);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Gets called when the user starts dragging the entity
|
|
64
|
+
* @name dragStart
|
|
65
|
+
* @memberof Draggable
|
|
66
|
+
* @param {object} e - the pointer event
|
|
67
|
+
* @returns {boolean} false if the object is being dragged
|
|
68
|
+
*/
|
|
69
|
+
dragStart(e) {
|
|
70
|
+
if (this.dragging === false) {
|
|
71
|
+
this.dragging = true;
|
|
72
|
+
this.grabOffset.set(e.gameX, e.gameY);
|
|
73
|
+
this.grabOffset.sub(this.pos);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Gets called when the user drags this entity around
|
|
80
|
+
* @name dragMove
|
|
81
|
+
* @memberof Draggable
|
|
82
|
+
* @param {object} e - the pointer event
|
|
83
|
+
*/
|
|
84
|
+
dragMove(e) {
|
|
85
|
+
if (this.dragging === true) {
|
|
86
|
+
this.pos.set(e.gameX, e.gameY, this.pos.z); //TODO : z ?
|
|
87
|
+
this.pos.sub(this.grabOffset);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Gets called when the user stops dragging the entity
|
|
93
|
+
* @name dragEnd
|
|
94
|
+
* @memberof Draggable
|
|
95
|
+
* @returns {boolean} false if the object stopped being dragged
|
|
96
|
+
*/
|
|
97
|
+
dragEnd() {
|
|
98
|
+
if (this.dragging === true) {
|
|
99
|
+
this.dragging = false;
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Destructor
|
|
106
|
+
* @name destroy
|
|
107
|
+
* @memberof Draggable
|
|
108
|
+
* @ignore
|
|
109
|
+
*/
|
|
110
|
+
destroy() {
|
|
111
|
+
off(POINTERMOVE, this.dragMove);
|
|
112
|
+
off(DRAGSTART, this.dragStart);
|
|
113
|
+
off(DRAGEND, this.dragEnd);
|
|
114
|
+
releasePointerEvent("pointerdown", this);
|
|
115
|
+
releasePointerEvent("pointerup", this);
|
|
116
|
+
releasePointerEvent("pointercancel", this);
|
|
117
|
+
super.destroy();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @classdesc
|
|
123
|
+
* a base drop target object
|
|
124
|
+
* @see Draggable
|
|
125
|
+
* @augments Renderable
|
|
126
|
+
*/
|
|
127
|
+
class DropTarget extends Renderable {
|
|
128
|
+
/**
|
|
129
|
+
* @param {number} x - the x coordinates of the drop target
|
|
130
|
+
* @param {number} y - the y coordinates of the drop target
|
|
131
|
+
* @param {number} width - drop target width
|
|
132
|
+
* @param {number} height - drop target height
|
|
133
|
+
*/
|
|
134
|
+
constructor(x, y, width, height) {
|
|
135
|
+
super(x, y, width, height);
|
|
136
|
+
|
|
137
|
+
this.isKinematic = false;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* constant for the overlaps method
|
|
141
|
+
* @public
|
|
142
|
+
* @constant
|
|
143
|
+
* @type {string}
|
|
144
|
+
* @name CHECKMETHOD_OVERLAP
|
|
145
|
+
* @memberof DropTarget
|
|
146
|
+
*/
|
|
147
|
+
this.CHECKMETHOD_OVERLAP = "overlaps";
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* constant for the contains method
|
|
151
|
+
* @public
|
|
152
|
+
* @constant
|
|
153
|
+
* @type {string}
|
|
154
|
+
* @name CHECKMETHOD_CONTAINS
|
|
155
|
+
* @memberof DropTarget
|
|
156
|
+
*/
|
|
157
|
+
this.CHECKMETHOD_CONTAINS = "contains";
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* the checkmethod we want to use
|
|
161
|
+
* @public
|
|
162
|
+
* @constant
|
|
163
|
+
* @type {string}
|
|
164
|
+
* @name checkMethod
|
|
165
|
+
* @default "overlaps"
|
|
166
|
+
* @memberof DropTarget
|
|
167
|
+
*/
|
|
168
|
+
this.checkMethod = this.CHECKMETHOD_OVERLAP;
|
|
169
|
+
|
|
170
|
+
on(DRAGEND, this.checkOnMe, this);
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Sets the collision method which is going to be used to check a valid drop
|
|
176
|
+
* @name setCheckMethod
|
|
177
|
+
* @memberof DropTarget
|
|
178
|
+
* @param {string} checkMethod - the checkmethod (defaults to CHECKMETHOD_OVERLAP)
|
|
179
|
+
*/
|
|
180
|
+
setCheckMethod(checkMethod) {
|
|
181
|
+
// We can improve this check,
|
|
182
|
+
// because now you can use every method in theory
|
|
183
|
+
if (typeof(this.getBounds()[this.checkMethod]) === "function") {
|
|
184
|
+
this.checkMethod = checkMethod;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Checks if a dropped entity is dropped on the current entity
|
|
190
|
+
* @name checkOnMe
|
|
191
|
+
* @memberof DropTarget
|
|
192
|
+
* @param {object} e - the triggering event
|
|
193
|
+
* @param {Draggable} draggable - the draggable object that is dropped
|
|
194
|
+
*/
|
|
195
|
+
checkOnMe(e, draggable) {
|
|
196
|
+
if (draggable && this.getBounds()[this.checkMethod](draggable.getBounds())) {
|
|
197
|
+
// call the drop method on the current entity
|
|
198
|
+
this.drop(draggable);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Gets called when a draggable entity is dropped on the current entity
|
|
204
|
+
* @name drop
|
|
205
|
+
* @memberof DropTarget
|
|
206
|
+
* @param {Draggable} draggable - the draggable object that is dropped
|
|
207
|
+
*/
|
|
208
|
+
drop(draggable) { // eslint-disable-line no-unused-vars
|
|
209
|
+
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Destructor
|
|
214
|
+
* @name destroy
|
|
215
|
+
* @memberof DropTarget
|
|
216
|
+
* @ignore
|
|
217
|
+
*/
|
|
218
|
+
destroy() {
|
|
219
|
+
off(DRAGEND, this.checkOnMe);
|
|
220
|
+
super.destroy();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export { Draggable, DropTarget };
|
|
@@ -0,0 +1,305 @@
|
|
|
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 { on, ONCONTEXT_RESTORED, VIEWPORT_ONCHANGE, VIEWPORT_ONRESIZE, once, off, LEVEL_LOADED } from '../system/event.js';
|
|
10
|
+
import pool from '../system/pooling.js';
|
|
11
|
+
import game from '../game.js';
|
|
12
|
+
import Sprite from './sprite.js';
|
|
13
|
+
import { isNumeric } from '../utils/string.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @classdesc
|
|
17
|
+
* a generic Image Layer Object
|
|
18
|
+
* @augments Renderable
|
|
19
|
+
*/
|
|
20
|
+
class ImageLayer extends Sprite {
|
|
21
|
+
/**
|
|
22
|
+
* @param {number} x - x coordinate
|
|
23
|
+
* @param {number} y - y coordinate
|
|
24
|
+
* @param {object} settings - ImageLayer properties
|
|
25
|
+
* @param {HTMLImageElement|HTMLCanvasElement|string} settings.image - Image reference. See {@link loader.getImage}
|
|
26
|
+
* @param {string} [settings.name="me.ImageLayer"] - layer name
|
|
27
|
+
* @param {number} [settings.z=0] - z-index position
|
|
28
|
+
* @param {number|Vector2d} [settings.ratio=1.0] - Scrolling ratio to be applied. See {@link ImageLayer#ratio}
|
|
29
|
+
* @param {string} [settings.repeat='repeat'] - define if and how an Image Layer should be repeated (accepted values are 'repeat', 'repeat-x', 'repeat-y', 'no-repeat'). See {@link ImageLayer#repeat}
|
|
30
|
+
* @param {number|Vector2d} [settings.anchorPoint=0.0] - Image origin. See {@link ImageLayer#anchorPoint}
|
|
31
|
+
* @example
|
|
32
|
+
* // create a repetitive background pattern on the X axis using the citycloud image asset
|
|
33
|
+
* me.game.world.addChild(new me.ImageLayer(0, 0, {
|
|
34
|
+
* image:"citycloud",
|
|
35
|
+
* repeat :"repeat-x"
|
|
36
|
+
* }), 1);
|
|
37
|
+
*/
|
|
38
|
+
constructor(x, y, settings) {
|
|
39
|
+
// call the constructor
|
|
40
|
+
super(x, y, settings);
|
|
41
|
+
|
|
42
|
+
// render in screen coordinates
|
|
43
|
+
this.floating = true;
|
|
44
|
+
|
|
45
|
+
// image drawing offset
|
|
46
|
+
this.offset.set(x, y);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Define the image scrolling ratio<br>
|
|
50
|
+
* Scrolling speed is defined by multiplying the viewport delta position by the specified ratio.
|
|
51
|
+
* Setting this vector to <0.0,0.0> will disable automatic scrolling.<br>
|
|
52
|
+
* To specify a value through Tiled, use one of the following format : <br>
|
|
53
|
+
* - a number, to change the value for both axis <br>
|
|
54
|
+
* - a json expression like `json:{"x":0.5,"y":0.5}` if you wish to specify a different value for both x and y
|
|
55
|
+
* @public
|
|
56
|
+
* @type {Vector2d}
|
|
57
|
+
* @default <1.0,1.0>
|
|
58
|
+
* @name ImageLayer#ratio
|
|
59
|
+
*/
|
|
60
|
+
this.ratio = pool.pull("Vector2d", 1.0, 1.0);
|
|
61
|
+
|
|
62
|
+
if (typeof(settings.ratio) !== "undefined") {
|
|
63
|
+
// little hack for backward compatiblity
|
|
64
|
+
if (isNumeric(settings.ratio)) {
|
|
65
|
+
this.ratio.set(settings.ratio, +settings.ratio);
|
|
66
|
+
} else /* vector */ {
|
|
67
|
+
this.ratio.setV(settings.ratio);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (typeof(settings.anchorPoint) === "undefined") {
|
|
72
|
+
/**
|
|
73
|
+
* Define how the image is anchored to the viewport bounds<br>
|
|
74
|
+
* By default, its upper-left corner is anchored to the viewport bounds upper left corner.<br>
|
|
75
|
+
* The anchorPoint is a unit vector where each component falls in range [0.0,1.0].<br>
|
|
76
|
+
* Some common examples:<br>
|
|
77
|
+
* - <0.0,0.0> : (Default) Anchor image to the upper-left corner of viewport bounds
|
|
78
|
+
* - <0.5,0.5> : Center the image within viewport bounds
|
|
79
|
+
* - <1.0,1.0> : Anchor image to the lower-right corner of viewport bounds
|
|
80
|
+
* To specify a value through Tiled, use one of the following format : <br>
|
|
81
|
+
* - a number, to change the value for both axis <br>
|
|
82
|
+
* - a json expression like `json:{"x":0.5,"y":0.5}` if you wish to specify a different value for both x and y
|
|
83
|
+
* @public
|
|
84
|
+
* @member {Vector2d}
|
|
85
|
+
* @default <0.0,0.0>
|
|
86
|
+
* @name ImageLayer#anchorPoint
|
|
87
|
+
*/
|
|
88
|
+
this.anchorPoint.set(0, 0);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (typeof(settings.anchorPoint) === "number") {
|
|
92
|
+
this.anchorPoint.set(settings.anchorPoint, settings.anchorPoint);
|
|
93
|
+
}
|
|
94
|
+
else /* vector */ {
|
|
95
|
+
this.anchorPoint.setV(settings.anchorPoint);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.repeat = settings.repeat || "repeat";
|
|
100
|
+
|
|
101
|
+
// on context lost, all previous textures are destroyed
|
|
102
|
+
on(ONCONTEXT_RESTORED, this.createPattern, this);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Define if and how an Image Layer should be repeated.<br>
|
|
107
|
+
* By default, an Image Layer is repeated both vertically and horizontally.<br>
|
|
108
|
+
* Acceptable values : <br>
|
|
109
|
+
* - 'repeat' - The background image will be repeated both vertically and horizontally <br>
|
|
110
|
+
* - 'repeat-x' - The background image will be repeated only horizontally.<br>
|
|
111
|
+
* - 'repeat-y' - The background image will be repeated only vertically.<br>
|
|
112
|
+
* - 'no-repeat' - The background-image will not be repeated.<br>
|
|
113
|
+
* @public
|
|
114
|
+
* @type {string}
|
|
115
|
+
* @default 'repeat'
|
|
116
|
+
* @name ImageLayer#repeat
|
|
117
|
+
*/
|
|
118
|
+
|
|
119
|
+
get repeat() {
|
|
120
|
+
return this._repeat;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
set repeat(value) {
|
|
124
|
+
this._repeat = value;
|
|
125
|
+
switch (this._repeat) {
|
|
126
|
+
case "no-repeat" :
|
|
127
|
+
this.repeatX = false;
|
|
128
|
+
this.repeatY = false;
|
|
129
|
+
break;
|
|
130
|
+
case "repeat-x" :
|
|
131
|
+
this.repeatX = true;
|
|
132
|
+
this.repeatY = false;
|
|
133
|
+
break;
|
|
134
|
+
case "repeat-y" :
|
|
135
|
+
this.repeatX = false;
|
|
136
|
+
this.repeatY = true;
|
|
137
|
+
break;
|
|
138
|
+
default : // "repeat"
|
|
139
|
+
this.repeatX = true;
|
|
140
|
+
this.repeatY = true;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
this.resize(game.viewport.width, game.viewport.height);
|
|
144
|
+
this.createPattern();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
// called when the layer is added to the game world or a container
|
|
149
|
+
onActivateEvent() {
|
|
150
|
+
// register to the viewport change notification
|
|
151
|
+
on(VIEWPORT_ONCHANGE, this.updateLayer, this);
|
|
152
|
+
on(VIEWPORT_ONRESIZE, this.resize, this);
|
|
153
|
+
// force a first refresh when the level is loaded
|
|
154
|
+
once(LEVEL_LOADED, () => {
|
|
155
|
+
this.updateLayer(game.viewport.pos);
|
|
156
|
+
});
|
|
157
|
+
// in case the level is not added to the root container,
|
|
158
|
+
// the onActivateEvent call happens after the LEVEL_LOADED event
|
|
159
|
+
// so we need to force a first update
|
|
160
|
+
if (this.ancestor.root !== true) {
|
|
161
|
+
this.updateLayer(game.viewport.pos);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* resize the Image Layer to match the given size
|
|
167
|
+
* @name resize
|
|
168
|
+
* @memberof ImageLayer
|
|
169
|
+
* @param {number} w - new width
|
|
170
|
+
* @param {number} h - new height
|
|
171
|
+
*/
|
|
172
|
+
resize(w, h) {
|
|
173
|
+
return super.resize(
|
|
174
|
+
this.repeatX ? Infinity : w,
|
|
175
|
+
this.repeatY ? Infinity : h
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* createPattern function
|
|
181
|
+
* @ignore
|
|
182
|
+
*/
|
|
183
|
+
createPattern() {
|
|
184
|
+
this._pattern = renderer.createPattern(this.image, this._repeat);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* updateLayer function
|
|
189
|
+
* @ignore
|
|
190
|
+
*/
|
|
191
|
+
updateLayer(vpos) {
|
|
192
|
+
var rx = this.ratio.x,
|
|
193
|
+
ry = this.ratio.y;
|
|
194
|
+
|
|
195
|
+
if (rx === 0 && ry === 0) {
|
|
196
|
+
// static image
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
var width = this.width,
|
|
201
|
+
height = this.height,
|
|
202
|
+
bw = game.viewport.bounds.width,
|
|
203
|
+
bh = game.viewport.bounds.height,
|
|
204
|
+
ax = this.anchorPoint.x,
|
|
205
|
+
ay = this.anchorPoint.y,
|
|
206
|
+
|
|
207
|
+
/*
|
|
208
|
+
* Automatic positioning
|
|
209
|
+
*
|
|
210
|
+
* See https://github.com/melonjs/melonJS/issues/741#issuecomment-138431532
|
|
211
|
+
* for a thorough description of how this works.
|
|
212
|
+
*/
|
|
213
|
+
x = ax * (rx - 1) * (bw - game.viewport.width) + this.offset.x - rx * vpos.x,
|
|
214
|
+
y = ay * (ry - 1) * (bh - game.viewport.height) + this.offset.y - ry * vpos.y;
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
// Repeat horizontally; start drawing from left boundary
|
|
218
|
+
if (this.repeatX) {
|
|
219
|
+
this.pos.x = x % width;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
this.pos.x = x;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Repeat vertically; start drawing from top boundary
|
|
226
|
+
if (this.repeatY) {
|
|
227
|
+
this.pos.y = y % height;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
this.pos.y = y;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
this.isDirty = true;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* override the default predraw function
|
|
238
|
+
* as repeat and anchor are managed directly in the draw method
|
|
239
|
+
* @ignore
|
|
240
|
+
*/
|
|
241
|
+
preDraw(renderer) {
|
|
242
|
+
// save the context
|
|
243
|
+
renderer.save();
|
|
244
|
+
// apply the defined alpha value
|
|
245
|
+
renderer.setGlobalAlpha(renderer.globalAlpha() * this.getOpacity());
|
|
246
|
+
|
|
247
|
+
// apply the defined tint, if any
|
|
248
|
+
renderer.setTint(this.tint);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* draw this ImageLayer (automatically called by melonJS)
|
|
253
|
+
* @name draw
|
|
254
|
+
* @memberof ImageLayer
|
|
255
|
+
* @protected
|
|
256
|
+
* @param {CanvasRenderer|WebGLRenderer} renderer - a renderer instance
|
|
257
|
+
* @param {Camera2d} [viewport] - the viewport to (re)draw
|
|
258
|
+
*/
|
|
259
|
+
draw(renderer, viewport) {
|
|
260
|
+
var width = this.width,
|
|
261
|
+
height = this.height,
|
|
262
|
+
bw = viewport.bounds.width,
|
|
263
|
+
bh = viewport.bounds.height,
|
|
264
|
+
ax = this.anchorPoint.x,
|
|
265
|
+
ay = this.anchorPoint.y,
|
|
266
|
+
x = this.pos.x,
|
|
267
|
+
y = this.pos.y;
|
|
268
|
+
|
|
269
|
+
if (this.ratio.x === 0 && this.ratio.y === 0) {
|
|
270
|
+
// static image
|
|
271
|
+
x = x + ax * (bw - width);
|
|
272
|
+
y = y + ay * (bh - height);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
renderer.translate(x, y);
|
|
276
|
+
renderer.drawPattern(
|
|
277
|
+
this._pattern,
|
|
278
|
+
0,
|
|
279
|
+
0,
|
|
280
|
+
viewport.width * 2,
|
|
281
|
+
viewport.height * 2
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// called when the layer is removed from the game world or a container
|
|
286
|
+
onDeactivateEvent() {
|
|
287
|
+
// cancel all event subscriptions
|
|
288
|
+
off(VIEWPORT_ONCHANGE, this.updateLayer);
|
|
289
|
+
off(VIEWPORT_ONRESIZE, this.resize);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Destroy function<br>
|
|
294
|
+
* @ignore
|
|
295
|
+
*/
|
|
296
|
+
destroy() {
|
|
297
|
+
pool.push(this.ratio);
|
|
298
|
+
this.ratio = undefined;
|
|
299
|
+
off(ONCONTEXT_RESTORED, this.createPattern);
|
|
300
|
+
super.destroy();
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export { ImageLayer as default };
|
|
@@ -0,0 +1,155 @@
|
|
|
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 pool from '../system/pooling.js';
|
|
9
|
+
import Renderable from './renderable.js';
|
|
10
|
+
|
|
11
|
+
/** @ignore */
|
|
12
|
+
function createGradient(light) {
|
|
13
|
+
var context = light.texture.context;
|
|
14
|
+
|
|
15
|
+
var x1 = light.texture.width / 2,
|
|
16
|
+
y1 = light.texture.height / 2;
|
|
17
|
+
|
|
18
|
+
var radiusX = light.radiusX,
|
|
19
|
+
radiusY = light.radiusY;
|
|
20
|
+
|
|
21
|
+
var scaleX, scaleY, invScaleX, invScaleY;
|
|
22
|
+
var gradient;
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
light.texture.clear();
|
|
26
|
+
|
|
27
|
+
if (radiusX >= radiusY) {
|
|
28
|
+
scaleX = 1;
|
|
29
|
+
invScaleX = 1;
|
|
30
|
+
scaleY = radiusY/radiusX;
|
|
31
|
+
invScaleY = radiusX/radiusY;
|
|
32
|
+
gradient = context.createRadialGradient(x1, y1 * invScaleY, 0, x1, radiusY * invScaleY, radiusX);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
scaleY = 1;
|
|
36
|
+
invScaleY = 1;
|
|
37
|
+
scaleX = radiusX/radiusY;
|
|
38
|
+
invScaleX = radiusY/radiusX;
|
|
39
|
+
gradient = context.createRadialGradient(x1 * invScaleX, y1, 0, x1 * invScaleX, y1, radiusY);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
gradient.addColorStop( 0, light.color.toRGBA(light.intensity));
|
|
43
|
+
gradient.addColorStop( 1, light.color.toRGBA(0.0));
|
|
44
|
+
|
|
45
|
+
context.fillStyle = gradient;
|
|
46
|
+
|
|
47
|
+
context.setTransform(scaleX, 0, 0, scaleY, 0, 0);
|
|
48
|
+
context.fillRect(0, 0, light.texture.width * invScaleX, light.texture.height * invScaleY);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @classdesc
|
|
53
|
+
* A 2D point light.
|
|
54
|
+
* Note: this is a very experimental and work in progress feature, that provides a simple spot light effect.
|
|
55
|
+
* The light effect is best rendered in WebGL, as they are few limitations when using the Canvas Renderer
|
|
56
|
+
* (multiple lights are not supported, alpha component of the ambient light is ignored)
|
|
57
|
+
* @see stage.lights
|
|
58
|
+
*/
|
|
59
|
+
class Light2d extends Renderable {
|
|
60
|
+
/**
|
|
61
|
+
* @param {number} x - The horizontal position of the light.
|
|
62
|
+
* @param {number} y - The vertical position of the light.
|
|
63
|
+
* @param {number} radiusX - The horizontal radius of the light.
|
|
64
|
+
* @param {number} [radiusY=radiusX] - The vertical radius of the light.
|
|
65
|
+
* @param {Color|string} [color="#FFF"] - the color of the light
|
|
66
|
+
* @param {number} [intensity=0.7] - The intensity of the light.
|
|
67
|
+
*/
|
|
68
|
+
constructor(x, y, radiusX, radiusY = radiusX, color = "#FFF", intensity = 0.7) {
|
|
69
|
+
// call the parent constructor
|
|
70
|
+
super(x, y, radiusX * 2, radiusY * 2);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* the color of the light
|
|
74
|
+
* @type {Color}
|
|
75
|
+
* @default "#FFF"
|
|
76
|
+
*/
|
|
77
|
+
this.color = pool.pull("Color").parseCSS(color);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The horizontal radius of the light
|
|
81
|
+
* @type {number}
|
|
82
|
+
*/
|
|
83
|
+
this.radiusX = radiusX;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The vertical radius of the light
|
|
87
|
+
* @type {number}
|
|
88
|
+
*/
|
|
89
|
+
this.radiusY = radiusY;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* The intensity of the light
|
|
93
|
+
* @type {number}
|
|
94
|
+
* @default 0.7
|
|
95
|
+
*/
|
|
96
|
+
this.intensity = intensity;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* the default blend mode to be applied when rendering this light
|
|
100
|
+
* @type {string}
|
|
101
|
+
* @default "lighter"
|
|
102
|
+
* @see CanvasRenderer#setBlendMode
|
|
103
|
+
* @see WebGLRenderer#setBlendMode
|
|
104
|
+
*/
|
|
105
|
+
this.blendMode = "lighter";
|
|
106
|
+
|
|
107
|
+
/** @ignore */
|
|
108
|
+
this.visibleArea = pool.pull("Ellipse", this.centerX, this.centerY, this.width, this.height);
|
|
109
|
+
|
|
110
|
+
/** @ignore */
|
|
111
|
+
this.texture = pool.pull("CanvasTexture", this.width, this.height, { offscreenCanvas: false });
|
|
112
|
+
|
|
113
|
+
this.anchorPoint.set(0, 0);
|
|
114
|
+
|
|
115
|
+
createGradient(this);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* returns a geometry representing the visible area of this light
|
|
120
|
+
* @name getVisibleArea
|
|
121
|
+
* @memberof Light2d
|
|
122
|
+
* @returns {Ellipse} the light visible mask
|
|
123
|
+
*/
|
|
124
|
+
getVisibleArea() {
|
|
125
|
+
return this.visibleArea.setShape(this.getBounds().centerX, this.getBounds().centerY, this.width, this.height);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* draw this Light2d (automatically called by melonJS)
|
|
130
|
+
* @name draw
|
|
131
|
+
* @memberof Light2d
|
|
132
|
+
* @protected
|
|
133
|
+
* @param {CanvasRenderer|WebGLRenderer} renderer - a renderer instance
|
|
134
|
+
* @param {Camera2d} [viewport] - the viewport to (re)draw
|
|
135
|
+
*/
|
|
136
|
+
draw(renderer, viewport) { // eslint-disable-line no-unused-vars
|
|
137
|
+
renderer.drawImage(this.texture.canvas, this.getBounds().x, this.getBounds().y);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Destroy function<br>
|
|
142
|
+
* @ignore
|
|
143
|
+
*/
|
|
144
|
+
destroy() {
|
|
145
|
+
pool.push(this.color);
|
|
146
|
+
this.color = undefined;
|
|
147
|
+
pool.push(this.texture);
|
|
148
|
+
this.texture = undefined;
|
|
149
|
+
pool.push(this.visibleArea);
|
|
150
|
+
this.visibleArea = undefined;
|
|
151
|
+
super.destroy();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export { Light2d as default };
|