melonjs 10.9.0 → 10.12.0
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.md +1 -1
- package/README.md +32 -25
- package/dist/melonjs.js +1635 -2383
- package/dist/melonjs.min.js +4 -4
- package/dist/melonjs.module.d.ts +929 -1504
- package/dist/melonjs.module.js +1581 -2344
- package/package.json +18 -18
- package/src/audio/audio.js +0 -1
- package/src/camera/camera2d.js +1 -16
- package/src/entity/entity.js +6 -11
- package/src/game.js +2 -2
- package/src/geometries/ellipse.js +19 -28
- package/src/geometries/line.js +5 -8
- package/src/geometries/path2d.js +14 -24
- package/src/geometries/poly.js +29 -47
- package/src/geometries/rectangle.js +25 -37
- package/src/geometries/roundrect.js +8 -12
- package/src/index.js +7 -2
- package/src/input/gamepad.js +3 -14
- package/src/input/keyboard.js +1 -9
- package/src/input/pointer.js +0 -1
- package/src/input/pointerevent.js +14 -23
- package/src/lang/deprecated.js +9 -6
- package/src/level/level.js +0 -9
- package/src/level/tiled/TMXGroup.js +0 -4
- package/src/level/tiled/TMXLayer.js +0 -8
- package/src/level/tiled/TMXObject.js +0 -3
- package/src/level/tiled/TMXTile.js +4 -5
- package/src/level/tiled/TMXTileMap.js +1 -7
- package/src/level/tiled/TMXTileset.js +0 -5
- package/src/level/tiled/TMXTilesetGroup.js +1 -4
- package/src/level/tiled/TMXUtils.js +1 -4
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -3
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +0 -1
- package/src/level/tiled/renderer/TMXRenderer.js +1 -7
- package/src/loader/loader.js +0 -11
- package/src/loader/loadingscreen.js +16 -5
- package/src/math/color.js +10 -30
- package/src/math/math.js +0 -10
- package/src/math/matrix2.js +12 -27
- package/src/math/matrix3.js +1 -22
- package/src/math/observable_vector2.js +0 -29
- package/src/math/observable_vector3.js +0 -29
- package/src/math/vector2.js +3 -40
- package/src/math/vector3.js +4 -41
- package/src/particles/emitter.js +11 -12
- package/src/physics/body.js +4 -5
- package/src/physics/bounds.js +5 -19
- package/src/physics/collision.js +1 -13
- package/src/physics/detector.js +6 -56
- package/src/physics/quadtree.js +0 -7
- package/src/physics/response.js +48 -0
- package/src/physics/sat.js +4 -4
- package/src/physics/world.js +0 -4
- package/src/plugin/plugin.js +0 -2
- package/src/polyfill/roundrect.js +4 -2
- package/src/renderable/GUI.js +11 -14
- package/src/renderable/collectable.js +1 -0
- package/src/renderable/colorlayer.js +9 -7
- package/src/renderable/container.js +38 -64
- package/src/renderable/dragndrop.js +1 -10
- package/src/renderable/imagelayer.js +8 -12
- package/src/renderable/light2d.js +118 -0
- package/src/renderable/renderable.js +27 -48
- package/src/renderable/sprite.js +17 -29
- package/src/renderable/trigger.js +10 -3
- package/src/state/stage.js +72 -6
- package/src/state/state.js +22 -23
- package/src/system/device.js +14 -53
- package/src/system/event.js +11 -0
- package/src/system/pooling.js +20 -9
- package/src/system/save.js +9 -11
- package/src/system/timer.js +239 -218
- package/src/text/bitmaptextdata.js +1 -4
- package/src/text/glyph.js +2 -2
- package/src/text/text.js +25 -24
- package/src/text/textmetrics.js +0 -2
- package/src/tweens/easing.js +1 -1
- package/src/tweens/interpolation.js +2 -2
- package/src/tweens/tween.js +1 -13
- package/src/utils/agent.js +1 -3
- package/src/utils/array.js +0 -3
- package/src/utils/file.js +0 -2
- package/src/utils/function.js +0 -2
- package/src/utils/string.js +0 -6
- package/src/utils/utils.js +0 -3
- package/src/video/canvas/canvas_renderer.js +73 -90
- package/src/video/renderer.js +34 -49
- package/src/video/{texture.js → texture/atlas.js} +10 -8
- package/src/video/{texture_cache.js → texture/cache.js} +4 -5
- package/src/video/texture/canvas_texture.js +99 -0
- package/src/video/video.js +3 -3
- package/src/video/webgl/glshader.js +0 -5
- package/src/video/webgl/utils/uniforms.js +3 -6
- package/src/video/webgl/webgl_compositor.js +0 -14
- package/src/video/webgl/webgl_renderer.js +73 -97
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import Color from "./../../math/color.js";
|
|
2
2
|
import Renderer from "./../renderer.js";
|
|
3
|
-
import TextureCache from "./../
|
|
3
|
+
import TextureCache from "./../texture/cache.js";
|
|
4
4
|
import Ellipse from "./../../geometries/ellipse.js";
|
|
5
5
|
import RoundRect from "./../../geometries/roundrect.js";
|
|
6
|
+
import Rect from "./../../geometries/rectangle.js";
|
|
7
|
+
import Bounds from "./../../physics/bounds.js";
|
|
6
8
|
import { createCanvas } from "./../video.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
import * as event from "./../../system/event.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @classdesc
|
|
@@ -72,8 +73,7 @@ class CanvasRenderer extends Renderer {
|
|
|
72
73
|
/**
|
|
73
74
|
* Reset context state
|
|
74
75
|
* @name reset
|
|
75
|
-
* @memberof CanvasRenderer
|
|
76
|
-
* @function
|
|
76
|
+
* @memberof CanvasRenderer
|
|
77
77
|
*/
|
|
78
78
|
reset() {
|
|
79
79
|
super.reset();
|
|
@@ -83,8 +83,7 @@ class CanvasRenderer extends Renderer {
|
|
|
83
83
|
/**
|
|
84
84
|
* Reset the canvas transform to identity
|
|
85
85
|
* @name resetTransform
|
|
86
|
-
* @memberof CanvasRenderer
|
|
87
|
-
* @function
|
|
86
|
+
* @memberof CanvasRenderer
|
|
88
87
|
*/
|
|
89
88
|
resetTransform() {
|
|
90
89
|
this.backBufferContext2D.setTransform(1, 0, 0, 1, 0, 0);
|
|
@@ -103,8 +102,7 @@ class CanvasRenderer extends Renderer {
|
|
|
103
102
|
* <img src="images/screen-blendmode.png" width="510"/> <br>
|
|
104
103
|
* @name setBlendMode
|
|
105
104
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
|
|
106
|
-
* @memberof CanvasRenderer
|
|
107
|
-
* @function
|
|
105
|
+
* @memberof CanvasRenderer
|
|
108
106
|
* @param {string} [mode="normal"] blend mode : "normal", "multiply", "lighter, "additive", "screen"
|
|
109
107
|
* @param {CanvasRenderingContext2D} [context]
|
|
110
108
|
*/
|
|
@@ -141,8 +139,7 @@ class CanvasRenderer extends Renderer {
|
|
|
141
139
|
/**
|
|
142
140
|
* prepare the framebuffer for drawing a new frame
|
|
143
141
|
* @name clear
|
|
144
|
-
* @memberof CanvasRenderer
|
|
145
|
-
* @function
|
|
142
|
+
* @memberof CanvasRenderer
|
|
146
143
|
*/
|
|
147
144
|
clear() {
|
|
148
145
|
if (this.settings.transparent) {
|
|
@@ -153,8 +150,7 @@ class CanvasRenderer extends Renderer {
|
|
|
153
150
|
/**
|
|
154
151
|
* render the main framebuffer on screen
|
|
155
152
|
* @name flush
|
|
156
|
-
* @memberof CanvasRenderer
|
|
157
|
-
* @function
|
|
153
|
+
* @memberof CanvasRenderer
|
|
158
154
|
*/
|
|
159
155
|
flush() {
|
|
160
156
|
if (this.settings.doubleBuffering) {
|
|
@@ -165,8 +161,7 @@ class CanvasRenderer extends Renderer {
|
|
|
165
161
|
/**
|
|
166
162
|
* Clears the main framebuffer with the given color
|
|
167
163
|
* @name clearColor
|
|
168
|
-
* @memberof CanvasRenderer
|
|
169
|
-
* @function
|
|
164
|
+
* @memberof CanvasRenderer
|
|
170
165
|
* @param {Color|string} [color="#000000"] CSS color.
|
|
171
166
|
* @param {boolean} [opaque=false] Allow transparency [default] or clear the surface completely [true]
|
|
172
167
|
*/
|
|
@@ -182,8 +177,7 @@ class CanvasRenderer extends Renderer {
|
|
|
182
177
|
/**
|
|
183
178
|
* Erase the pixels in the given rectangular area by setting them to transparent black (rgba(0,0,0,0)).
|
|
184
179
|
* @name clearRect
|
|
185
|
-
* @memberof CanvasRenderer
|
|
186
|
-
* @function
|
|
180
|
+
* @memberof CanvasRenderer
|
|
187
181
|
* @param {number} x x axis of the coordinate for the rectangle starting point.
|
|
188
182
|
* @param {number} y y axis of the coordinate for the rectangle starting point.
|
|
189
183
|
* @param {number} width The rectangle's width.
|
|
@@ -196,8 +190,7 @@ class CanvasRenderer extends Renderer {
|
|
|
196
190
|
/**
|
|
197
191
|
* Create a pattern with the specified repetition
|
|
198
192
|
* @name createPattern
|
|
199
|
-
* @memberof CanvasRenderer
|
|
200
|
-
* @function
|
|
193
|
+
* @memberof CanvasRenderer
|
|
201
194
|
* @param {Image} image Source image
|
|
202
195
|
* @param {string} repeat Define how the pattern should be repeated
|
|
203
196
|
* @returns {CanvasPattern}
|
|
@@ -215,8 +208,7 @@ class CanvasRenderer extends Renderer {
|
|
|
215
208
|
/**
|
|
216
209
|
* Draw an image onto the main using the canvas api
|
|
217
210
|
* @name drawImage
|
|
218
|
-
* @memberof CanvasRenderer
|
|
219
|
-
* @function
|
|
211
|
+
* @memberof CanvasRenderer
|
|
220
212
|
* @param {Image} image An element to draw into the context. The specification permits any canvas image source (CanvasImageSource), specifically, a CSSImageValue, an HTMLImageElement, an SVGImageElement, an HTMLVideoElement, an HTMLCanvasElement, an ImageBitmap, or an OffscreenCanvas.
|
|
221
213
|
* @param {number} sx The X coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
|
|
222
214
|
* @param {number} sy The Y coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
|
|
@@ -279,8 +271,7 @@ class CanvasRenderer extends Renderer {
|
|
|
279
271
|
/**
|
|
280
272
|
* Draw a pattern within the given rectangle.
|
|
281
273
|
* @name drawPattern
|
|
282
|
-
* @memberof CanvasRenderer
|
|
283
|
-
* @function
|
|
274
|
+
* @memberof CanvasRenderer
|
|
284
275
|
* @param {CanvasPattern} pattern Pattern object
|
|
285
276
|
* @param {number} x
|
|
286
277
|
* @param {number} y
|
|
@@ -303,8 +294,7 @@ class CanvasRenderer extends Renderer {
|
|
|
303
294
|
/**
|
|
304
295
|
* Stroke an arc at the specified coordinates with given radius, start and end points
|
|
305
296
|
* @name strokeArc
|
|
306
|
-
* @memberof CanvasRenderer
|
|
307
|
-
* @function
|
|
297
|
+
* @memberof CanvasRenderer
|
|
308
298
|
* @param {number} x arc center point x-axis
|
|
309
299
|
* @param {number} y arc center point y-axis
|
|
310
300
|
* @param {number} radius
|
|
@@ -330,8 +320,7 @@ class CanvasRenderer extends Renderer {
|
|
|
330
320
|
/**
|
|
331
321
|
* Fill an arc at the specified coordinates with given radius, start and end points
|
|
332
322
|
* @name fillArc
|
|
333
|
-
* @memberof CanvasRenderer
|
|
334
|
-
* @function
|
|
323
|
+
* @memberof CanvasRenderer
|
|
335
324
|
* @param {number} x arc center point x-axis
|
|
336
325
|
* @param {number} y arc center point y-axis
|
|
337
326
|
* @param {number} radius
|
|
@@ -346,8 +335,7 @@ class CanvasRenderer extends Renderer {
|
|
|
346
335
|
/**
|
|
347
336
|
* Stroke an ellipse at the specified coordinates with given radius
|
|
348
337
|
* @name strokeEllipse
|
|
349
|
-
* @memberof CanvasRenderer
|
|
350
|
-
* @function
|
|
338
|
+
* @memberof CanvasRenderer
|
|
351
339
|
* @param {number} x ellipse center point x-axis
|
|
352
340
|
* @param {number} y ellipse center point y-axis
|
|
353
341
|
* @param {number} w horizontal radius of the ellipse
|
|
@@ -388,8 +376,7 @@ class CanvasRenderer extends Renderer {
|
|
|
388
376
|
/**
|
|
389
377
|
* Fill an ellipse at the specified coordinates with given radius
|
|
390
378
|
* @name fillEllipse
|
|
391
|
-
* @memberof CanvasRenderer
|
|
392
|
-
* @function
|
|
379
|
+
* @memberof CanvasRenderer
|
|
393
380
|
* @param {number} x ellipse center point x-axis
|
|
394
381
|
* @param {number} y ellipse center point y-axis
|
|
395
382
|
* @param {number} w horizontal radius of the ellipse
|
|
@@ -402,8 +389,7 @@ class CanvasRenderer extends Renderer {
|
|
|
402
389
|
/**
|
|
403
390
|
* Stroke a line of the given two points
|
|
404
391
|
* @name strokeLine
|
|
405
|
-
* @memberof CanvasRenderer
|
|
406
|
-
* @function
|
|
392
|
+
* @memberof CanvasRenderer
|
|
407
393
|
* @param {number} startX the start x coordinate
|
|
408
394
|
* @param {number} startY the start y coordinate
|
|
409
395
|
* @param {number} endX the end x coordinate
|
|
@@ -415,6 +401,8 @@ class CanvasRenderer extends Renderer {
|
|
|
415
401
|
return;
|
|
416
402
|
}
|
|
417
403
|
|
|
404
|
+
var context = this.getContext();
|
|
405
|
+
|
|
418
406
|
context.beginPath();
|
|
419
407
|
context.moveTo(startX, startY);
|
|
420
408
|
context.lineTo(endX, endY);
|
|
@@ -424,8 +412,7 @@ class CanvasRenderer extends Renderer {
|
|
|
424
412
|
/**
|
|
425
413
|
* Fill a line of the given two points
|
|
426
414
|
* @name fillLine
|
|
427
|
-
* @memberof CanvasRenderer
|
|
428
|
-
* @function
|
|
415
|
+
* @memberof CanvasRenderer
|
|
429
416
|
* @param {number} startX the start x coordinate
|
|
430
417
|
* @param {number} startY the start y coordinate
|
|
431
418
|
* @param {number} endX the end x coordinate
|
|
@@ -438,8 +425,7 @@ class CanvasRenderer extends Renderer {
|
|
|
438
425
|
/**
|
|
439
426
|
* Stroke the given me.Polygon on the screen
|
|
440
427
|
* @name strokePolygon
|
|
441
|
-
* @memberof CanvasRenderer
|
|
442
|
-
* @function
|
|
428
|
+
* @memberof CanvasRenderer
|
|
443
429
|
* @param {Polygon} poly the shape to draw
|
|
444
430
|
* @param {boolean} [fill=false] also fill the shape with the current color if true
|
|
445
431
|
*/
|
|
@@ -467,8 +453,7 @@ class CanvasRenderer extends Renderer {
|
|
|
467
453
|
/**
|
|
468
454
|
* Fill the given me.Polygon on the screen
|
|
469
455
|
* @name fillPolygon
|
|
470
|
-
* @memberof CanvasRenderer
|
|
471
|
-
* @function
|
|
456
|
+
* @memberof CanvasRenderer
|
|
472
457
|
* @param {Polygon} poly the shape to draw
|
|
473
458
|
*/
|
|
474
459
|
fillPolygon(poly) {
|
|
@@ -478,8 +463,7 @@ class CanvasRenderer extends Renderer {
|
|
|
478
463
|
/**
|
|
479
464
|
* Stroke a rectangle at the specified coordinates
|
|
480
465
|
* @name strokeRect
|
|
481
|
-
* @memberof CanvasRenderer
|
|
482
|
-
* @function
|
|
466
|
+
* @memberof CanvasRenderer
|
|
483
467
|
* @param {number} x
|
|
484
468
|
* @param {number} y
|
|
485
469
|
* @param {number} width
|
|
@@ -499,8 +483,7 @@ class CanvasRenderer extends Renderer {
|
|
|
499
483
|
/**
|
|
500
484
|
* Draw a filled rectangle at the specified coordinates
|
|
501
485
|
* @name fillRect
|
|
502
|
-
* @memberof CanvasRenderer
|
|
503
|
-
* @function
|
|
486
|
+
* @memberof CanvasRenderer
|
|
504
487
|
* @param {number} x
|
|
505
488
|
* @param {number} y
|
|
506
489
|
* @param {number} width
|
|
@@ -513,8 +496,7 @@ class CanvasRenderer extends Renderer {
|
|
|
513
496
|
/**
|
|
514
497
|
* Stroke a rounded rectangle at the specified coordinates
|
|
515
498
|
* @name strokeRoundRect
|
|
516
|
-
* @memberof CanvasRenderer
|
|
517
|
-
* @function
|
|
499
|
+
* @memberof CanvasRenderer
|
|
518
500
|
* @param {number} x
|
|
519
501
|
* @param {number} y
|
|
520
502
|
* @param {number} width
|
|
@@ -537,8 +519,7 @@ class CanvasRenderer extends Renderer {
|
|
|
537
519
|
/**
|
|
538
520
|
* Draw a rounded filled rectangle at the specified coordinates
|
|
539
521
|
* @name fillRoundRect
|
|
540
|
-
* @memberof CanvasRenderer
|
|
541
|
-
* @function
|
|
522
|
+
* @memberof CanvasRenderer
|
|
542
523
|
* @param {number} x
|
|
543
524
|
* @param {number} y
|
|
544
525
|
* @param {number} width
|
|
@@ -553,8 +534,7 @@ class CanvasRenderer extends Renderer {
|
|
|
553
534
|
/**
|
|
554
535
|
* return a reference to the system 2d Context
|
|
555
536
|
* @name getContext
|
|
556
|
-
* @memberof CanvasRenderer
|
|
557
|
-
* @function
|
|
537
|
+
* @memberof CanvasRenderer
|
|
558
538
|
* @returns {CanvasRenderingContext2D}
|
|
559
539
|
*/
|
|
560
540
|
getContext() {
|
|
@@ -573,8 +553,7 @@ class CanvasRenderer extends Renderer {
|
|
|
573
553
|
/**
|
|
574
554
|
* save the canvas context
|
|
575
555
|
* @name save
|
|
576
|
-
* @memberof CanvasRenderer
|
|
577
|
-
* @function
|
|
556
|
+
* @memberof CanvasRenderer
|
|
578
557
|
*/
|
|
579
558
|
save() {
|
|
580
559
|
this.backBufferContext2D.save();
|
|
@@ -583,8 +562,7 @@ class CanvasRenderer extends Renderer {
|
|
|
583
562
|
/**
|
|
584
563
|
* restores the canvas context
|
|
585
564
|
* @name restore
|
|
586
|
-
* @memberof CanvasRenderer
|
|
587
|
-
* @function
|
|
565
|
+
* @memberof CanvasRenderer
|
|
588
566
|
*/
|
|
589
567
|
restore() {
|
|
590
568
|
this.backBufferContext2D.restore();
|
|
@@ -598,8 +576,7 @@ class CanvasRenderer extends Renderer {
|
|
|
598
576
|
/**
|
|
599
577
|
* rotates the canvas context
|
|
600
578
|
* @name rotate
|
|
601
|
-
* @memberof CanvasRenderer
|
|
602
|
-
* @function
|
|
579
|
+
* @memberof CanvasRenderer
|
|
603
580
|
* @param {number} angle in radians
|
|
604
581
|
*/
|
|
605
582
|
rotate(angle) {
|
|
@@ -609,8 +586,7 @@ class CanvasRenderer extends Renderer {
|
|
|
609
586
|
/**
|
|
610
587
|
* scales the canvas context
|
|
611
588
|
* @name scale
|
|
612
|
-
* @memberof CanvasRenderer
|
|
613
|
-
* @function
|
|
589
|
+
* @memberof CanvasRenderer
|
|
614
590
|
* @param {number} x
|
|
615
591
|
* @param {number} y
|
|
616
592
|
*/
|
|
@@ -622,8 +598,7 @@ class CanvasRenderer extends Renderer {
|
|
|
622
598
|
* Set the current fill & stroke style color.
|
|
623
599
|
* By default, or upon reset, the value is set to #000000.
|
|
624
600
|
* @name setColor
|
|
625
|
-
* @memberof CanvasRenderer
|
|
626
|
-
* @function
|
|
601
|
+
* @memberof CanvasRenderer
|
|
627
602
|
* @param {Color|string} color css color value
|
|
628
603
|
*/
|
|
629
604
|
setColor(color) {
|
|
@@ -638,8 +613,7 @@ class CanvasRenderer extends Renderer {
|
|
|
638
613
|
/**
|
|
639
614
|
* Set the global alpha
|
|
640
615
|
* @name setGlobalAlpha
|
|
641
|
-
* @memberof CanvasRenderer
|
|
642
|
-
* @function
|
|
616
|
+
* @memberof CanvasRenderer
|
|
643
617
|
* @param {number} alpha 0.0 to 1.0 values accepted.
|
|
644
618
|
*/
|
|
645
619
|
setGlobalAlpha(alpha) {
|
|
@@ -649,8 +623,7 @@ class CanvasRenderer extends Renderer {
|
|
|
649
623
|
/**
|
|
650
624
|
* Return the global alpha
|
|
651
625
|
* @name getGlobalAlpha
|
|
652
|
-
* @memberof CanvasRenderer
|
|
653
|
-
* @function
|
|
626
|
+
* @memberof CanvasRenderer
|
|
654
627
|
* @returns {number} global alpha value
|
|
655
628
|
*/
|
|
656
629
|
getGlobalAlpha() {
|
|
@@ -660,8 +633,7 @@ class CanvasRenderer extends Renderer {
|
|
|
660
633
|
/**
|
|
661
634
|
* Set the line width on the context
|
|
662
635
|
* @name setLineWidth
|
|
663
|
-
* @memberof CanvasRenderer
|
|
664
|
-
* @function
|
|
636
|
+
* @memberof CanvasRenderer
|
|
665
637
|
* @param {number} width Line width
|
|
666
638
|
*/
|
|
667
639
|
setLineWidth(width) {
|
|
@@ -672,8 +644,7 @@ class CanvasRenderer extends Renderer {
|
|
|
672
644
|
* Reset (overrides) the renderer transformation matrix to the
|
|
673
645
|
* identity one, and then apply the given transformation matrix.
|
|
674
646
|
* @name setTransform
|
|
675
|
-
* @memberof CanvasRenderer
|
|
676
|
-
* @function
|
|
647
|
+
* @memberof CanvasRenderer
|
|
677
648
|
* @param {Matrix2d} mat2d Matrix to transform by
|
|
678
649
|
*/
|
|
679
650
|
setTransform(mat2d) {
|
|
@@ -684,8 +655,7 @@ class CanvasRenderer extends Renderer {
|
|
|
684
655
|
/**
|
|
685
656
|
* Multiply given matrix into the renderer tranformation matrix
|
|
686
657
|
* @name transform
|
|
687
|
-
* @memberof CanvasRenderer
|
|
688
|
-
* @function
|
|
658
|
+
* @memberof CanvasRenderer
|
|
689
659
|
* @param {Matrix2d} mat2d Matrix to transform by
|
|
690
660
|
*/
|
|
691
661
|
transform(mat2d) {
|
|
@@ -708,8 +678,7 @@ class CanvasRenderer extends Renderer {
|
|
|
708
678
|
/**
|
|
709
679
|
* Translates the context to the given position
|
|
710
680
|
* @name translate
|
|
711
|
-
* @memberof CanvasRenderer
|
|
712
|
-
* @function
|
|
681
|
+
* @memberof CanvasRenderer
|
|
713
682
|
* @param {number} x
|
|
714
683
|
* @param {number} y
|
|
715
684
|
*/
|
|
@@ -728,8 +697,7 @@ class CanvasRenderer extends Renderer {
|
|
|
728
697
|
* and restore it (with the restore() method) any time in the future.
|
|
729
698
|
* (<u>this is an experimental feature !</u>)
|
|
730
699
|
* @name clipRect
|
|
731
|
-
* @memberof CanvasRenderer
|
|
732
|
-
* @function
|
|
700
|
+
* @memberof CanvasRenderer
|
|
733
701
|
* @param {number} x
|
|
734
702
|
* @param {number} y
|
|
735
703
|
* @param {number} width
|
|
@@ -761,21 +729,27 @@ class CanvasRenderer extends Renderer {
|
|
|
761
729
|
* So, if the renderable is larger than the mask, only the intersecting part of the renderable will be visible.
|
|
762
730
|
* Mask are not preserved through renderer context save and restore.
|
|
763
731
|
* @name setMask
|
|
764
|
-
* @memberof CanvasRenderer
|
|
765
|
-
* @function
|
|
732
|
+
* @memberof CanvasRenderer
|
|
766
733
|
* @param {Rect|RoundRect|Polygon|Line|Ellipse} [mask] the shape defining the mask to be applied
|
|
734
|
+
* @param {boolean} [invert=false] either the given shape should define what is visible (default) or the opposite
|
|
767
735
|
*/
|
|
768
|
-
setMask(mask) {
|
|
736
|
+
setMask(mask, invert = false) {
|
|
769
737
|
var context = this.getContext();
|
|
770
|
-
var _x = mask.pos.x, _y = mask.pos.y;
|
|
771
738
|
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
739
|
+
if (this.maskLevel === 0) {
|
|
740
|
+
// only save context on the first mask
|
|
741
|
+
context.save();
|
|
742
|
+
context.beginPath();
|
|
743
|
+
}
|
|
775
744
|
|
|
776
745
|
// https://github.com/melonjs/melonJS/issues/648
|
|
777
|
-
if (mask instanceof
|
|
778
|
-
|
|
746
|
+
else if (mask instanceof RoundRect) {
|
|
747
|
+
context.roundRect(mask.top, mask.left, mask.width, mask.height, mask.radius);
|
|
748
|
+
} else if (mask instanceof Rect || mask instanceof Bounds) {
|
|
749
|
+
context.rect(mask.top, mask.left, mask.width, mask.height);
|
|
750
|
+
} else if (mask instanceof Ellipse) {
|
|
751
|
+
const _x = mask.pos.x, _y = mask.pos.y,
|
|
752
|
+
hw = mask.radiusV.x,
|
|
779
753
|
hh = mask.radiusV.y,
|
|
780
754
|
lx = _x - hw,
|
|
781
755
|
rx = _x + hw,
|
|
@@ -794,31 +768,40 @@ class CanvasRenderer extends Renderer {
|
|
|
794
768
|
context.bezierCurveTo(rx, ymax, xmax, by, _x, by);
|
|
795
769
|
context.bezierCurveTo(xmin, by, lx, ymax, lx, _y);
|
|
796
770
|
context.bezierCurveTo(lx, ymin, xmin, ty, _x, ty);
|
|
797
|
-
} else if (mask instanceof RoundRect) {
|
|
798
|
-
context.roundRect(_x, _y, mask.width, mask.height, mask.radius);
|
|
799
771
|
} else {
|
|
800
|
-
|
|
772
|
+
const _x = mask.pos.x, _y = mask.pos.y;
|
|
801
773
|
var point;
|
|
774
|
+
|
|
775
|
+
context.moveTo(_x + mask.points[0].x, _y + mask.points[0].y);
|
|
802
776
|
for (var i = 1; i < mask.points.length; i++) {
|
|
803
777
|
point = mask.points[i];
|
|
804
778
|
context.lineTo(_x + point.x, _y + point.y);
|
|
805
779
|
}
|
|
806
780
|
}
|
|
807
781
|
|
|
808
|
-
|
|
782
|
+
this.maskLevel++;
|
|
783
|
+
|
|
784
|
+
if (invert === true) {
|
|
785
|
+
context.closePath();
|
|
786
|
+
context.globalCompositeOperation = "destination-atop";
|
|
787
|
+
context.fill();
|
|
788
|
+
} else {
|
|
789
|
+
context.clip();
|
|
790
|
+
}
|
|
809
791
|
}
|
|
810
792
|
|
|
811
793
|
/**
|
|
812
794
|
* disable (remove) the rendering mask set through setMask.
|
|
813
795
|
* @name clearMask
|
|
814
796
|
* @see CanvasRenderer#setMask
|
|
815
|
-
* @memberof CanvasRenderer
|
|
816
|
-
* @function
|
|
797
|
+
* @memberof CanvasRenderer
|
|
817
798
|
*/
|
|
818
799
|
clearMask() {
|
|
819
|
-
this.
|
|
800
|
+
if (this.maskLevel > 0) {
|
|
801
|
+
this.maskLevel = 0;
|
|
802
|
+
this.getContext().restore();
|
|
803
|
+
}
|
|
820
804
|
}
|
|
821
|
-
|
|
822
805
|
};
|
|
823
806
|
|
|
824
807
|
export default CanvasRenderer;
|