melonjs 10.5.1 → 10.6.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.
Files changed (47) hide show
  1. package/README.md +4 -6
  2. package/dist/melonjs.js +4342 -4182
  3. package/dist/melonjs.min.js +14 -14
  4. package/dist/melonjs.module.d.ts +250 -267
  5. package/dist/melonjs.module.js +4752 -4606
  6. package/package.json +10 -10
  7. package/src/camera/camera2d.js +11 -10
  8. package/src/geometries/ellipse.js +1 -1
  9. package/src/geometries/poly.js +1 -1
  10. package/src/index.js +1 -1
  11. package/src/input/pointerevent.js +1 -1
  12. package/src/level/tiled/TMXLayer.js +1 -1
  13. package/src/level/tiled/TMXTileMap.js +1 -1
  14. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  15. package/src/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  16. package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  17. package/src/level/tiled/renderer/TMXRenderer.js +1 -1
  18. package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  19. package/src/loader/loadingscreen.js +1 -1
  20. package/src/math/color.js +1 -1
  21. package/src/math/matrix2.js +2 -2
  22. package/src/math/matrix3.js +1 -1
  23. package/src/math/observable_vector2.js +1 -1
  24. package/src/math/observable_vector3.js +1 -1
  25. package/src/math/vector2.js +1 -1
  26. package/src/math/vector3.js +1 -1
  27. package/src/particles/emitter.js +1 -1
  28. package/src/physics/body.js +7 -7
  29. package/src/renderable/colorlayer.js +1 -1
  30. package/src/renderable/container.js +11 -1
  31. package/src/renderable/imagelayer.js +1 -1
  32. package/src/renderable/nineslicesprite.js +6 -3
  33. package/src/renderable/renderable.js +18 -1
  34. package/src/renderable/sprite.js +2 -2
  35. package/src/state/state.js +6 -6
  36. package/src/system/pooling.js +150 -155
  37. package/src/text/bitmaptext.js +35 -91
  38. package/src/text/text.js +82 -145
  39. package/src/text/textmetrics.js +168 -0
  40. package/src/text/textstyle.js +14 -0
  41. package/src/video/canvas/canvas_renderer.js +21 -5
  42. package/src/video/renderer.js +1 -3
  43. package/src/video/texture.js +1 -1
  44. package/src/video/webgl/buffer/vertex.js +0 -3
  45. package/src/video/webgl/glshader.js +0 -2
  46. package/src/video/webgl/webgl_compositor.js +11 -0
  47. package/src/video/webgl/webgl_renderer.js +58 -19
@@ -3,7 +3,7 @@ import WebGLRenderer from "./webgl/webgl_renderer.js";
3
3
  import TextureCache from "./texture_cache.js";
4
4
  import Sprite from "./../renderable/sprite.js";
5
5
  import { renderer } from "./video.js";
6
- import pool from "./../system/pooling.js";
6
+ import * as pool from "./../system/pooling.js";
7
7
  import loader from "./../loader/loader.js";
8
8
  import { ETA } from "./../math/math.js";
9
9
 
@@ -22,9 +22,6 @@ class VertexArrayBuffer {
22
22
  // Float32 and Uint32 view of the vertex data array buffer
23
23
  this.bufferF32 = new Float32Array(this.buffer);
24
24
  this.bufferU32 = new Uint32Array(this.buffer);
25
-
26
-
27
- return this;
28
25
  }
29
26
 
30
27
  /**
@@ -285,8 +285,6 @@ class GLShader {
285
285
 
286
286
  // destroy the shader on context lost (will be recreated on context restore)
287
287
  event.on(event.WEBGL_ONCONTEXT_LOST, this.destroy, this);
288
-
289
- return this;
290
288
  }
291
289
 
292
290
  /**
@@ -359,6 +359,17 @@ class WebGLCompositor {
359
359
  return this.currentTextureUnit;
360
360
  }
361
361
 
362
+ /**
363
+ * set/change the current projection matrix
364
+ * @name setProjection
365
+ * @memberof WebGLCompositor
366
+ * @function
367
+ * @param {Matrix3d} matrix
368
+ */
369
+ setProjection(matrix) {
370
+ this.activeShader.setUniform("uProjectionMatrix", matrix);
371
+ }
372
+
362
373
  /**
363
374
  * Select the shader to use for compositing
364
375
  * @name useShader
@@ -7,7 +7,7 @@ import TextureCache from "./../texture_cache.js";
7
7
  import { TextureAtlas, createAtlas } from "./../texture.js";
8
8
  import { createCanvas, renderer } from "./../video.js";
9
9
  import * as event from "./../../system/event.js";
10
- import pool from "./../../system/pooling.js";
10
+ import * as pool from "./../../system/pooling.js";
11
11
  import { isPowerOfTwo, nextPowerOfTwo, TAU } from "./../../math/math.js";
12
12
 
13
13
 
@@ -100,6 +100,11 @@ class WebGLRenderer extends Renderer {
100
100
  */
