melonjs 10.5.2 → 10.6.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.
Files changed (46) hide show
  1. package/README.md +4 -6
  2. package/dist/melonjs.js +4314 -4177
  3. package/dist/melonjs.min.js +14 -14
  4. package/dist/melonjs.module.d.ts +242 -267
  5. package/dist/melonjs.module.js +4646 -4523
  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 +30 -86
  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_renderer.js +46 -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
  /**
@@ -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
  /**
@@ -561,28 +564,48 @@ class WebGLRenderer extends Renderer {
561
564
  }
562
565
 
563
566
  /**
564
- * 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>
565
577
  * @name setBlendMode
578
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
566
579
  * @memberof WebGLRenderer.prototype
567
580
  * @function
568
- * @param {string} [mode="normal"] blend mode : "normal", "multiply"
581
+ * @param {string} [mode="normal"] blend mode : "normal", "multiply", "lighter", "screen"
569
582
  * @param {WebGLRenderingContext} [gl]
570
583
  */
571
- setBlendMode(mode, gl) {
572
- gl = gl || this.gl;
573
-
584
+ setBlendMode(mode = "normal", gl = this.gl) {
574
585
 
575
- gl.enable(gl.BLEND);
576
- switch (mode) {
577
- case "multiply" :
578
- gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
579
- this.currentBlendMode = mode;
580
- break;
581
-
582
- default :
583
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
584
- this.currentBlendMode = "normal";
585
- 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
+ }
586
609
  }
587
610
  }
588
611
 
@@ -616,6 +639,8 @@ class WebGLRenderer extends Renderer {
616
639
  this.currentColor.copy(color);
617
640
  this.currentTransform.copy(matrix);
618
641
 
642
+ this.setBlendMode(this._blendStack.pop());
643
+
619
644
  // recycle objects
620
645
  pool.push(color);
621
646
  pool.push(matrix);
@@ -648,6 +673,8 @@ class WebGLRenderer extends Renderer {
648
673
  // FIXME avoid slice and object realloc
649
674
  this._scissorStack.push(this.currentScissor.slice());
650
675
  }
676
+
677
+ this._blendStack.push(this.getBlendMode());
651
678
  }
652
679
 
653
680
  /**