melonjs 10.8.0 → 10.11.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 +1833 -2267
- package/dist/melonjs.min.js +4 -4
- package/dist/melonjs.module.d.ts +642 -1416
- package/dist/melonjs.module.js +1778 -2237
- package/package.json +16 -16
- package/src/audio/audio.js +0 -1
- package/src/camera/camera2d.js +1 -16
- package/src/entity/entity.js +1 -4
- package/src/game.js +2 -2
- package/src/geometries/ellipse.js +18 -27
- package/src/geometries/line.js +5 -8
- package/src/geometries/path2d.js +10 -20
- package/src/geometries/poly.js +28 -45
- package/src/geometries/rectangle.js +24 -36
- package/src/geometries/roundrect.js +96 -3
- package/src/index.js +7 -2
- package/src/input/gamepad.js +5 -16
- 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 +1 -1
- package/src/physics/bounds.js +5 -19
- package/src/physics/collision.js +0 -1
- package/src/physics/detector.js +0 -4
- package/src/physics/quadtree.js +0 -7
- package/src/physics/sat.js +3 -3
- package/src/physics/world.js +0 -4
- package/src/plugin/plugin.js +0 -2
- package/src/polyfill/index.js +1 -0
- package/src/polyfill/roundrect.js +237 -0
- package/src/renderable/GUI.js +5 -10
- package/src/renderable/collectable.js +1 -0
- package/src/renderable/container.js +26 -54
- package/src/renderable/dragndrop.js +0 -9
- package/src/renderable/imagelayer.js +3 -7
- package/src/renderable/light2d.js +114 -0
- package/src/renderable/renderable.js +22 -43
- package/src/renderable/sprite.js +13 -25
- package/src/renderable/trigger.js +1 -1
- package/src/state/stage.js +72 -6
- package/src/state/state.js +3 -20
- package/src/system/device.js +14 -53
- package/src/system/event.js +11 -0
- package/src/system/pooling.js +19 -8
- 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 +19 -21
- 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 +2 -5
- package/src/video/canvas/canvas_renderer.js +76 -103
- package/src/video/renderer.js +43 -50
- package/src/video/{texture.js → texture/atlas.js} +8 -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 +4 -7
- package/src/video/webgl/webgl_compositor.js +0 -14
- package/src/video/webgl/webgl_renderer.js +73 -97
|
@@ -1,10 +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
|
+
import RoundRect from "./../../geometries/roundrect.js";
|
|
6
|
+
import Rect from "./../../geometries/rectangle.js";
|
|
7
|
+
import Bounds from "./../../physics/bounds.js";
|
|
5
8
|
import { createCanvas } from "./../video.js";
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
import * as event from "./../../system/event.js";
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* @classdesc
|
|
@@ -71,8 +73,7 @@ class CanvasRenderer extends Renderer {
|
|
|
71
73
|
/**
|
|
72
74
|
* Reset context state
|
|
73
75
|
* @name reset
|
|
74
|
-
* @memberof CanvasRenderer
|
|
75
|
-
* @function
|
|
76
|
+
* @memberof CanvasRenderer
|
|
76
77
|
*/
|
|
77
78
|
reset() {
|
|
78
79
|
super.reset();
|
|
@@ -82,8 +83,7 @@ class CanvasRenderer extends Renderer {
|
|
|
82
83
|
/**
|
|
83
84
|
* Reset the canvas transform to identity
|
|
84
85
|
* @name resetTransform
|
|
85
|
-
* @memberof CanvasRenderer
|
|
86
|
-
* @function
|
|
86
|
+
* @memberof CanvasRenderer
|
|
87
87
|
*/
|
|
88
88
|
resetTransform() {
|
|
89
89
|
this.backBufferContext2D.setTransform(1, 0, 0, 1, 0, 0);
|
|
@@ -102,8 +102,7 @@ class CanvasRenderer extends Renderer {
|
|
|
102
102
|
* <img src="images/screen-blendmode.png" width="510"/> <br>
|
|
103
103
|
* @name setBlendMode
|
|
104
104
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
|
|
105
|
-
* @memberof CanvasRenderer
|
|
106
|
-
* @function
|
|
105
|
+
* @memberof CanvasRenderer
|
|
107
106
|
* @param {string} [mode="normal"] blend mode : "normal", "multiply", "lighter, "additive", "screen"
|
|
108
107
|
* @param {CanvasRenderingContext2D} [context]
|
|
109
108
|
*/
|
|
@@ -140,8 +139,7 @@ class CanvasRenderer extends Renderer {
|
|
|
140
139
|
/**
|
|
141
140
|
* prepare the framebuffer for drawing a new frame
|
|
142
141
|
* @name clear
|
|
143
|
-
* @memberof CanvasRenderer
|
|
144
|
-
* @function
|
|
142
|
+
* @memberof CanvasRenderer
|
|
145
143
|
*/
|
|
146
144
|
clear() {
|
|
147
145
|
if (this.settings.transparent) {
|
|
@@ -152,8 +150,7 @@ class CanvasRenderer extends Renderer {
|
|
|
152
150
|
/**
|
|
153
151
|
* render the main framebuffer on screen
|
|
154
152
|
* @name flush
|
|
155
|
-
* @memberof CanvasRenderer
|
|
156
|
-
* @function
|
|
153
|
+
* @memberof CanvasRenderer
|
|
157
154
|
*/
|
|
158
155
|
flush() {
|
|
159
156
|
if (this.settings.doubleBuffering) {
|
|
@@ -164,8 +161,7 @@ class CanvasRenderer extends Renderer {
|
|
|
164
161
|
/**
|
|
165
162
|
* Clears the main framebuffer with the given color
|
|
166
163
|
* @name clearColor
|
|
167
|
-
* @memberof CanvasRenderer
|
|
168
|
-
* @function
|
|
164
|
+
* @memberof CanvasRenderer
|
|
169
165
|
* @param {Color|string} [color="#000000"] CSS color.
|
|
170
166
|
* @param {boolean} [opaque=false] Allow transparency [default] or clear the surface completely [true]
|
|
171
167
|
*/
|
|
@@ -181,8 +177,7 @@ class CanvasRenderer extends Renderer {
|
|
|
181
177
|
/**
|
|
182
178
|
* Erase the pixels in the given rectangular area by setting them to transparent black (rgba(0,0,0,0)).
|
|
183
179
|
* @name clearRect
|
|
184
|
-
* @memberof CanvasRenderer
|
|
185
|
-
* @function
|
|
180
|
+
* @memberof CanvasRenderer
|
|
186
181
|
* @param {number} x x axis of the coordinate for the rectangle starting point.
|
|
187
182
|
* @param {number} y y axis of the coordinate for the rectangle starting point.
|
|
188
183
|
* @param {number} width The rectangle's width.
|
|
@@ -195,8 +190,7 @@ class CanvasRenderer extends Renderer {
|
|
|
195
190
|
/**
|
|
196
191
|
* Create a pattern with the specified repetition
|
|
197
192
|
* @name createPattern
|
|
198
|
-
* @memberof CanvasRenderer
|
|
199
|
-
* @function
|
|
193
|
+
* @memberof CanvasRenderer
|
|
200
194
|
* @param {Image} image Source image
|
|
201
195
|
* @param {string} repeat Define how the pattern should be repeated
|
|
202
196
|
* @returns {CanvasPattern}
|
|
@@ -214,8 +208,7 @@ class CanvasRenderer extends Renderer {
|
|
|
214
208
|
/**
|
|
215
209
|
* Draw an image onto the main using the canvas api
|
|
216
210
|
* @name drawImage
|
|
217
|
-
* @memberof CanvasRenderer
|
|
218
|
-
* @function
|
|
211
|
+
* @memberof CanvasRenderer
|
|
219
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.
|
|
220
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.
|
|
221
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.
|
|
@@ -278,8 +271,7 @@ class CanvasRenderer extends Renderer {
|
|
|
278
271
|
/**
|
|
279
272
|
* Draw a pattern within the given rectangle.
|
|
280
273
|
* @name drawPattern
|
|
281
|
-
* @memberof CanvasRenderer
|
|
282
|
-
* @function
|
|
274
|
+
* @memberof CanvasRenderer
|
|
283
275
|
* @param {CanvasPattern} pattern Pattern object
|
|
284
276
|
* @param {number} x
|
|
285
277
|
* @param {number} y
|
|
@@ -302,8 +294,7 @@ class CanvasRenderer extends Renderer {
|
|
|
302
294
|
/**
|
|
303
295
|
* Stroke an arc at the specified coordinates with given radius, start and end points
|
|
304
296
|
* @name strokeArc
|
|
305
|
-
* @memberof CanvasRenderer
|
|
306
|
-
* @function
|
|
297
|
+
* @memberof CanvasRenderer
|
|
307
298
|
* @param {number} x arc center point x-axis
|
|
308
299
|
* @param {number} y arc center point y-axis
|
|
309
300
|
* @param {number} radius
|
|
@@ -329,8 +320,7 @@ class CanvasRenderer extends Renderer {
|
|
|
329
320
|
/**
|
|
330
321
|
* Fill an arc at the specified coordinates with given radius, start and end points
|
|
331
322
|
* @name fillArc
|
|
332
|
-
* @memberof CanvasRenderer
|
|
333
|
-
* @function
|
|
323
|
+
* @memberof CanvasRenderer
|
|
334
324
|
* @param {number} x arc center point x-axis
|
|
335
325
|
* @param {number} y arc center point y-axis
|
|
336
326
|
* @param {number} radius
|
|
@@ -345,8 +335,7 @@ class CanvasRenderer extends Renderer {
|
|
|
345
335
|
/**
|
|
346
336
|
* Stroke an ellipse at the specified coordinates with given radius
|
|
347
337
|
* @name strokeEllipse
|
|
348
|
-
* @memberof CanvasRenderer
|
|
349
|
-
* @function
|
|
338
|
+
* @memberof CanvasRenderer
|
|
350
339
|
* @param {number} x ellipse center point x-axis
|
|
351
340
|
* @param {number} y ellipse center point y-axis
|
|
352
341
|
* @param {number} w horizontal radius of the ellipse
|
|
@@ -387,8 +376,7 @@ class CanvasRenderer extends Renderer {
|
|
|
387
376
|
/**
|
|
388
377
|
* Fill an ellipse at the specified coordinates with given radius
|
|
389
378
|
* @name fillEllipse
|
|
390
|
-
* @memberof CanvasRenderer
|
|
391
|
-
* @function
|
|
379
|
+
* @memberof CanvasRenderer
|
|
392
380
|
* @param {number} x ellipse center point x-axis
|
|
393
381
|
* @param {number} y ellipse center point y-axis
|
|
394
382
|
* @param {number} w horizontal radius of the ellipse
|
|
@@ -401,8 +389,7 @@ class CanvasRenderer extends Renderer {
|
|
|
401
389
|
/**
|
|
402
390
|
* Stroke a line of the given two points
|
|
403
391
|
* @name strokeLine
|
|
404
|
-
* @memberof CanvasRenderer
|
|
405
|
-
* @function
|
|
392
|
+
* @memberof CanvasRenderer
|
|
406
393
|
* @param {number} startX the start x coordinate
|
|
407
394
|
* @param {number} startY the start y coordinate
|
|
408
395
|
* @param {number} endX the end x coordinate
|
|
@@ -414,6 +401,8 @@ class CanvasRenderer extends Renderer {
|
|
|
414
401
|
return;
|
|
415
402
|
}
|
|
416
403
|
|
|
404
|
+
var context = this.getContext();
|
|
405
|
+
|
|
417
406
|
context.beginPath();
|
|
418
407
|
context.moveTo(startX, startY);
|
|
419
408
|
context.lineTo(endX, endY);
|
|
@@ -423,8 +412,7 @@ class CanvasRenderer extends Renderer {
|
|
|
423
412
|
/**
|
|
424
413
|
* Fill a line of the given two points
|
|
425
414
|
* @name fillLine
|
|
426
|
-
* @memberof CanvasRenderer
|
|
427
|
-
* @function
|
|
415
|
+
* @memberof CanvasRenderer
|
|
428
416
|
* @param {number} startX the start x coordinate
|
|
429
417
|
* @param {number} startY the start y coordinate
|
|
430
418
|
* @param {number} endX the end x coordinate
|
|
@@ -437,8 +425,7 @@ class CanvasRenderer extends Renderer {
|
|
|
437
425
|
/**
|
|
438
426
|
* Stroke the given me.Polygon on the screen
|
|
439
427
|
* @name strokePolygon
|
|
440
|
-
* @memberof CanvasRenderer
|
|
441
|
-
* @function
|
|
428
|
+
* @memberof CanvasRenderer
|
|
442
429
|
* @param {Polygon} poly the shape to draw
|
|
443
430
|
* @param {boolean} [fill=false] also fill the shape with the current color if true
|
|
444
431
|
*/
|
|
@@ -466,8 +453,7 @@ class CanvasRenderer extends Renderer {
|
|
|
466
453
|
/**
|
|
467
454
|
* Fill the given me.Polygon on the screen
|
|
468
455
|
* @name fillPolygon
|
|
469
|
-
* @memberof CanvasRenderer
|
|
470
|
-
* @function
|
|
456
|
+
* @memberof CanvasRenderer
|
|
471
457
|
* @param {Polygon} poly the shape to draw
|
|
472
458
|
*/
|
|
473
459
|
fillPolygon(poly) {
|
|
@@ -477,8 +463,7 @@ class CanvasRenderer extends Renderer {
|
|
|
477
463
|
/**
|
|
478
464
|
* Stroke a rectangle at the specified coordinates
|
|
479
465
|
* @name strokeRect
|
|
480
|
-
* @memberof CanvasRenderer
|
|
481
|
-
* @function
|
|
466
|
+
* @memberof CanvasRenderer
|
|
482
467
|
* @param {number} x
|
|
483
468
|
* @param {number} y
|
|
484
469
|
* @param {number} width
|
|
@@ -498,8 +483,7 @@ class CanvasRenderer extends Renderer {
|
|
|
498
483
|
/**
|
|
499
484
|
* Draw a filled rectangle at the specified coordinates
|
|
500
485
|
* @name fillRect
|
|
501
|
-
* @memberof CanvasRenderer
|
|
502
|
-
* @function
|
|
486
|
+
* @memberof CanvasRenderer
|
|
503
487
|
* @param {number} x
|
|
504
488
|
* @param {number} y
|
|
505
489
|
* @param {number} width
|
|
@@ -512,8 +496,7 @@ class CanvasRenderer extends Renderer {
|
|
|
512
496
|
/**
|
|
513
497
|
* Stroke a rounded rectangle at the specified coordinates
|
|
514
498
|
* @name strokeRoundRect
|
|
515
|
-
* @memberof CanvasRenderer
|
|
516
|
-
* @function
|
|
499
|
+
* @memberof CanvasRenderer
|
|
517
500
|
* @param {number} x
|
|
518
501
|
* @param {number} y
|
|
519
502
|
* @param {number} width
|
|
@@ -529,28 +512,14 @@ class CanvasRenderer extends Renderer {
|
|
|
529
512
|
var context = this.getContext();
|
|
530
513
|
|
|
531
514
|
context.beginPath();
|
|
532
|
-
|
|
533
|
-
//https://developer.chrome.com/blog/canvas2d/#round-rect
|
|
534
|
-
context.roundRect(x, y, width, height, radius);
|
|
535
|
-
} else {
|
|
536
|
-
context.moveTo(x + radius, y);
|
|
537
|
-
context.lineTo(x + width - radius, y);
|
|
538
|
-
context.arcTo(x + width, y, x + width, y + radius, radius);
|
|
539
|
-
context.lineTo(x + width, y + height - radius);
|
|
540
|
-
context.arcTo(x + width, y + height, x + width - radius, y + height, radius);
|
|
541
|
-
context.lineTo(x + radius, y + height);
|
|
542
|
-
context.arcTo(x, y + height, x, y + height - radius, radius);
|
|
543
|
-
context.lineTo(x, y + radius);
|
|
544
|
-
context.arcTo(x, y, x + radius, y, radius);
|
|
545
|
-
}
|
|
515
|
+
context.roundRect(x, y, width, height, radius);
|
|
546
516
|
context[fill === true ? "fill" : "stroke"]();
|
|
547
517
|
}
|
|
548
518
|
|
|
549
519
|
/**
|
|
550
520
|
* Draw a rounded filled rectangle at the specified coordinates
|
|
551
521
|
* @name fillRoundRect
|
|
552
|
-
* @memberof CanvasRenderer
|
|
553
|
-
* @function
|
|
522
|
+
* @memberof CanvasRenderer
|
|
554
523
|
* @param {number} x
|
|
555
524
|
* @param {number} y
|
|
556
525
|
* @param {number} width
|
|
@@ -565,8 +534,7 @@ class CanvasRenderer extends Renderer {
|
|
|
565
534
|
/**
|
|
566
535
|
* return a reference to the system 2d Context
|
|
567
536
|
* @name getContext
|
|
568
|
-
* @memberof CanvasRenderer
|
|
569
|
-
* @function
|
|
537
|
+
* @memberof CanvasRenderer
|
|
570
538
|
* @returns {CanvasRenderingContext2D}
|
|
571
539
|
*/
|
|
572
540
|
getContext() {
|
|
@@ -585,8 +553,7 @@ class CanvasRenderer extends Renderer {
|
|
|
585
553
|
/**
|
|
586
554
|
* save the canvas context
|
|
587
555
|
* @name save
|
|
588
|
-
* @memberof CanvasRenderer
|
|
589
|
-
* @function
|
|
556
|
+
* @memberof CanvasRenderer
|
|
590
557
|
*/
|
|
591
558
|
save() {
|
|
592
559
|
this.backBufferContext2D.save();
|
|
@@ -595,8 +562,7 @@ class CanvasRenderer extends Renderer {
|
|
|
595
562
|
/**
|
|
596
563
|
* restores the canvas context
|
|
597
564
|
* @name restore
|
|
598
|
-
* @memberof CanvasRenderer
|
|
599
|
-
* @function
|
|
565
|
+
* @memberof CanvasRenderer
|
|
600
566
|
*/
|
|
601
567
|
restore() {
|
|
602
568
|
this.backBufferContext2D.restore();
|
|
@@ -610,8 +576,7 @@ class CanvasRenderer extends Renderer {
|
|
|
610
576
|
/**
|
|
611
577
|
* rotates the canvas context
|
|
612
578
|
* @name rotate
|
|
613
|
-
* @memberof CanvasRenderer
|
|
614
|
-
* @function
|
|
579
|
+
* @memberof CanvasRenderer
|
|
615
580
|
* @param {number} angle in radians
|
|
616
581
|
*/
|
|
617
582
|
rotate(angle) {
|
|
@@ -621,8 +586,7 @@ class CanvasRenderer extends Renderer {
|
|
|
621
586
|
/**
|
|
622
587
|
* scales the canvas context
|
|
623
588
|
* @name scale
|
|
624
|
-
* @memberof CanvasRenderer
|
|
625
|
-
* @function
|
|
589
|
+
* @memberof CanvasRenderer
|
|
626
590
|
* @param {number} x
|
|
627
591
|
* @param {number} y
|
|
628
592
|
*/
|
|
@@ -634,8 +598,7 @@ class CanvasRenderer extends Renderer {
|
|
|
634
598
|
* Set the current fill & stroke style color.
|
|
635
599
|
* By default, or upon reset, the value is set to #000000.
|
|
636
600
|
* @name setColor
|
|
637
|
-
* @memberof CanvasRenderer
|
|
638
|
-
* @function
|
|
601
|
+
* @memberof CanvasRenderer
|
|
639
602
|
* @param {Color|string} color css color value
|
|
640
603
|
*/
|
|
641
604
|
setColor(color) {
|
|
@@ -650,8 +613,7 @@ class CanvasRenderer extends Renderer {
|
|
|
650
613
|
/**
|
|
651
614
|
* Set the global alpha
|
|
652
615
|
* @name setGlobalAlpha
|
|
653
|
-
* @memberof CanvasRenderer
|
|
654
|
-
* @function
|
|
616
|
+
* @memberof CanvasRenderer
|
|
655
617
|
* @param {number} alpha 0.0 to 1.0 values accepted.
|
|
656
618
|
*/
|
|
657
619
|
setGlobalAlpha(alpha) {
|
|
@@ -661,8 +623,7 @@ class CanvasRenderer extends Renderer {
|
|
|
661
623
|
/**
|
|
662
624
|
* Return the global alpha
|
|
663
625
|
* @name getGlobalAlpha
|
|
664
|
-
* @memberof CanvasRenderer
|
|
665
|
-
* @function
|
|
626
|
+
* @memberof CanvasRenderer
|
|
666
627
|
* @returns {number} global alpha value
|
|
667
628
|
*/
|
|
668
629
|
getGlobalAlpha() {
|
|
@@ -672,8 +633,7 @@ class CanvasRenderer extends Renderer {
|
|
|
672
633
|
/**
|
|
673
634
|
* Set the line width on the context
|
|
674
635
|
* @name setLineWidth
|
|
675
|
-
* @memberof CanvasRenderer
|
|
676
|
-
* @function
|
|
636
|
+
* @memberof CanvasRenderer
|
|
677
637
|
* @param {number} width Line width
|
|
678
638
|
*/
|
|
679
639
|
setLineWidth(width) {
|
|
@@ -684,8 +644,7 @@ class CanvasRenderer extends Renderer {
|
|
|
684
644
|
* Reset (overrides) the renderer transformation matrix to the
|
|
685
645
|
* identity one, and then apply the given transformation matrix.
|
|
686
646
|
* @name setTransform
|
|
687
|
-
* @memberof CanvasRenderer
|
|
688
|
-
* @function
|
|
647
|
+
* @memberof CanvasRenderer
|
|
689
648
|
* @param {Matrix2d} mat2d Matrix to transform by
|
|
690
649
|
*/
|
|
691
650
|
setTransform(mat2d) {
|
|
@@ -696,8 +655,7 @@ class CanvasRenderer extends Renderer {
|
|
|
696
655
|
/**
|
|
697
656
|
* Multiply given matrix into the renderer tranformation matrix
|
|
698
657
|
* @name transform
|
|
699
|
-
* @memberof CanvasRenderer
|
|
700
|
-
* @function
|
|
658
|
+
* @memberof CanvasRenderer
|
|
701
659
|
* @param {Matrix2d} mat2d Matrix to transform by
|
|
702
660
|
*/
|
|
703
661
|
transform(mat2d) {
|
|
@@ -720,8 +678,7 @@ class CanvasRenderer extends Renderer {
|
|
|
720
678
|
/**
|
|
721
679
|
* Translates the context to the given position
|
|
722
680
|
* @name translate
|
|
723
|
-
* @memberof CanvasRenderer
|
|
724
|
-
* @function
|
|
681
|
+
* @memberof CanvasRenderer
|
|
725
682
|
* @param {number} x
|
|
726
683
|
* @param {number} y
|
|
727
684
|
*/
|
|
@@ -740,8 +697,7 @@ class CanvasRenderer extends Renderer {
|
|
|
740
697
|
* and restore it (with the restore() method) any time in the future.
|
|
741
698
|
* (<u>this is an experimental feature !</u>)
|
|
742
699
|
* @name clipRect
|
|
743
|
-
* @memberof CanvasRenderer
|
|
744
|
-
* @function
|
|
700
|
+
* @memberof CanvasRenderer
|
|
745
701
|
* @param {number} x
|
|
746
702
|
* @param {number} y
|
|
747
703
|
* @param {number} width
|
|
@@ -773,19 +729,27 @@ class CanvasRenderer extends Renderer {
|
|
|
773
729
|
* So, if the renderable is larger than the mask, only the intersecting part of the renderable will be visible.
|
|
774
730
|
* Mask are not preserved through renderer context save and restore.
|
|
775
731
|
* @name setMask
|
|
776
|
-
* @memberof CanvasRenderer
|
|
777
|
-
* @
|
|
778
|
-
* @param {
|
|
732
|
+
* @memberof CanvasRenderer
|
|
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
|
|
779
735
|
*/
|
|
780
|
-
setMask(mask) {
|
|
736
|
+
setMask(mask, invert = false) {
|
|
781
737
|
var context = this.getContext();
|
|
782
|
-
var _x = mask.pos.x, _y = mask.pos.y;
|
|
783
738
|
|
|
784
|
-
|
|
739
|
+
if (this.maskLevel === 0) {
|
|
740
|
+
// only save context on the first mask
|
|
741
|
+
context.save();
|
|
742
|
+
context.beginPath();
|
|
743
|
+
}
|
|
785
744
|
|
|
786
745
|
// https://github.com/melonjs/melonJS/issues/648
|
|
787
|
-
if (mask instanceof
|
|
788
|
-
|
|
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,
|
|
789
753
|
hh = mask.radiusV.y,
|
|
790
754
|
lx = _x - hw,
|
|
791
755
|
rx = _x + hw,
|
|
@@ -799,36 +763,45 @@ class CanvasRenderer extends Renderer {
|
|
|
799
763
|
ymin = _y - ymagic,
|
|
800
764
|
ymax = _y + ymagic;
|
|
801
765
|
|
|
802
|
-
context.beginPath();
|
|
803
766
|
context.moveTo(_x, ty);
|
|
804
767
|
context.bezierCurveTo(xmax, ty, rx, ymin, rx, _y);
|
|
805
768
|
context.bezierCurveTo(rx, ymax, xmax, by, _x, by);
|
|
806
769
|
context.bezierCurveTo(xmin, by, lx, ymax, lx, _y);
|
|
807
770
|
context.bezierCurveTo(lx, ymin, xmin, ty, _x, ty);
|
|
808
771
|
} else {
|
|
809
|
-
|
|
810
|
-
context.moveTo(_x + mask.points[0].x, _y + mask.points[0].y);
|
|
772
|
+
const _x = mask.pos.x, _y = mask.pos.y;
|
|
811
773
|
var point;
|
|
774
|
+
|
|
775
|
+
context.moveTo(_x + mask.points[0].x, _y + mask.points[0].y);
|
|
812
776
|
for (var i = 1; i < mask.points.length; i++) {
|
|
813
777
|
point = mask.points[i];
|
|
814
778
|
context.lineTo(_x + point.x, _y + point.y);
|
|
815
779
|
}
|
|
816
780
|
}
|
|
817
781
|
|
|
818
|
-
|
|
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
|
+
}
|
|
819
791
|
}
|
|
820
792
|
|
|
821
793
|
/**
|
|
822
794
|
* disable (remove) the rendering mask set through setMask.
|
|
823
795
|
* @name clearMask
|
|
824
796
|
* @see CanvasRenderer#setMask
|
|
825
|
-
* @memberof CanvasRenderer
|
|
826
|
-
* @function
|
|
797
|
+
* @memberof CanvasRenderer
|
|
827
798
|
*/
|
|
828
799
|
clearMask() {
|
|
829
|
-
this.
|
|
800
|
+
if (this.maskLevel > 0) {
|
|
801
|
+
this.maskLevel = 0;
|
|
802
|
+
this.getContext().restore();
|
|
803
|
+
}
|
|
830
804
|
}
|
|
831
|
-
|
|
832
805
|
};
|
|
833
806
|
|
|
834
807
|
export default CanvasRenderer;
|