101
101
  this._scissorStack = [];
102
102
 
103
+ /**
104
+ * @ignore
105
+ */
106
+ this._blendStack = [];
107
+
103
108
  /**
104
109
  * @ignore
105
110
  */
@@ -172,8 +177,6 @@ class WebGLRenderer extends Renderer {
172
177
  this.isContextValid = true;
173
178
  event.emit(event.WEBGL_ONCONTEXT_RESTORED, this);
174
179
  }, false );
175
-
176
- return this;
177
180
  }
178
181
 
179
182
  /**
@@ -319,6 +322,18 @@ class WebGLRenderer extends Renderer {
319
322
  this.currentCompositor.flush();
320
323
  }
321
324
 
325
+ /**
326
+ * set/change the current projection matrix (WebGL only)
327
+ * @name setProjection
328
+ * @memberof WebGLRenderer.prototype
329
+ * @function
330
+ * @param {Matrix3d} matrix
331
+ */
332
+ setProjection(matrix) {
333
+ super.setProjection(matrix);
334
+ this.currentCompositor.setProjection(matrix);
335
+ }
336
+
322
337
  /**
323
338
  * Clears the gl context with the given color.
324
339
  * @name clearColor
@@ -549,28 +564,48 @@ class WebGLRenderer extends Renderer {
549
564
  }
550
565
 
551
566
  /**
552
- * set a blend mode for the given context
567
+ * set a blend mode for the given context. <br>
568
+ * Supported blend mode between Canvas and WebGL remderer : <br>
569
+ * - "normal" : this is the default mode and draws new content on top of the existing content <br>
570
+ * <img src="images/normal-blendmode.png" width="510"/> <br>
571
+ * - "multiply" : the pixels of the top layer are multiplied with the corresponding pixel of the bottom layer. A darker picture is the result. <br>
572
+ * <img src="images/multiply-blendmode.png" width="510"/> <br>
573
+ * - "lighter" : where both content overlap the color is determined by adding color values. <br>
574
+ * <img src="images/lighter-blendmode.png" width="510"/> <br>
575
+ * - "screen" : The pixels are inverted, multiplied, and inverted again. A lighter picture is the result (opposite of multiply) <br>
576
+ * <img src="images/screen-blendmode.png" width="510"/> <br>
553
577
  * @name setBlendMode
578
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
554
579
  * @memberof WebGLRenderer.prototype
555
580
  * @function
556
- * @param {string} [mode="normal"] blend mode : "normal", "multiply"
581
+ * @param {string} [mode="normal"] blend mode : "normal", "multiply", "lighter", "screen"
557
582
  * @param {WebGLRenderingContext} [gl]
558
583
  */
559
- setBlendMode(mode, gl) {
560
- gl = gl || this.gl;
561
-
562
-
563
- gl.enable(gl.BLEND);
564
- switch (mode) {
565
- case "multiply" :
566
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
567
- this.currentBlendMode = mode;
568
- break;
584
+ setBlendMode(mode = "normal", gl = this.gl) {
569
585
 
570
- default :
571
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
572
- this.currentBlendMode = "normal";
573
- break;
586
+ if (this.currentBlendMode !== mode) {
587
+ this.flush();
588
+ gl.enable(gl.BLEND);
589
+ this.currentBlendMode = mode;
590
+
591
+ switch (mode) {
592
+ case "screen" :
593
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR);
594
+ break;
595
+
596
+ case "lighter" :
597
+ gl.blendFunc(gl.ONE, gl.ONE);
598
+ break;
599
+
600
+ case "multiply" :
601
+ gl.blendFunc(gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA);
602
+ break;
603
+
604
+ default :
605
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
606
+ this.currentBlendMode = "normal";
607
+ break;
608
+ }
574
609
  }
575
610
  }
576
611
 
@@ -604,6 +639,8 @@ class WebGLRenderer extends Renderer {
604
639
  this.currentColor.copy(color);
605
640
  this.currentTransform.copy(matrix);
606
641
 
642
+ this.setBlendMode(this._blendStack.pop());
643
+
607
644
  // recycle objects
608
645
  pool.push(color);
609
646
  pool.push(matrix);
@@ -636,6 +673,8 @@ class WebGLRenderer extends Renderer {
636
673
  // FIXME avoid slice and object realloc
637
674
  this._scissorStack.push(this.currentScissor.slice());
638
675
  }
676
+
677
+ this._blendStack.push(this.getBlendMode());
639
678
  }
640
679
 
641
680
  /**