@vpmedia/phaser 1.114.0 → 1.115.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 (170) hide show
  1. package/dist/index.js +400 -377
  2. package/dist/index.js.map +1 -1
  3. package/dist/phaser/core/animation_manager.d.ts +2 -1
  4. package/dist/phaser/core/animation_manager.d.ts.map +1 -1
  5. package/dist/phaser/core/array_set.d.ts +1 -1
  6. package/dist/phaser/core/array_set.d.ts.map +1 -1
  7. package/dist/phaser/core/cache.d.ts +1 -1
  8. package/dist/phaser/core/cache.d.ts.map +1 -1
  9. package/dist/phaser/core/factory.d.ts +1 -1
  10. package/dist/phaser/core/factory.d.ts.map +1 -1
  11. package/dist/phaser/core/game.d.ts +2 -0
  12. package/dist/phaser/core/game.d.ts.map +1 -1
  13. package/dist/phaser/core/input.d.ts +5 -5
  14. package/dist/phaser/core/input.d.ts.map +1 -1
  15. package/dist/phaser/core/input_event.d.ts +35 -0
  16. package/dist/phaser/core/input_event.d.ts.map +1 -0
  17. package/dist/phaser/core/input_handler.d.ts +2 -2
  18. package/dist/phaser/core/input_handler.d.ts.map +1 -1
  19. package/dist/phaser/core/input_mouse.d.ts +27 -26
  20. package/dist/phaser/core/input_mouse.d.ts.map +1 -1
  21. package/dist/phaser/core/input_mspointer.d.ts +16 -15
  22. package/dist/phaser/core/input_mspointer.d.ts.map +1 -1
  23. package/dist/phaser/core/input_pointer.d.ts +9 -8
  24. package/dist/phaser/core/input_pointer.d.ts.map +1 -1
  25. package/dist/phaser/core/input_touch.d.ts +18 -17
  26. package/dist/phaser/core/input_touch.d.ts.map +1 -1
  27. package/dist/phaser/core/loader.d.ts +64 -30
  28. package/dist/phaser/core/loader.d.ts.map +1 -1
  29. package/dist/phaser/core/scale_manager.d.ts +1 -1
  30. package/dist/phaser/core/scale_manager.d.ts.map +1 -1
  31. package/dist/phaser/core/scene_manager.d.ts +14 -4
  32. package/dist/phaser/core/scene_manager.d.ts.map +1 -1
  33. package/dist/phaser/core/signal.d.ts +8 -8
  34. package/dist/phaser/core/signal.d.ts.map +1 -1
  35. package/dist/phaser/core/signal_binding.d.ts +2 -2
  36. package/dist/phaser/core/signal_binding.d.ts.map +1 -1
  37. package/dist/phaser/core/sound.d.ts +1 -1
  38. package/dist/phaser/core/sound.d.ts.map +1 -1
  39. package/dist/phaser/core/sound_manager.d.ts +3 -3
  40. package/dist/phaser/core/sound_manager.d.ts.map +1 -1
  41. package/dist/phaser/core/sound_sprite.d.ts +1 -1
  42. package/dist/phaser/core/sound_sprite.d.ts.map +1 -1
  43. package/dist/phaser/core/timer.d.ts +5 -5
  44. package/dist/phaser/core/timer.d.ts.map +1 -1
  45. package/dist/phaser/core/timer_event.d.ts +2 -2
  46. package/dist/phaser/core/timer_event.d.ts.map +1 -1
  47. package/dist/phaser/core/tween.d.ts +4 -4
  48. package/dist/phaser/core/tween.d.ts.map +1 -1
  49. package/dist/phaser/core/tween_data.d.ts +2 -1
  50. package/dist/phaser/core/tween_data.d.ts.map +1 -1
  51. package/dist/phaser/core/tween_manager.d.ts +1 -1
  52. package/dist/phaser/core/tween_manager.d.ts.map +1 -1
  53. package/dist/phaser/display/button.d.ts +1 -1
  54. package/dist/phaser/display/button.d.ts.map +1 -1
  55. package/dist/phaser/display/canvas/buffer.d.ts +3 -3
  56. package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
  57. package/dist/phaser/display/canvas/graphics.d.ts +2 -2
  58. package/dist/phaser/display/canvas/graphics.d.ts.map +1 -1
  59. package/dist/phaser/display/canvas/masker.d.ts +5 -2
  60. package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
  61. package/dist/phaser/display/canvas/renderer.d.ts +6 -5
  62. package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
  63. package/dist/phaser/display/canvas/tinter.d.ts +2 -1
  64. package/dist/phaser/display/canvas/tinter.d.ts.map +1 -1
  65. package/dist/phaser/display/canvas/util.d.ts +11 -4
  66. package/dist/phaser/display/canvas/util.d.ts.map +1 -1
  67. package/dist/phaser/display/display_object.d.ts +4 -3
  68. package/dist/phaser/display/display_object.d.ts.map +1 -1
  69. package/dist/phaser/display/graphics.d.ts +47 -27
  70. package/dist/phaser/display/graphics.d.ts.map +1 -1
  71. package/dist/phaser/display/graphics_data.d.ts +20 -11
  72. package/dist/phaser/display/graphics_data.d.ts.map +1 -1
  73. package/dist/phaser/display/image.d.ts +4 -3
  74. package/dist/phaser/display/image.d.ts.map +1 -1
  75. package/dist/phaser/display/render_session.d.ts +44 -0
  76. package/dist/phaser/display/render_session.d.ts.map +1 -0
  77. package/dist/phaser/display/sprite_util.d.ts +4 -3
  78. package/dist/phaser/display/sprite_util.d.ts.map +1 -1
  79. package/dist/phaser/display/text.d.ts +64 -30
  80. package/dist/phaser/display/text.d.ts.map +1 -1
  81. package/dist/phaser/display/webgl/base_texture.d.ts +3 -3
  82. package/dist/phaser/display/webgl/base_texture.d.ts.map +1 -1
  83. package/dist/phaser/display/webgl/earcut.d.ts +25 -25
  84. package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
  85. package/dist/phaser/display/webgl/earcut_node.d.ts +2 -2
  86. package/dist/phaser/display/webgl/earcut_node.d.ts.map +1 -1
  87. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +3 -2
  88. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
  89. package/dist/phaser/display/webgl/filter_manager.d.ts +1 -1
  90. package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
  91. package/dist/phaser/display/webgl/graphics.d.ts +2 -1
  92. package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
  93. package/dist/phaser/display/webgl/graphics_data.d.ts +9 -9
  94. package/dist/phaser/display/webgl/graphics_data.d.ts.map +1 -1
  95. package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
  96. package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
  97. package/dist/phaser/display/webgl/render_texture.d.ts +3 -3
  98. package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
  99. package/dist/phaser/display/webgl/renderer.d.ts +5 -4
  100. package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
  101. package/dist/phaser/display/webgl/shader/normal.d.ts +3 -1
  102. package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
  103. package/dist/phaser/display/webgl/shader_manager.d.ts +10 -4
  104. package/dist/phaser/display/webgl/shader_manager.d.ts.map +1 -1
  105. package/dist/phaser/display/webgl/sprite_batch.d.ts +4 -3
  106. package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
  107. package/dist/phaser/display/webgl/stencil_manager.d.ts +4 -3
  108. package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
  109. package/dist/phaser/display/webgl/texture.d.ts +6 -6
  110. package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
  111. package/package.json +1 -1
  112. package/src/phaser/core/animation_manager.ts +2 -2
  113. package/src/phaser/core/array_set.ts +1 -1
  114. package/src/phaser/core/cache.ts +1 -1
  115. package/src/phaser/core/factory.ts +1 -1
  116. package/src/phaser/core/game.ts +2 -0
  117. package/src/phaser/core/input.ts +7 -6
  118. package/src/phaser/core/input_event.ts +34 -0
  119. package/src/phaser/core/input_handler.ts +2 -11
  120. package/src/phaser/core/input_mouse.ts +53 -36
  121. package/src/phaser/core/input_mspointer.ts +54 -29
  122. package/src/phaser/core/input_pointer.test.ts +149 -0
  123. package/src/phaser/core/input_pointer.ts +20 -21
  124. package/src/phaser/core/input_touch.ts +48 -31
  125. package/src/phaser/core/loader.test.ts +139 -0
  126. package/src/phaser/core/loader.ts +146 -83
  127. package/src/phaser/core/scale_manager.ts +1 -1
  128. package/src/phaser/core/scene_manager.ts +16 -8
  129. package/src/phaser/core/signal.ts +8 -8
  130. package/src/phaser/core/signal_binding.ts +2 -2
  131. package/src/phaser/core/sound.ts +4 -4
  132. package/src/phaser/core/sound_manager.ts +17 -19
  133. package/src/phaser/core/sound_sprite.ts +2 -2
  134. package/src/phaser/core/timer.ts +6 -6
  135. package/src/phaser/core/timer_event.ts +2 -2
  136. package/src/phaser/core/tween.ts +6 -6
  137. package/src/phaser/core/tween_data.ts +2 -1
  138. package/src/phaser/core/tween_manager.ts +1 -1
  139. package/src/phaser/display/button.ts +1 -1
  140. package/src/phaser/display/canvas/buffer.ts +3 -3
  141. package/src/phaser/display/canvas/graphics.ts +24 -20
  142. package/src/phaser/display/canvas/masker.ts +5 -2
  143. package/src/phaser/display/canvas/renderer.ts +10 -11
  144. package/src/phaser/display/canvas/tinter.ts +4 -3
  145. package/src/phaser/display/canvas/util.ts +15 -5
  146. package/src/phaser/display/display_object.ts +6 -5
  147. package/src/phaser/display/graphics.test.ts +122 -0
  148. package/src/phaser/display/graphics.ts +73 -64
  149. package/src/phaser/display/graphics_data.ts +22 -12
  150. package/src/phaser/display/image.ts +4 -3
  151. package/src/phaser/display/render_session.ts +45 -0
  152. package/src/phaser/display/sprite_util.ts +10 -8
  153. package/src/phaser/display/text.test.ts +27 -1
  154. package/src/phaser/display/text.ts +181 -117
  155. package/src/phaser/display/webgl/base_texture.ts +3 -3
  156. package/src/phaser/display/webgl/earcut.test.ts +132 -0
  157. package/src/phaser/display/webgl/earcut.ts +84 -74
  158. package/src/phaser/display/webgl/earcut_node.ts +5 -5
  159. package/src/phaser/display/webgl/fast_sprite_batch.ts +4 -4
  160. package/src/phaser/display/webgl/filter_manager.ts +1 -1
  161. package/src/phaser/display/webgl/graphics.ts +26 -17
  162. package/src/phaser/display/webgl/graphics_data.ts +9 -9
  163. package/src/phaser/display/webgl/mask_manager.ts +3 -2
  164. package/src/phaser/display/webgl/render_texture.ts +3 -3
  165. package/src/phaser/display/webgl/renderer.ts +7 -6
  166. package/src/phaser/display/webgl/shader/normal.ts +23 -6
  167. package/src/phaser/display/webgl/shader_manager.ts +15 -6
  168. package/src/phaser/display/webgl/sprite_batch.ts +4 -3
  169. package/src/phaser/display/webgl/stencil_manager.ts +10 -3
  170. package/src/phaser/display/webgl/texture.ts +6 -6
