melonjs 10.1.1 → 10.2.3

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 (92) hide show
  1. package/README.md +6 -10
  2. package/dist/melonjs.js +3114 -2866
  3. package/dist/melonjs.min.js +3 -3
  4. package/dist/melonjs.module.d.ts +2588 -2498
  5. package/dist/melonjs.module.js +2694 -2479
  6. package/package.json +10 -11
  7. package/src/audio/audio.js +43 -43
  8. package/src/camera/camera2d.js +52 -74
  9. package/src/entity/draggable.js +18 -17
  10. package/src/entity/droptarget.js +19 -18
  11. package/src/entity/entity.js +22 -26
  12. package/src/game.js +3 -3
  13. package/src/index.js +15 -11
  14. package/src/input/gamepad.js +13 -13
  15. package/src/input/input.js +1 -1
  16. package/src/input/keyboard.js +14 -16
  17. package/src/input/pointer.js +42 -35
  18. package/src/input/pointerevent.js +25 -33
  19. package/src/lang/deprecated.js +3 -3
  20. package/src/level/level.js +24 -16
  21. package/src/level/tiled/TMXGroup.js +6 -6
  22. package/src/level/tiled/TMXLayer.js +31 -31
  23. package/src/level/tiled/TMXObject.js +19 -19
  24. package/src/level/tiled/TMXTile.js +11 -12
  25. package/src/level/tiled/TMXTileMap.js +23 -21
  26. package/src/level/tiled/TMXTileset.js +13 -13
  27. package/src/level/tiled/TMXTilesetGroup.js +4 -4
  28. package/src/level/tiled/TMXUtils.js +13 -11
  29. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  30. package/src/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  31. package/src/level/tiled/renderer/TMXRenderer.js +17 -17
  32. package/src/loader/loader.js +31 -27
  33. package/src/loader/loadingscreen.js +44 -75
  34. package/src/math/color.js +45 -64
  35. package/src/math/math.js +17 -17
  36. package/src/math/matrix2.js +46 -46
  37. package/src/math/matrix3.js +64 -64
  38. package/src/math/observable_vector2.js +45 -57
  39. package/src/math/observable_vector3.js +56 -70
  40. package/src/math/vector2.js +60 -59
  41. package/src/math/vector3.js +65 -64
  42. package/src/particles/emitter.js +53 -55
  43. package/src/particles/particle.js +1 -1
  44. package/src/physics/body.js +45 -51
  45. package/src/physics/bounds.js +36 -36
  46. package/src/physics/collision.js +15 -16
  47. package/src/physics/detector.js +10 -11
  48. package/src/physics/quadtree.js +18 -16
  49. package/src/physics/sat.js +17 -17
  50. package/src/physics/world.js +12 -10
  51. package/src/plugin/plugin.js +6 -6
  52. package/src/renderable/GUI.js +13 -18
  53. package/src/renderable/collectable.js +3 -3
  54. package/src/renderable/colorlayer.js +4 -4
  55. package/src/renderable/container.js +64 -46
  56. package/src/renderable/imagelayer.js +30 -31
  57. package/src/renderable/nineslicesprite.js +158 -69
  58. package/src/renderable/renderable.js +68 -67
  59. package/src/renderable/sprite.js +57 -43
  60. package/src/renderable/trigger.js +14 -15
  61. package/src/shapes/ellipse.js +27 -26
  62. package/src/shapes/line.js +8 -7
  63. package/src/shapes/poly.js +33 -31
  64. package/src/shapes/rectangle.js +50 -96
  65. package/src/state/stage.js +8 -8
  66. package/src/state/state.js +56 -56
  67. package/src/system/device.js +97 -84
  68. package/src/system/event.js +72 -72
  69. package/src/system/pooling.js +14 -14
  70. package/src/system/save.js +6 -3
  71. package/src/system/timer.js +20 -20
  72. package/src/text/bitmaptext.js +27 -33
  73. package/src/text/bitmaptextdata.js +9 -9
  74. package/src/text/text.js +118 -59
  75. package/src/tweens/easing.js +4 -4
  76. package/src/tweens/interpolation.js +4 -4
  77. package/src/tweens/tween.js +37 -27
  78. package/src/utils/agent.js +9 -8
  79. package/src/utils/array.js +4 -4
  80. package/src/utils/file.js +4 -4
  81. package/src/utils/function.js +5 -5
  82. package/src/utils/string.js +12 -12
  83. package/src/utils/utils.js +19 -19
  84. package/src/video/canvas/canvas_renderer.js +90 -90
  85. package/src/video/renderer.js +40 -39
  86. package/src/video/texture.js +85 -76
  87. package/src/video/texture_cache.js +11 -0
  88. package/src/video/video.js +31 -31
  89. package/src/video/webgl/buffer/vertex.js +9 -1
  90. package/src/video/webgl/glshader.js +20 -20
  91. package/src/video/webgl/webgl_compositor.js +47 -46
  92. package/src/video/webgl/webgl_renderer.js +104 -104
