melonjs 9.1.0 → 10.0.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/{LICENSE → LICENSE.md} +0 -0
- package/README.md +93 -57
- package/dist/melonjs.js +10334 -11179
- package/dist/melonjs.min.js +4 -10
- package/dist/melonjs.module.d.ts +13206 -0
- package/dist/melonjs.module.js +9913 -10872
- package/package.json +19 -14
- package/src/audio/audio.js +477 -553
- package/src/camera/camera2d.js +67 -65
- package/src/entity/draggable.js +26 -35
- package/src/entity/droptarget.js +17 -14
- package/src/entity/entity.js +59 -79
- package/src/game.js +194 -204
- package/src/index.js +12 -30
- package/src/input/gamepad.js +8 -19
- package/src/input/keyboard.js +4 -4
- package/src/input/pointer.js +14 -12
- package/src/input/pointerevent.js +15 -13
- package/src/lang/deprecated.js +2 -887
- package/src/level/level.js +3 -3
- package/src/level/tiled/TMXGroup.js +7 -11
- package/src/level/tiled/TMXLayer.js +33 -32
- package/src/level/tiled/TMXTileMap.js +15 -19
- package/src/level/tiled/TMXTileset.js +5 -5
- package/src/level/tiled/TMXUtils.js +3 -3
- package/src/level/tiled/renderer/TMXRenderer.js +4 -0
- package/src/loader/loader.js +8 -23
- package/src/loader/loadingscreen.js +51 -60
- package/src/math/matrix3.js +1 -1
- package/src/particles/emitter.js +36 -39
- package/src/particles/particle.js +27 -12
- package/src/particles/particlecontainer.js +17 -16
- package/src/physics/body.js +80 -118
- package/src/physics/collision.js +5 -235
- package/src/physics/detector.js +235 -0
- package/src/physics/quadtree.js +14 -14
- package/src/physics/world.js +84 -18
- package/src/plugin/plugin.js +26 -24
- package/src/polyfill/console.js +9 -14
- package/src/renderable/GUI.js +48 -62
- package/src/renderable/collectable.js +11 -4
- package/src/renderable/colorlayer.js +28 -26
- package/src/renderable/container.js +120 -96
- package/src/renderable/imagelayer.js +94 -93
- package/src/renderable/renderable.js +164 -138
- package/src/renderable/sprite.js +42 -44
- package/src/renderable/trigger.js +24 -17
- package/src/shapes/ellipse.js +27 -27
- package/src/shapes/line.js +12 -8
- package/src/shapes/poly.js +77 -49
- package/src/shapes/rectangle.js +193 -268
- package/src/state/stage.js +23 -25
- package/src/state/state.js +35 -86
- package/src/system/device.js +233 -285
- package/src/system/event.js +485 -432
- package/src/system/pooling.js +61 -54
- package/src/system/save.js +17 -16
- package/src/system/timer.js +34 -38
- package/src/text/bitmaptext.js +44 -46
- package/src/text/text.js +39 -34
- package/src/tweens/easing.js +0 -2
- package/src/tweens/interpolation.js +3 -8
- package/src/tweens/tween.js +332 -351
- package/src/utils/function.js +6 -8
- package/src/utils/utils.js +34 -30
- package/src/video/canvas/canvas_renderer.js +13 -8
- package/src/video/renderer.js +8 -7
- package/src/video/texture.js +8 -8
- package/src/video/texture_cache.js +5 -5
- package/src/video/video.js +373 -403
- package/src/video/webgl/glshader.js +2 -2
- package/src/video/webgl/webgl_compositor.js +14 -8
- package/src/video/webgl/webgl_renderer.js +21 -19
- package/plugins/debug/debugPanel.js +0 -770
- package/plugins/debug/font/PressStart2P.fnt +0 -100
- package/plugins/debug/font/PressStart2P.ltr +0 -1
- package/plugins/debug/font/PressStart2P.png +0 -0
- package/plugins/debug/particleDebugPanel.js +0 -303
|
@@ -1,94 +1,81 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import event from "./../system/event.js";
|
|
1
|
+
import { world, viewport } from "./../game.js";
|
|
2
|
+
import { createCanvas, renderer } from "./../video/video.js";
|
|
3
|
+
import * as event from "./../system/event.js";
|
|
4
4
|
import {nextPowerOfTwo} from "./../math/math.js";
|
|
5
5
|
import pool from "./../system/pooling.js";
|
|
6
6
|
import Renderable from "./../renderable/renderable.js";
|
|
7
|
+
import ColorLayer from "./../renderable/colorlayer.js";
|
|
7
8
|
import Stage from "./../state/stage.js";
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
// a basic progress bar object
|
|
11
|
-
|
|
12
|
+
class ProgressBar extends Renderable {
|
|
12
13
|
/**
|
|
13
14
|
* @ignore
|
|
14
15
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
constructor(x, y, w, h) {
|
|
17
|
+
super(x, y, w, h);
|
|
17
18
|
|
|
18
19
|
this.barHeight = h;
|
|
19
|
-
|
|
20
|
-
this._super(Renderable, "init", [x, y, w, h]);
|
|
21
|
-
|
|
22
20
|
this.anchorPoint.set(0, 0);
|
|
23
21
|
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
self.onProgressUpdate.bind(self)
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
this.resizeHdlr = event.subscribe(
|
|
30
|
-
event.VIEWPORT_ONRESIZE,
|
|
31
|
-
self.resize.bind(self)
|
|
32
|
-
);
|
|
22
|
+
event.on(event.LOADER_PROGRESS, this.onProgressUpdate, this);
|
|
23
|
+
event.on(event.VIEWPORT_ONRESIZE, this.resize, this);
|
|
33
24
|
|
|
34
25
|
this.anchorPoint.set(0, 0);
|
|
35
26
|
|
|
36
27
|
// store current progress
|
|
37
28
|
this.progress = 0;
|
|
38
|
-
}
|
|
29
|
+
}
|
|
39
30
|
|
|
40
31
|
/**
|
|
41
32
|
* make sure the screen is refreshed every frame
|
|
42
33
|
* @ignore
|
|
43
34
|
*/
|
|
44
|
-
onProgressUpdate
|
|
35
|
+
onProgressUpdate(progress) {
|
|
45
36
|
this.progress = ~~(progress * this.width);
|
|
46
37
|
this.isDirty = true;
|
|
47
|
-
}
|
|
38
|
+
}
|
|
48
39
|
|
|
49
40
|
/**
|
|
50
41
|
* draw function
|
|
51
42
|
* @ignore
|
|
52
43
|
*/
|
|
53
|
-
draw
|
|
54
|
-
// clear the background
|
|
55
|
-
renderer.clearColor("#202020");
|
|
56
|
-
|
|
44
|
+
draw (renderer) {
|
|
57
45
|
// draw the progress bar
|
|
58
46
|
renderer.setColor("black");
|
|
59
|
-
renderer.fillRect(this.pos.x,
|
|
47
|
+
renderer.fillRect(this.pos.x, viewport.centerY, renderer.getWidth(), this.barHeight / 2);
|
|
60
48
|
|
|
61
49
|
renderer.setColor("#55aa00");
|
|
62
|
-
renderer.fillRect(this.pos.x,
|
|
63
|
-
}
|
|
50
|
+
renderer.fillRect(this.pos.x, viewport.centerY, this.progress, this.barHeight / 2);
|
|
51
|
+
}
|
|
64
52
|
|
|
65
53
|
/**
|
|
66
54
|
* Called by engine before deleting the object
|
|
67
55
|
* @ignore
|
|
68
56
|
*/
|
|
69
|
-
onDestroyEvent
|
|
57
|
+
onDestroyEvent() {
|
|
70
58
|
// cancel the callback
|
|
71
|
-
event.
|
|
72
|
-
event.
|
|
73
|
-
this.loaderHdlr = this.resizeHdlr = null;
|
|
59
|
+
event.off(event.LOADER_PROGRESS, this.onProgressUpdate);
|
|
60
|
+
event.off(event.VIEWPORT_ONRESIZE, this.resize);
|
|
74
61
|
}
|
|
75
62
|
|
|
76
|
-
}
|
|
63
|
+
};
|
|
77
64
|
|
|
78
65
|
// the melonJS Logo
|
|
79
|
-
|
|
66
|
+
class IconLogo extends Renderable {
|
|
80
67
|
/**
|
|
81
68
|
* @ignore
|
|
82
69
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
70
|
+
constructor(x, y) {
|
|
71
|
+
super(x, y, 100, 85);
|
|
85
72
|
|
|
86
|
-
this.iconCanvas =
|
|
73
|
+
this.iconCanvas = createCanvas(
|
|
87
74
|
nextPowerOfTwo(this.width),
|
|
88
75
|
nextPowerOfTwo(this.height),
|
|
89
76
|
false);
|
|
90
77
|
|
|
91
|
-
var context =
|
|
78
|
+
var context = renderer.getContext2d(this.iconCanvas);
|
|
92
79
|
|
|
93
80
|
context.beginPath();
|
|
94
81
|
context.moveTo(0.7, 48.9);
|
|
@@ -117,33 +104,34 @@ var IconLogo = Renderable.extend({
|
|
|
117
104
|
context.stroke();
|
|
118
105
|
|
|
119
106
|
this.anchorPoint.set(0.5, 0.5);
|
|
120
|
-
}
|
|
107
|
+
}
|
|
108
|
+
|
|
121
109
|
/**
|
|
122
110
|
* @ignore
|
|
123
111
|
*/
|
|
124
|
-
draw
|
|
112
|
+
draw(renderer) {
|
|
125
113
|
renderer.drawImage(this.iconCanvas, renderer.getWidth() / 2, this.pos.y);
|
|
126
114
|
}
|
|
127
|
-
}
|
|
115
|
+
};
|
|
128
116
|
|
|
129
117
|
// the melonJS Text Logo
|
|
130
|
-
|
|
118
|
+
class TextLogo extends Renderable {
|
|
131
119
|
/**
|
|
132
120
|
* @ignore
|
|
133
121
|
*/
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
constructor(w, h) {
|
|
123
|
+
super(0, 0, w, h);
|
|
136
124
|
|
|
137
125
|
this.textWidth = 0;
|
|
138
126
|
|
|
139
127
|
// offscreen cache canvas
|
|
140
|
-
this.fontCanvas =
|
|
141
|
-
this.drawFont(
|
|
128
|
+
this.fontCanvas = createCanvas(256, 64, true);
|
|
129
|
+
this.drawFont(renderer.getContext2d(this.fontCanvas));
|
|
142
130
|
|
|
143
131
|
this.anchorPoint.set(0, 0.5);
|
|
144
|
-
}
|
|
132
|
+
}
|
|
145
133
|
|
|
146
|
-
drawFont
|
|
134
|
+
drawFont(context) {
|
|
147
135
|
var logo1 = pool.pull("Text", 0, 0, {
|
|
148
136
|
font: "century gothic",
|
|
149
137
|
size: 32,
|
|
@@ -180,16 +168,16 @@ var TextLogo = Renderable.extend({
|
|
|
180
168
|
// put them back into the object pool
|
|
181
169
|
pool.push(logo1);
|
|
182
170
|
pool.push(logo2);
|
|
183
|
-
}
|
|
171
|
+
}
|
|
184
172
|
|
|
185
173
|
/**
|
|
186
174
|
* @ignore
|
|
187
175
|
*/
|
|
188
|
-
draw
|
|
176
|
+
draw(renderer) {
|
|
189
177
|
renderer.drawImage(this.fontCanvas, Math.round((renderer.getWidth() - this.textWidth) / 2), this.pos.y);
|
|
190
178
|
}
|
|
191
179
|
|
|
192
|
-
}
|
|
180
|
+
};
|
|
193
181
|
|
|
194
182
|
/**
|
|
195
183
|
* a default loading screen
|
|
@@ -205,25 +193,28 @@ var defaultLoadingScreen = new Stage({
|
|
|
205
193
|
onResetEvent : function () {
|
|
206
194
|
var barHeight = 8;
|
|
207
195
|
|
|
196
|
+
// clear the background
|
|
197
|
+
world.addChild(new ColorLayer("background", "#202020"), 0);
|
|
198
|
+
|
|
208
199
|
// progress bar
|
|
209
|
-
|
|
200
|
+
world.addChild(new ProgressBar(
|
|
210
201
|
0,
|
|
211
|
-
|
|
212
|
-
|
|
202
|
+
renderer.getHeight() / 2,
|
|
203
|
+
renderer.getWidth(),
|
|
213
204
|
barHeight
|
|
214
205
|
), 1);
|
|
215
206
|
|
|
216
207
|
// melonJS logo
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
(
|
|
208
|
+
world.addChild(new IconLogo(
|
|
209
|
+
renderer.getWidth() / 2,
|
|
210
|
+
(renderer.getHeight() / 2) - (barHeight * 2) - 35
|
|
220
211
|
|
|
221
212
|
), 2);
|
|
222
213
|
|
|
223
214
|
// melonJS text
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
215
|
+
world.addChild(new TextLogo(
|
|
216
|
+
renderer.getWidth(),
|
|
217
|
+
renderer.getHeight()
|
|
227
218
|
), 2);
|
|
228
219
|
}
|
|
229
220
|
});
|
package/src/math/matrix3.js
CHANGED
|
@@ -569,7 +569,7 @@ class Matrix3d {
|
|
|
569
569
|
* @param {me.Vector2d|me.Vector3d} v the vector to translate the matrix by
|
|
570
570
|
* @return {me.Matrix3d} Reference to this object for method chaining
|
|
571
571
|
*/
|
|
572
|
-
translate(
|
|
572
|
+
translate() {
|
|
573
573
|
var a = this.val;
|
|
574
574
|
var _x, _y, _z;
|
|
575
575
|
|
package/src/particles/emitter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createCanvas } from "./../video/video.js";
|
|
2
2
|
import pool from "./../system/pooling.js";
|
|
3
3
|
import Renderable from "./../renderable/renderable.js";
|
|
4
4
|
import ParticleContainer from "./particlecontainer.js";
|
|
@@ -8,7 +8,7 @@ import { randomFloat } from "./../math/math.js";
|
|
|
8
8
|
|
|
9
9
|
// generate a default image for the particles
|
|
10
10
|
var pixel = (function () {
|
|
11
|
-
var canvas =
|
|
11
|
+
var canvas = createCanvas(1, 1);
|
|
12
12
|
var context = canvas.getContext("2d");
|
|
13
13
|
context.fillStyle = "#fff";
|
|
14
14
|
context.fillRect(0, 0, 1, 1);
|
|
@@ -326,11 +326,15 @@ var ParticleEmitterSettings = {
|
|
|
326
326
|
* me.game.world.removeChild(emitter);
|
|
327
327
|
*
|
|
328
328
|
*/
|
|
329
|
-
|
|
329
|
+
class ParticleEmitter extends Renderable {
|
|
330
|
+
|
|
330
331
|
/**
|
|
331
332
|
* @ignore
|
|
332
333
|
*/
|
|
333
|
-
|
|
334
|
+
constructor(x, y, settings) {
|
|
335
|
+
// call the super constructor
|
|
336
|
+
super(x, y, Infinity, Infinity);
|
|
337
|
+
|
|
334
338
|
// Emitter is Stream, launch particles constantly
|
|
335
339
|
/** @ignore */
|
|
336
340
|
this._stream = false;
|
|
@@ -349,15 +353,6 @@ var ParticleEmitter = Renderable.extend({
|
|
|
349
353
|
/** @ignore */
|
|
350
354
|
this._enabled = false;
|
|
351
355
|
|
|
352
|
-
// call the super constructor
|
|
353
|
-
this._super(
|
|
354
|
-
Renderable,
|
|
355
|
-
"init",
|
|
356
|
-
[x, y,
|
|
357
|
-
Infinity,
|
|
358
|
-
Infinity]
|
|
359
|
-
);
|
|
360
|
-
|
|
361
356
|
// Emitter will always update
|
|
362
357
|
this.alwaysUpdate = true;
|
|
363
358
|
|
|
@@ -403,34 +398,34 @@ var ParticleEmitter = Renderable.extend({
|
|
|
403
398
|
|
|
404
399
|
// Reset the emitter to defaults
|
|
405
400
|
this.reset(settings);
|
|
406
|
-
}
|
|
401
|
+
}
|
|
407
402
|
|
|
408
403
|
/**
|
|
409
404
|
* @ignore
|
|
410
405
|
*/
|
|
411
|
-
onActivateEvent
|
|
406
|
+
onActivateEvent() {
|
|
412
407
|
this.ancestor.addChild(this.container);
|
|
413
408
|
this.container.pos.z = this.pos.z;
|
|
414
409
|
if (!this.ancestor.autoSort) {
|
|
415
410
|
this.ancestor.sort();
|
|
416
411
|
}
|
|
417
|
-
}
|
|
412
|
+
}
|
|
418
413
|
|
|
419
414
|
/**
|
|
420
415
|
* @ignore
|
|
421
416
|
*/
|
|
422
|
-
onDeactivateEvent
|
|
417
|
+
onDeactivateEvent() {
|
|
423
418
|
if (this.ancestor.hasChild(this.container)) {
|
|
424
419
|
this.ancestor.removeChildNow(this.container);
|
|
425
420
|
}
|
|
426
|
-
}
|
|
421
|
+
}
|
|
427
422
|
|
|
428
423
|
/**
|
|
429
424
|
* @ignore
|
|
430
425
|
*/
|
|
431
|
-
destroy
|
|
426
|
+
destroy() {
|
|
432
427
|
this.reset();
|
|
433
|
-
}
|
|
428
|
+
}
|
|
434
429
|
|
|
435
430
|
/**
|
|
436
431
|
* returns a random point inside the bounds x axis of this emitter
|
|
@@ -439,9 +434,9 @@ var ParticleEmitter = Renderable.extend({
|
|
|
439
434
|
* @function
|
|
440
435
|
* @return {Number}
|
|
441
436
|
*/
|
|
442
|
-
getRandomPointX
|
|
437
|
+
getRandomPointX() {
|
|
443
438
|
return this.pos.x + randomFloat(0, this.width);
|
|
444
|
-
}
|
|
439
|
+
}
|
|
445
440
|
|
|
446
441
|
/**
|
|
447
442
|
* returns a random point inside the bounds y axis of this emitter
|
|
@@ -450,9 +445,9 @@ var ParticleEmitter = Renderable.extend({
|
|
|
450
445
|
* @function
|
|
451
446
|
* @return {Number}
|
|
452
447
|
*/
|
|
453
|
-
getRandomPointY
|
|
448
|
+
getRandomPointY() {
|
|
454
449
|
return this.pos.y + randomFloat(0, this.height);
|
|
455
|
-
}
|
|
450
|
+
}
|
|
456
451
|
|
|
457
452
|
/**
|
|
458
453
|
* Reset the emitter with default values.<br>
|
|
@@ -461,7 +456,7 @@ var ParticleEmitter = Renderable.extend({
|
|
|
461
456
|
* @name reset
|
|
462
457
|
* @memberOf me.ParticleEmitter
|
|
463
458
|
*/
|
|
464
|
-
reset
|
|
459
|
+
reset(settings) {
|
|
465
460
|
// check if settings exists and create a dummy object if necessary
|
|
466
461
|
settings = settings || {};
|
|
467
462
|
var defaults = ParticleEmitterSettings;
|
|
@@ -474,17 +469,17 @@ var ParticleEmitter = Renderable.extend({
|
|
|
474
469
|
|
|
475
470
|
// reset particle container values
|
|
476
471
|
this.container.reset();
|
|
477
|
-
}
|
|
472
|
+
}
|
|
478
473
|
|
|
479
474
|
// Add count particles in the game world
|
|
480
475
|
/** @ignore */
|
|
481
|
-
addParticles
|
|
476
|
+
addParticles(count) {
|
|
482
477
|
for (var i = 0; i < ~~count; i++) {
|
|
483
478
|
// Add particle to the container
|
|
484
479
|
var particle = pool.pull("Particle", this);
|
|
485
480
|
this.container.addChild(particle);
|
|
486
481
|
}
|
|
487
|
-
}
|
|
482
|
+
}
|
|
488
483
|
|
|
489
484
|
/**
|
|
490
485
|
* Emitter is of type stream and is launching particles <br>
|
|
@@ -493,9 +488,9 @@ var ParticleEmitter = Renderable.extend({
|
|
|
493
488
|
* @name isRunning
|
|
494
489
|
* @memberOf me.ParticleEmitter
|
|
495
490
|
*/
|
|
496
|
-
isRunning
|
|
491
|
+
isRunning() {
|
|
497
492
|
return this._enabled && this._stream;
|
|
498
|
-
}
|
|
493
|
+
}
|
|
499
494
|
|
|
500
495
|
/**
|
|
501
496
|
* Launch particles from emitter constantly <br>
|
|
@@ -505,12 +500,12 @@ var ParticleEmitter = Renderable.extend({
|
|
|
505
500
|
* @name streamParticles
|
|
506
501
|
* @memberOf me.ParticleEmitter
|
|
507
502
|
*/
|
|
508
|
-
streamParticles
|
|
503
|
+
streamParticles(duration) {
|
|
509
504
|
this._enabled = true;
|
|
510
505
|
this._stream = true;
|
|
511
506
|
this.frequency = Math.max(this.frequency, 1);
|
|
512
507
|
this._durationTimer = (typeof duration === "number") ? duration : this.duration;
|
|
513
|
-
}
|
|
508
|
+
}
|
|
514
509
|
|
|
515
510
|
/**
|
|
516
511
|
* Stop the emitter from generating new particles (used only if emitter is Stream) <br>
|
|
@@ -518,9 +513,9 @@ var ParticleEmitter = Renderable.extend({
|
|
|
518
513
|
* @name stopStream
|
|
519
514
|
* @memberOf me.ParticleEmitter
|
|
520
515
|
*/
|
|
521
|
-
stopStream
|
|
516
|
+
stopStream() {
|
|
522
517
|
this._enabled = false;
|
|
523
|
-
}
|
|
518
|
+
}
|
|
524
519
|
|
|
525
520
|
/**
|
|
526
521
|
* Launch all particles from emitter and stop <br>
|
|
@@ -530,17 +525,17 @@ var ParticleEmitter = Renderable.extend({
|
|
|
530
525
|
* @name burstParticles
|
|
531
526
|
* @memberOf me.ParticleEmitter
|
|
532
527
|
*/
|
|
533
|
-
burstParticles
|
|
528
|
+
burstParticles(total) {
|
|
534
529
|
this._enabled = true;
|
|
535
530
|
this._stream = false;
|
|
536
531
|
this.addParticles((typeof total === "number") ? total : this.totalParticles);
|
|
537
532
|
this._enabled = false;
|
|
538
|
-
}
|
|
533
|
+
}
|
|
539
534
|
|
|
540
535
|
/**
|
|
541
536
|
* @ignore
|
|
542
537
|
*/
|
|
543
|
-
update
|
|
538
|
+
update(dt) {
|
|
544
539
|
// Launch new particles, if emitter is Stream
|
|
545
540
|
if ((this._enabled) && (this._stream)) {
|
|
546
541
|
// Check if the emitter has duration set
|
|
@@ -571,5 +566,7 @@ var ParticleEmitter = Renderable.extend({
|
|
|
571
566
|
}
|
|
572
567
|
return true;
|
|
573
568
|
}
|
|
574
|
-
|
|
575
|
-
|
|
569
|
+
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
export { ParticleEmitterSettings, ParticleEmitter };
|
|
@@ -12,18 +12,33 @@ import Renderable from "./../renderable/renderable.js";
|
|
|
12
12
|
* @constructor
|
|
13
13
|
* @param {me.ParticleEmitter} particle emitter
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
class Particle extends Renderable {
|
|
16
16
|
/**
|
|
17
17
|
* @ignore
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
constructor(emitter) {
|
|
20
20
|
// Call the super constructor
|
|
21
|
-
|
|
21
|
+
super(
|
|
22
22
|
emitter.getRandomPointX(),
|
|
23
23
|
emitter.getRandomPointY(),
|
|
24
24
|
emitter.image.width,
|
|
25
25
|
emitter.image.height
|
|
26
|
-
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
// particle velocity
|
|
29
|
+
this.vel = new Vector2d();
|
|
30
|
+
this.onResetEvent(emitter, true);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
onResetEvent(emitter, newInstance = false) {
|
|
34
|
+
if (newInstance === false) {
|
|
35
|
+
super.onResetEvent(
|
|
36
|
+
emitter.getRandomPointX(),
|
|
37
|
+
emitter.getRandomPointY(),
|
|
38
|
+
emitter.image.width,
|
|
39
|
+
emitter.image.height
|
|
40
|
+
);
|
|
41
|
+
}
|
|
27
42
|
|
|
28
43
|
// Particle will always update
|
|
29
44
|
this.alwaysUpdate = true;
|
|
@@ -36,7 +51,7 @@ var Particle = Renderable.extend({
|
|
|
36
51
|
var speed = emitter.speed + ((emitter.speedVariation > 0) ? (randomFloat(0, 2) - 1) * emitter.speedVariation : 0);
|
|
37
52
|
|
|
38
53
|
// Set the start particle Velocity
|
|
39
|
-
this.vel
|
|
54
|
+
this.vel.set(speed * Math.cos(angle), -speed * Math.sin(angle));
|
|
40
55
|
|
|
41
56
|
// Set the start particle Time of Life as defined in emitter
|
|
42
57
|
this.life = randomFloat(emitter.minLife, emitter.maxLife);
|
|
@@ -76,7 +91,7 @@ var Particle = Renderable.extend({
|
|
|
76
91
|
if (!emitter.followTrajectory) {
|
|
77
92
|
this.angle = randomFloat(emitter.minRotation, emitter.maxRotation);
|
|
78
93
|
}
|
|
79
|
-
}
|
|
94
|
+
}
|
|
80
95
|
|
|
81
96
|
/**
|
|
82
97
|
* Update the Particle <br>
|
|
@@ -87,7 +102,7 @@ var Particle = Renderable.extend({
|
|
|
87
102
|
* @ignore
|
|
88
103
|
* @param {Number} dt time since the last update in milliseconds
|
|
89
104
|
*/
|
|
90
|
-
update
|
|
105
|
+
update(dt) {
|
|
91
106
|
// move things forward independent of the current frame rate
|
|
92
107
|
var skew = dt * this._deltaInv;
|
|
93
108
|
|
|
@@ -130,12 +145,12 @@ var Particle = Renderable.extend({
|
|
|
130
145
|
|
|
131
146
|
// Return true if the particle is not dead yet
|
|
132
147
|
return (this.inViewport || !this.onlyInViewport) && (this.life > 0);
|
|
133
|
-
}
|
|
148
|
+
}
|
|
134
149
|
|
|
135
150
|
/**
|
|
136
151
|
* @ignore
|
|
137
152
|
*/
|
|
138
|
-
preDraw
|
|
153
|
+
preDraw(renderer) {
|
|
139
154
|
|
|
140
155
|
// restore is called in postDraw
|
|
141
156
|
renderer.save();
|
|
@@ -145,12 +160,12 @@ var Particle = Renderable.extend({
|
|
|
145
160
|
|
|
146
161
|
// translate to the defined anchor point and scale it
|
|
147
162
|
renderer.transform(this.currentTransform);
|
|
148
|
-
}
|
|
163
|
+
}
|
|
149
164
|
|
|
150
165
|
/**
|
|
151
166
|
* @ignore
|
|
152
167
|
*/
|
|
153
|
-
draw
|
|
168
|
+
draw(renderer) {
|
|
154
169
|
var w = this.width, h = this.height;
|
|
155
170
|
renderer.drawImage(
|
|
156
171
|
this.image,
|
|
@@ -160,6 +175,6 @@ var Particle = Renderable.extend({
|
|
|
160
175
|
w, h
|
|
161
176
|
);
|
|
162
177
|
}
|
|
163
|
-
}
|
|
178
|
+
};
|
|
164
179
|
|
|
165
180
|
export default Particle;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Container from "./../renderable/container.js";
|
|
2
|
-
import
|
|
2
|
+
import { viewport } from "./../game.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Particle Container Object.
|
|
@@ -9,18 +9,20 @@ import game from "./../game.js";
|
|
|
9
9
|
* @constructor
|
|
10
10
|
* @param {me.ParticleEmitter} emitter the emitter which owns this container
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
class ParticleContainer extends Container {
|
|
14
|
+
|
|
13
15
|
/**
|
|
14
16
|
* @ignore
|
|
15
17
|
*/
|
|
16
|
-
|
|
18
|
+
constructor(emitter) {
|
|
17
19
|
// call the super constructor
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
super(
|
|
21
|
+
viewport.pos.x,
|
|
22
|
+
viewport.pos.y,
|
|
23
|
+
viewport.width,
|
|
24
|
+
viewport.height
|
|
25
|
+
);
|
|
24
26
|
|
|
25
27
|
// don't sort the particles by z-index
|
|
26
28
|
this.autoSort = false;
|
|
@@ -39,12 +41,12 @@ var ParticleContainer = Container.extend({
|
|
|
39
41
|
this.anchorPoint.set(0, 0);
|
|
40
42
|
|
|
41
43
|
this.isKinematic = true;
|
|
42
|
-
}
|
|
44
|
+
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
45
47
|
* @ignore
|
|
46
48
|
*/
|
|
47
|
-
update
|
|
49
|
+
update(dt) {
|
|
48
50
|
// skip frames if necessary
|
|
49
51
|
if (++this._updateCount > this._emitter.framesToSkip) {
|
|
50
52
|
this._updateCount = 0;
|
|
@@ -59,7 +61,6 @@ var ParticleContainer = Container.extend({
|
|
|
59
61
|
this._dt = 0;
|
|
60
62
|
|
|
61
63
|
// Update particles and remove them if they are dead
|
|
62
|
-
var viewport = game.viewport;
|
|
63
64
|
for (var i = this.children.length - 1; i >= 0; --i) {
|
|
64
65
|
var particle = this.children[i];
|
|
65
66
|
particle.inViewport = viewport.isVisible(particle, this.floating);
|
|
@@ -68,12 +69,12 @@ var ParticleContainer = Container.extend({
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
return true;
|
|
71
|
-
}
|
|
72
|
+
}
|
|
72
73
|
|
|
73
74
|
/**
|
|
74
75
|
* @ignore
|
|
75
76
|
*/
|
|
76
|
-
draw
|
|
77
|
+
draw(renderer, rect) {
|
|
77
78
|
if (this.children.length > 0) {
|
|
78
79
|
var context = renderer.getContext(),
|
|
79
80
|
gco;
|
|
@@ -83,7 +84,7 @@ var ParticleContainer = Container.extend({
|
|
|
83
84
|
context.globalCompositeOperation = "lighter";
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
|
|
87
|
+
super.draw(renderer, rect);
|
|
87
88
|
|
|
88
89
|
// Restore globalCompositeOperation
|
|
89
90
|
if (this._emitter.textureAdditive) {
|
|
@@ -91,5 +92,5 @@ var ParticleContainer = Container.extend({
|
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
|
-
}
|
|
95
|
+
};
|
|
95
96
|
export default ParticleContainer;
|