@@ -4,6 +4,8 @@ import { getTintedTexture } from './canvas/tinter.js';
4
4
  import type { Image } from './image.js';
5
5
  import type { Texture } from './webgl/texture.js';
6
6
  import type { Matrix } from '../geom/matrix.js';
7
+ import type { RenderSession } from './render_session.js';
8
+ import { setSmoothing } from './canvas/util.js';
7
9
 
8
10
  /**
9
11
  * Sets the texture of a sprite.
@@ -27,7 +29,7 @@ export const setTexture = (target: Image, texture: Texture, destroyBase = false)
27
29
  * @param {object} matrix - The transformation matrix.
28
30
  * @returns {Rectangle} The bounds rectangle.
29
31
  */
30
- export const getBounds = (target: Image, matrix: any | null = null) => {
32
+ export const getBounds = (target: Image, matrix: Matrix | null = null) => {
31
33
  // TODO verify
32
34
  if (target.currentBounds) {
33
35
  return target.currentBounds;
@@ -129,7 +131,7 @@ export const getLocalBounds = (target: Image) => {
129
131
  * @param {object} renderSession - The render session object.
130
132
  * @param {Matrix | null | undefined} matrix - The transformation matrix.
131
133
  */
132
- export const renderWebGL = (target: Image, renderSession: any, matrix: Matrix | null | undefined = null) => {
134
+ export const renderWebGL = (target: Image, renderSession: RenderSession, matrix: Matrix | null | undefined = null) => {
133
135
  // if the sprite is not visible or the alpha is 0 then no need to render this element
134
136
  if (!target.visible || target.alpha <= 0 || !target.renderable) {
135
137
  return;
@@ -149,7 +151,7 @@ export const renderWebGL = (target: Image, renderSession: any, matrix: Matrix |
149
151
  }
150
152
  if (target._mask) {
151
153
  spriteBatch.stop();
152
- renderSession.maskManager.pushMask(target.mask, renderSession);
154
+ renderSession.maskManager.pushMask(target.mask!, renderSession);
153
155
  spriteBatch.start();
154
156
  }
155
157
  // add this sprite to the batch
@@ -182,7 +184,7 @@ export const renderWebGL = (target: Image, renderSession: any, matrix: Matrix |
182
184
  * @param {object} renderSession - The render session object.
183
185
  * @param {Matrix | null | undefined} matrix - The transformation matrix.
184
186
  */
185
- export const renderCanvas = (target: Image, renderSession: any, matrix: Matrix | null | undefined = null) => {
187
+ export const renderCanvas = (target: Image, renderSession: RenderSession, matrix: Matrix | null | undefined = null) => {
186
188
  // If the sprite is not visible or the alpha is 0 then no need to render this element
187
189
  if (
188
190
  !target.visible ||
@@ -201,7 +203,7 @@ export const renderCanvas = (target: Image, renderSession: any, matrix: Matrix |
201
203
  if (target.blendMode !== renderSession.currentBlendMode) {
202
204
  renderSession.currentBlendMode = target.blendMode;
203
205
  renderSession.context.globalCompositeOperation =
204
- globalThis.PhaserRegistry.blendModesCanvas[renderSession.currentBlendMode];
206
+ globalThis.PhaserRegistry.blendModesCanvas[renderSession.currentBlendMode] ?? 'source-over';
205
207
  }
206
208
  if (target._mask) {
207
209
  renderSession.maskManager.pushMask(target._mask, renderSession);
@@ -214,7 +216,7 @@ export const renderCanvas = (target: Image, renderSession: any, matrix: Matrix |
214
216
  // If smoothingEnabled is supported and we need to change the smoothing property for this texture
215
217
  if (renderSession.smoothProperty && renderSession.scaleMode !== target.texture.baseTexture.scaleMode) {
216
218
  renderSession.scaleMode = target.texture.baseTexture.scaleMode;
217
- renderSession.context[renderSession.smoothProperty] = renderSession.scaleMode === SCALE_LINEAR;
219
+ setSmoothing(renderSession.context, renderSession.smoothProperty, renderSession.scaleMode === SCALE_LINEAR);
218
220
  }
219
221
  // If the texture is trimmed we offset by the trim x/y, otherwise we use the frame dimensions
220
222
  let dx = target.texture.trim
@@ -238,7 +240,7 @@ export const renderCanvas = (target: Image, renderSession: any, matrix: Matrix |
238
240
  dx /= resolution;
239
241
  dy /= resolution;
240
242
  if (target.tint !== 0xffffff) {
241
- if (target.texture.requiresReTint || target.cachedTint !== target.tint) {
243
+ if (target.texture.requiresReTint || target.cachedTint !== target.tint || !target.tintedTexture) {
242
244
  target.tintedTexture = getTintedTexture(target, target.tint);
243
245
  target.cachedTint = target.tint;
244
246
  target.texture.requiresReTint = false;
@@ -267,6 +269,6 @@ export const renderCanvas = (target: Image, renderSession: any, matrix: Matrix |
267
269
  child.renderCanvas(renderSession);
268
270
  }
269
271
  if (target._mask) {
270
- renderSession.maskManager.popMask(renderSession);
272
+ renderSession.maskManager.popMask(target._mask, renderSession);
271
273
  }
272
274
  };
@@ -64,7 +64,7 @@ describe('Text', () => {
64
64
  expect(createText('hello').text).toBe('hello');
65
65
  });
66
66
 
67
- // The game clients pass numbers straight into game.add.text(). The constructor must coerce:
67
+ // Callers pass numbers straight into game.add.text(). The constructor must coerce:
68
68
  // updateText() calls .split() on the value, which throws on a number.
69
69
  it('coerces a number to its string form', () => {
70
70
  expect(createText(42).text).toBe('42');
@@ -95,6 +95,32 @@ describe('Text', () => {
95
95
  });
96
96
  });
97
97
 
98
+ describe('fontSize', () => {
99
+ // A px-suffixed size cannot be read with Number(); it yields NaN. An autofix made exactly that
100
+ // substitution once already.
101
+ it('reads a px size back as a number', () => {
102
+ const text = new Text(createGame(), 0, 0, 'hello', { font: '20px Arial' });
103
+ expect(text.fontSize).toBe(20);
104
+ });
105
+
106
+ it('round trips through the setter', () => {
107
+ const text = createText('hello');
108
+ text.fontSize = 32;
109
+ expect(text.fontSize).toBe(32);
110
+ });
111
+
112
+ it('reads zero back as zero', () => {
113
+ const text = createText('hello');
114
+ text.fontSize = 0;
115
+ expect(text.fontSize).toBe(0);
116
+ });
117
+
118
+ it('never reports NaN for a styled font', () => {
119
+ const text = new Text(createGame(), 0, 0, 'hello', { font: 'bold 14px Arial' });
120
+ expect(Number.isNaN(text.fontSize)).toBe(false);
121
+ });
122
+ });
123
+
98
124
  describe('setText', () => {
99
125
  it('coerces a number', () => {
100
126
  const text = createText('start');