@@ -1,27 +1,36 @@
1
1
  import Sprite from "./sprite.js";
2
2
 
3
-
4
3
  /**
5
4
  * @classdesc
6
- * A NineSliceSprite is similar to a Sprite, but it it can strech its inner area to fit the size of the Renderable
5
+ * A NineSliceSprite is similar to a Sprite, but it uses 9-slice scaling to strech its inner area to fit the size of the Renderable,
6
+ * by proportionally scaling a sprite by splitting it in a grid of nine parts (with only parts 1, 3, 7, 9 not being scaled). <br>
7
+ * <img src="images/9-slice-scaling.png"/><br>
8
+ * @see https://en.wikipedia.org/wiki/9-slice_scaling
7
9
  * @class NineSliceSprite
8
10
  * @extends me.Sprite
9
11
  * @memberOf me
10
12
  * @constructor
11
- * @param {Number} x the x coordinates of the sprite object
12
- * @param {Number} y the y coordinates of the sprite object
13
- * @param {Object} settings Configuration parameters for the Sprite object
14
- * @param {Number} settings.width the width of the Renderable over which the sprite needs to be stretched
15
- * @param {Number} settings.height the height of the Renderable over which the sprite needs to be stretched
16
- * @param {me.Renderer.Texture|HTMLImageElement|HTMLCanvasElement|String} settings.image reference to a texture, spritesheet image or to a texture atlas
17
- * @param {String} [settings.name=""] name of this object
18
- * @param {String} [settings.region] region name of a specific region to use when using a texture atlas, see {@link me.Renderer.Texture}
19
- * @param {Number} [settings.framewidth] Width of a single frame within the spritesheet
20
- * @param {Number} [settings.frameheight] Height of a single frame within the spritesheet
21
- * @param {String|Color} [settings.tint] a tint to be applied to this sprite
22
- * @param {Number} [settings.flipX] flip the sprite on the horizontal axis
23
- * @param {Number} [settings.flipY] flip the sprite on the vertical axis
13
+ * @param {number} x the x coordinates of the sprite object
14
+ * @param {number} y the y coordinates of the sprite object
15
+ * @param {object} settings Configuration parameters for the Sprite object
16
+ * @param {number} settings.width the width of the Renderable over which the sprite needs to be stretched
17
+ * @param {number} settings.height the height of the Renderable over which the sprite needs to be stretched
18
+ * @param {me.Renderer.Texture|HTMLImageElement|HTMLCanvasElement|string} settings.image reference to a texture, spritesheet image or to a texture atlas
19
+ * @param {string} [settings.name=""] name of this object
20
+ * @param {string} [settings.region] region name of a specific region to use when using a texture atlas, see {@link me.Renderer.Texture}
21
+ * @param {number} [settings.framewidth] Width of a single frame within the spritesheet
22
+ * @param {number} [settings.frameheight] Height of a single frame within the spritesheet
23
+ * @param {string|me.Color} [settings.tint] a tint to be applied to this sprite
24
+ * @param {number} [settings.flipX] flip the sprite on the horizontal axis
25
+ * @param {number} [settings.flipY] flip the sprite on the vertical axis
24
26
  * @param {me.Vector2d} [settings.anchorPoint={x:0.5, y:0.5}] Anchor point to draw the frame at (defaults to the center of the frame).
27
+ * @example
28
+ * this.panelSprite = new me.NineSliceSprite(0, 0, {
29
+ * image : game.texture,
30
+ * region : "grey_panel",
31
+ * width : this.width,
32
+ * height : this.height
33
+ * });
25
34
  */
26
35
 
27
36
  class NineSliceSprite extends Sprite {
@@ -33,6 +42,11 @@ class NineSliceSprite extends Sprite {
33
42
  // call the super constructor
34
43
  super(x, y, settings);
35
44
 
45
+ // ensure mandatory properties are defined
46
+ if ((typeof settings.width !== "number") || (typeof settings.height !== "number")) {
47
+ throw new Error("height and width properties are mandatory");
48
+ }
49
+
36
50
  // override the renderable sprite with the given one
37
51
  // resize based on the active frame
38
52
  this.width = settings.width;
@@ -41,14 +55,14 @@ class NineSliceSprite extends Sprite {
41
55
 
42
56
  /**
43
57
  * @ignore
44
-
58
+ */
45
59
  draw(renderer) {
46
60
  // the frame to draw
47
61
  var frame = this.current;
48
62
 
49
63
  // cache the current position and size
50
- var xpos = this.pos.x,
51
- ypos = this.pos.y;
64
+ var dx = this.pos.x,
65
+ dy = this.pos.y;
52
66
 
53
67
  var w = frame.width,
54
68
  h = frame.height;
@@ -60,63 +74,138 @@ class NineSliceSprite extends Sprite {
60
74
 
61
75
  // remove image's TexturePacker/ShoeBox rotation
62
76
  if (frame.angle !== 0) {
63
- renderer.translate(-xpos, -ypos);
77
+ renderer.translate(-dx, -dy);
64
78
  renderer.rotate(frame.angle);
65
- xpos -= h;
79
+ dx -= h;
66
80
  w = frame.height;
67
81
  h = frame.width;
68
82
  }
69
83
 
70
- // positions based on frame size
71
- const positions = [
72
- w, h,
73
- 0, w,
74
- h, 0,
75
- w, h,
76
- 0, w,
77
- h, 0
78
- ];
79
-
80
-
81
- /*
82
- uvs[0] = u0;
83
- uvs[1] = u0 + this._leftWidth;
84
- uvs[2] = u1 - this._rightWidth;
85
- uvs[3] = u1;
86
- uvs[4] = v0;
87
- uvs[5] = v0 + this._topHeight;
88
- uvs[6] = v1 - this._bottomHeight;
89
- uvs[7] = v1;
90
-
91
- for (var row = 0; row < 3; row++) {
92
- for (var col = 0; col < 3; col++) {
93
-
94
- const ind = (col * 2) + (row * 8);
95
- const sw = Math.max(1, uvs[col + 1] - uvs[col]);
96
- const sh = Math.max(1, uvs[row + 5] - uvs[row + 4]);
97
- const dw = Math.max(1, vertices[ind + 10] - vertices[ind]);
98
- const dh = Math.max(1, vertices[ind + 11] - vertices[ind + 1]);
99
-
100
- context.drawImage(textureSource,
101
- uvs[col], //sx
102
- uvs[row + 4], //sy
103
- sw, sh, //
104
- vertices[ind], vertices[ind + 1], // dx, dy
105
- dw, dh
106
- );
107
-
108
- renderer.drawImage(
109
- this.image,
110
- g_offset.x + frame_offset.x, // sx
111
- g_offset.y + frame_offset.y, // sy
112
- w, h, // sw,sh
113
- xpos, ypos, // dx,dy
114
- w, h // dw,dh
115
- );
116
- }
117
- }
84
+ var sx = g_offset.x + frame_offset.x,
85
+ sy = g_offset.y + frame_offset.y;
86
+
87
+ // should this be configurable ?
88
+ var corner_width = frame.width / 4,
89
+ corner_height = frame.height / 4;
90
+
91
+ // OPTIMIZE ME !
92
+
93
+ // DRAW CORNERS
94
+
95
+ // Top Left
96
+ renderer.drawImage(
97
+ this.image,
98
+ sx, // sx
99
+ sy, // sy
100
+ corner_width, corner_height, // sw,sh
101
+ dx, dy, // dx,dy
102
+ corner_width, corner_height // dw,dh
103
+ );
104
+
105
+ // Top Right
106
+ renderer.drawImage(
107
+ this.image,
108
+ sx + w - corner_width, // sx
109
+ sy, // sy
110
+ corner_width, corner_height, // sw,sh
111
+ dx + this.width - corner_width, // dx
112
+ dy, // dy
113
+ corner_width, corner_height // dw,dh
114
+ );
115
+ // Bottom Left
116
+ renderer.drawImage(
117
+ this.image,
118
+ sx, // sx
119
+ sy + h - corner_height, // sy
120
+ corner_width, corner_height, // sw,sh
121
+ dx, // dx
122
+ dy + this.height - corner_height, // dy
123
+ corner_width, corner_height // dw,dh
124
+ );
125
+ // Bottom Right
126
+ renderer.drawImage(
127
+ this.image,
128
+ sx + w - corner_width, // sx
129
+ sy + h - corner_height, // sy
130
+ corner_width, corner_height, // sw,sh
131
+ dx + this.width - corner_width, //dx
132
+ dy + this.height - corner_height, // dy
133
+ corner_width, corner_height // dw,dh
134
+ );
135
+
136
+
137
+ // DRAW SIDES and CENTER
138
+ var image_center_width = w - (corner_width << 1);
139
+ var image_center_height = h - (corner_height << 1);
140
+
141
+ var target_center_width = this.width - (corner_width << 1);
142
+ var target_center_height = this.height - (corner_height << 1);
143
+
144
+ //Top center
145
+ renderer.drawImage(
146
+ this.image,
147
+ sx + corner_width, // sx
148
+ sy, // sy
149
+ image_center_width, // sw
150
+ corner_height, // sh
151
+ dx + corner_width, // dx
152
+ dy, // dy
153
+ target_center_width, // dw
154
+ corner_height // dh
155
+ );
156
+
157
+ //Bottom center
158
+ renderer.drawImage(
159
+ this.image,
160
+ sx + corner_width, // sx
161
+ sy + h - corner_height, // sy
162
+ image_center_width, // sw
163
+ corner_height, // sh
164
+ dx + corner_width, // dx
165
+ dy + this.height - corner_height, // dx
166
+ target_center_width, // dw
167
+ corner_height // dh
168
+ );
169
+
170
+ // Middle Left
171
+ renderer.drawImage(
172
+ this.image,
173
+ sx, // sx
174
+ sy + corner_height, // sy
175
+ corner_width, // sw
176
+ image_center_height, // sh
177
+ dx, // dx
178
+ dy + corner_height, // dy
179
+ corner_width, // dw
180
+ target_center_height // dh
181
+ );
182
+
183
+ // Middle Right
184
+ renderer.drawImage(
185
+ this.image,
186
+ sx + w - corner_width, // sx
187
+ sy + corner_height, // sy
188
+ corner_width, // sw
189
+ image_center_height, // sh
190
+ dx + this.width - corner_width, // dx
191
+ dy + corner_height, // dy
192
+ corner_width, // dw
193
+ target_center_height // dh
194
+ );
195
+
196
+ // Middle Center
197
+ renderer.drawImage(
198
+ this.image,
199
+ sx + corner_width, // sx
200
+ sy + corner_height, // sy
201
+ image_center_width, // sw
202
+ image_center_height, // sh
203
+ dx + corner_width, // dx
204
+ dy + corner_height, // dy
205
+ target_center_width, // dw
206
+ target_center_height // dh
207
+ );
118
208
  }
119
- */
120
209
  };
121
210
 
122
211
  export default NineSliceSprite;