@vpmedia/phaser 1.112.0 → 1.113.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/dist/index.js +1261 -1314
- package/dist/index.js.map +1 -1
- package/dist/phaser/core/animation.d.ts +14 -10
- package/dist/phaser/core/animation.d.ts.map +1 -1
- package/dist/phaser/core/animation_manager.d.ts +10 -8
- package/dist/phaser/core/animation_manager.d.ts.map +1 -1
- package/dist/phaser/core/animation_parser.d.ts +5 -4
- package/dist/phaser/core/animation_parser.d.ts.map +1 -1
- package/dist/phaser/core/array_set.d.ts.map +1 -1
- package/dist/phaser/core/cache.d.ts +4 -3
- package/dist/phaser/core/cache.d.ts.map +1 -1
- package/dist/phaser/core/const.d.ts.map +1 -1
- package/dist/phaser/core/device.d.ts.map +1 -1
- package/dist/phaser/core/device_util.d.ts.map +1 -1
- package/dist/phaser/core/dom.d.ts +3 -2
- package/dist/phaser/core/dom.d.ts.map +1 -1
- package/dist/phaser/core/event_manager.d.ts.map +1 -1
- package/dist/phaser/core/factory.d.ts +1 -1
- package/dist/phaser/core/factory.d.ts.map +1 -1
- package/dist/phaser/core/frame.d.ts.map +1 -1
- package/dist/phaser/core/frame_data.d.ts.map +1 -1
- package/dist/phaser/core/game.d.ts.map +1 -1
- package/dist/phaser/core/input.d.ts +8 -6
- package/dist/phaser/core/input.d.ts.map +1 -1
- package/dist/phaser/core/input_handler.d.ts +40 -30
- package/dist/phaser/core/input_handler.d.ts.map +1 -1
- package/dist/phaser/core/input_mouse.d.ts +3 -2
- package/dist/phaser/core/input_mouse.d.ts.map +1 -1
- package/dist/phaser/core/input_mspointer.d.ts +3 -2
- package/dist/phaser/core/input_mspointer.d.ts.map +1 -1
- package/dist/phaser/core/input_pointer.d.ts +6 -4
- package/dist/phaser/core/input_pointer.d.ts.map +1 -1
- package/dist/phaser/core/input_touch.d.ts +3 -2
- package/dist/phaser/core/input_touch.d.ts.map +1 -1
- package/dist/phaser/core/loader.d.ts +4 -3
- package/dist/phaser/core/loader.d.ts.map +1 -1
- package/dist/phaser/core/loader_parser.d.ts +9 -8
- package/dist/phaser/core/loader_parser.d.ts.map +1 -1
- package/dist/phaser/core/raf.d.ts +3 -2
- package/dist/phaser/core/raf.d.ts.map +1 -1
- package/dist/phaser/core/registry.d.ts +7 -0
- package/dist/phaser/core/registry.d.ts.map +1 -0
- package/dist/phaser/core/scale_manager.d.ts +1 -1
- package/dist/phaser/core/scale_manager.d.ts.map +1 -1
- package/dist/phaser/core/scene.d.ts +0 -1
- package/dist/phaser/core/scene.d.ts.map +1 -1
- package/dist/phaser/core/scene_manager.d.ts +1 -1
- package/dist/phaser/core/scene_manager.d.ts.map +1 -1
- package/dist/phaser/core/signal.d.ts +0 -1
- package/dist/phaser/core/signal.d.ts.map +1 -1
- package/dist/phaser/core/signal_binding.d.ts +4 -3
- package/dist/phaser/core/signal_binding.d.ts.map +1 -1
- package/dist/phaser/core/sound.d.ts +6 -4
- package/dist/phaser/core/sound.d.ts.map +1 -1
- package/dist/phaser/core/sound_manager.d.ts +3 -2
- package/dist/phaser/core/sound_manager.d.ts.map +1 -1
- package/dist/phaser/core/sound_sprite.d.ts +5 -4
- package/dist/phaser/core/sound_sprite.d.ts.map +1 -1
- package/dist/phaser/core/stage.d.ts +3 -2
- package/dist/phaser/core/stage.d.ts.map +1 -1
- package/dist/phaser/core/time.d.ts +1 -1
- package/dist/phaser/core/time.d.ts.map +1 -1
- package/dist/phaser/core/timer.d.ts +1 -1
- package/dist/phaser/core/timer.d.ts.map +1 -1
- package/dist/phaser/core/timer_event.d.ts.map +1 -1
- package/dist/phaser/core/tween.d.ts +10 -7
- package/dist/phaser/core/tween.d.ts.map +1 -1
- package/dist/phaser/core/tween_data.d.ts +3 -2
- package/dist/phaser/core/tween_data.d.ts.map +1 -1
- package/dist/phaser/core/tween_easing.d.ts.map +1 -1
- package/dist/phaser/core/tween_manager.d.ts +3 -2
- package/dist/phaser/core/tween_manager.d.ts.map +1 -1
- package/dist/phaser/core/world.d.ts +3 -2
- package/dist/phaser/core/world.d.ts.map +1 -1
- package/dist/phaser/display/bitmap_text.d.ts +3 -2
- package/dist/phaser/display/bitmap_text.d.ts.map +1 -1
- package/dist/phaser/display/button.d.ts +3 -2
- package/dist/phaser/display/button.d.ts.map +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/graphics.d.ts +7 -6
- package/dist/phaser/display/canvas/graphics.d.ts.map +1 -1
- package/dist/phaser/display/canvas/pool.d.ts +2 -2
- package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
- package/dist/phaser/display/canvas/renderer.d.ts +10 -8
- package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/tinter.d.ts +3 -2
- package/dist/phaser/display/canvas/tinter.d.ts.map +1 -1
- package/dist/phaser/display/canvas/util.d.ts +2 -2
- package/dist/phaser/display/canvas/util.d.ts.map +1 -1
- package/dist/phaser/display/display_object.d.ts +14 -12
- package/dist/phaser/display/display_object.d.ts.map +1 -1
- package/dist/phaser/display/graphics.d.ts +8 -5
- package/dist/phaser/display/graphics.d.ts.map +1 -1
- package/dist/phaser/display/graphics_data.d.ts.map +1 -1
- package/dist/phaser/display/graphics_data_util.d.ts.map +1 -1
- package/dist/phaser/display/group.d.ts +4 -3
- package/dist/phaser/display/group.d.ts.map +1 -1
- package/dist/phaser/display/image.d.ts +13 -10
- package/dist/phaser/display/image.d.ts.map +1 -1
- package/dist/phaser/display/sprite_batch.d.ts +3 -2
- package/dist/phaser/display/sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/sprite_util.d.ts +18 -15
- package/dist/phaser/display/sprite_util.d.ts.map +1 -1
- package/dist/phaser/display/text.d.ts +11 -9
- package/dist/phaser/display/text.d.ts.map +1 -1
- package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
- package/dist/phaser/display/webgl/base_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/blend_manager.d.ts +0 -1
- package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/earcut.d.ts +1 -1
- package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
- package/dist/phaser/display/webgl/earcut_node.d.ts.map +1 -1
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +4 -3
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts +2 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_texture.d.ts +2 -1
- package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics.d.ts +7 -6
- package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics_data.d.ts +2 -1
- package/dist/phaser/display/webgl/graphics_data.d.ts.map +1 -1
- package/dist/phaser/display/webgl/render_texture.d.ts +4 -2
- package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/renderer.d.ts +16 -11
- package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/complex.d.ts +16 -6
- package/dist/phaser/display/webgl/shader/complex.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/fast.d.ts +19 -7
- package/dist/phaser/display/webgl/shader/fast.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/normal.d.ts +33 -12
- package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/primitive.d.ts +15 -6
- package/dist/phaser/display/webgl/shader/primitive.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/strip.d.ts +15 -6
- package/dist/phaser/display/webgl/shader/strip.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader_manager.d.ts +16 -11
- package/dist/phaser/display/webgl/shader_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/sprite_batch.d.ts +29 -20
- package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/stencil_manager.d.ts +12 -10
- package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture.d.ts +3 -2
- package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
- package/dist/phaser/display/webgl/util.d.ts.map +1 -1
- package/dist/phaser/geom/circle.d.ts +4 -1
- package/dist/phaser/geom/circle.d.ts.map +1 -1
- package/dist/phaser/geom/ellipse.d.ts.map +1 -1
- package/dist/phaser/geom/line.d.ts +1 -1
- package/dist/phaser/geom/line.d.ts.map +1 -1
- package/dist/phaser/geom/matrix.d.ts.map +1 -1
- package/dist/phaser/geom/point.d.ts.map +1 -1
- package/dist/phaser/geom/polygon.d.ts.map +1 -1
- package/dist/phaser/geom/rectangle.d.ts.map +1 -1
- package/dist/phaser/geom/rounded_rectangle.d.ts.map +1 -1
- package/dist/phaser/geom/util/circle.d.ts.map +1 -1
- package/dist/phaser/geom/util/ellipse.d.ts +3 -2
- package/dist/phaser/geom/util/ellipse.d.ts.map +1 -1
- package/dist/phaser/geom/util/line.d.ts.map +1 -1
- package/dist/phaser/geom/util/matrix.d.ts +2 -2
- package/dist/phaser/geom/util/matrix.d.ts.map +1 -1
- package/dist/phaser/geom/util/point.d.ts.map +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
- package/dist/phaser/util/math.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/phaser/core/animation.ts +64 -60
- package/src/phaser/core/animation_manager.ts +50 -53
- package/src/phaser/core/animation_parser.ts +9 -9
- package/src/phaser/core/array_set.ts +16 -17
- package/src/phaser/core/cache.ts +92 -93
- package/src/phaser/core/const.ts +1 -1
- package/src/phaser/core/device.ts +24 -29
- package/src/phaser/core/device_util.ts +22 -26
- package/src/phaser/core/dom.ts +54 -65
- package/src/phaser/core/event_manager.ts +64 -94
- package/src/phaser/core/factory.ts +14 -14
- package/src/phaser/core/frame.ts +28 -28
- package/src/phaser/core/frame_data.test.ts +100 -0
- package/src/phaser/core/frame_data.ts +24 -24
- package/src/phaser/core/frame_util.ts +2 -2
- package/src/phaser/core/game.ts +47 -48
- package/src/phaser/core/input.ts +104 -110
- package/src/phaser/core/input_handler.test.ts +113 -0
- package/src/phaser/core/input_handler.ts +199 -218
- package/src/phaser/core/input_mouse.ts +71 -54
- package/src/phaser/core/input_mspointer.ts +52 -39
- package/src/phaser/core/input_pointer.ts +81 -80
- package/src/phaser/core/input_touch.ts +49 -36
- package/src/phaser/core/loader.ts +173 -152
- package/src/phaser/core/loader_parser.ts +39 -57
- package/src/phaser/core/raf.ts +8 -7
- package/src/phaser/core/registry.test.ts +31 -0
- package/src/phaser/core/registry.ts +9 -0
- package/src/phaser/core/scale_manager.ts +156 -152
- package/src/phaser/core/scene.ts +9 -13
- package/src/phaser/core/scene_manager.ts +47 -47
- package/src/phaser/core/signal.test.ts +4 -4
- package/src/phaser/core/signal.ts +41 -52
- package/src/phaser/core/signal_binding.ts +26 -25
- package/src/phaser/core/signal_dispatch.test.ts +180 -0
- package/src/phaser/core/sound.ts +75 -83
- package/src/phaser/core/sound_manager.ts +52 -51
- package/src/phaser/core/sound_sprite.ts +17 -16
- package/src/phaser/core/stage.ts +25 -24
- package/src/phaser/core/time.ts +52 -52
- package/src/phaser/core/timer.test.ts +187 -0
- package/src/phaser/core/timer.ts +82 -69
- package/src/phaser/core/timer_event.ts +10 -10
- package/src/phaser/core/tween.ts +90 -93
- package/src/phaser/core/tween_data.ts +45 -51
- package/src/phaser/core/tween_easing.test.ts +106 -0
- package/src/phaser/core/tween_easing.ts +151 -123
- package/src/phaser/core/tween_manager.ts +19 -18
- package/src/phaser/core/world.ts +4 -3
- package/src/phaser/display/bitmap_text.ts +56 -64
- package/src/phaser/display/button.ts +33 -32
- package/src/phaser/display/canvas/buffer.ts +8 -8
- package/src/phaser/display/canvas/graphics.ts +36 -37
- package/src/phaser/display/canvas/masker.ts +2 -2
- package/src/phaser/display/canvas/pool.test.ts +106 -0
- package/src/phaser/display/canvas/pool.ts +25 -27
- package/src/phaser/display/canvas/renderer.ts +32 -31
- package/src/phaser/display/canvas/tinter.ts +25 -25
- package/src/phaser/display/canvas/util.ts +7 -10
- package/src/phaser/display/display_object.ts +114 -118
- package/src/phaser/display/graphics.ts +121 -119
- package/src/phaser/display/graphics_data.ts +12 -12
- package/src/phaser/display/graphics_data_util.ts +2 -3
- package/src/phaser/display/group.ts +50 -57
- package/src/phaser/display/image.ts +55 -52
- package/src/phaser/display/sprite_batch.ts +3 -2
- package/src/phaser/display/sprite_util.ts +48 -54
- package/src/phaser/display/text.ts +199 -204
- package/src/phaser/display/webgl/abstract_filter.ts +9 -9
- package/src/phaser/display/webgl/base_texture.ts +21 -24
- package/src/phaser/display/webgl/blend_manager.ts +6 -10
- package/src/phaser/display/webgl/earcut.ts +73 -37
- package/src/phaser/display/webgl/earcut_node.ts +10 -10
- package/src/phaser/display/webgl/fast_sprite_batch.ts +34 -34
- package/src/phaser/display/webgl/filter_manager.ts +13 -12
- package/src/phaser/display/webgl/filter_texture.ts +14 -13
- package/src/phaser/display/webgl/graphics.ts +51 -57
- package/src/phaser/display/webgl/graphics_data.ts +15 -14
- package/src/phaser/display/webgl/mask_manager.ts +2 -2
- package/src/phaser/display/webgl/render_texture.ts +26 -25
- package/src/phaser/display/webgl/renderer.ts +57 -62
- package/src/phaser/display/webgl/shader/complex.ts +28 -12
- package/src/phaser/display/webgl/shader/fast.ts +30 -12
- package/src/phaser/display/webgl/shader/normal.ts +70 -57
- package/src/phaser/display/webgl/shader/primitive.ts +26 -11
- package/src/phaser/display/webgl/shader/shader.test.ts +148 -0
- package/src/phaser/display/webgl/shader/strip.ts +27 -12
- package/src/phaser/display/webgl/shader_manager.test.ts +124 -0
- package/src/phaser/display/webgl/shader_manager.ts +26 -34
- package/src/phaser/display/webgl/sprite_batch.ts +67 -61
- package/src/phaser/display/webgl/stencil_manager.ts +23 -34
- package/src/phaser/display/webgl/texture.ts +43 -50
- package/src/phaser/display/webgl/texture_util.ts +2 -3
- package/src/phaser/display/webgl/util.ts +26 -25
- package/src/phaser/geom/circle.test.ts +2 -3
- package/src/phaser/geom/circle.ts +36 -36
- package/src/phaser/geom/ellipse.test.ts +73 -71
- package/src/phaser/geom/ellipse.ts +14 -14
- package/src/phaser/geom/line.test.ts +5 -5
- package/src/phaser/geom/line.ts +35 -35
- package/src/phaser/geom/matrix.test.ts +1 -1
- package/src/phaser/geom/matrix.ts +27 -27
- package/src/phaser/geom/point.test.ts +1 -2
- package/src/phaser/geom/point.ts +35 -35
- package/src/phaser/geom/polygon.test.ts +82 -0
- package/src/phaser/geom/polygon.ts +16 -16
- package/src/phaser/geom/rectangle.test.ts +14 -14
- package/src/phaser/geom/rectangle.ts +83 -75
- package/src/phaser/geom/rounded_rectangle.test.ts +1 -7
- package/src/phaser/geom/rounded_rectangle.ts +9 -9
- package/src/phaser/geom/util/circle.test.ts +25 -23
- package/src/phaser/geom/util/circle.ts +9 -18
- package/src/phaser/geom/util/ellipse.test.ts +7 -5
- package/src/phaser/geom/util/ellipse.ts +3 -2
- package/src/phaser/geom/util/line.test.ts +10 -8
- package/src/phaser/geom/util/line.ts +6 -16
- package/src/phaser/geom/util/matrix.test.ts +20 -18
- package/src/phaser/geom/util/matrix.ts +8 -15
- package/src/phaser/geom/util/point.test.ts +8 -6
- package/src/phaser/geom/util/point.ts +24 -28
- package/src/phaser/geom/util/polygon.test.ts +12 -10
- package/src/phaser/geom/util/polygon.ts +2 -2
- package/src/phaser/geom/util/rectangle.test.ts +10 -8
- package/src/phaser/geom/util/rectangle.ts +18 -37
- package/src/phaser/geom/util/rounded_rectangle.test.ts +11 -9
- package/src/phaser/geom/util/rounded_rectangle.ts +1 -1
- package/src/phaser/util/math.test.ts +11 -11
- package/src/phaser/util/math.ts +29 -46
package/src/phaser/core/time.ts
CHANGED
|
@@ -2,38 +2,38 @@ import type { Game } from './game.js';
|
|
|
2
2
|
import { Timer } from './timer.js';
|
|
3
3
|
|
|
4
4
|
export class Time {
|
|
5
|
-
game!: Game;
|
|
6
|
-
time!: number;
|
|
7
|
-
prevTime!: number;
|
|
8
|
-
now!: number;
|
|
9
|
-
elapsed!: number;
|
|
10
|
-
elapsedMS!: number;
|
|
11
|
-
desiredFpsMult!: number;
|
|
12
|
-
_desiredFps!: number;
|
|
13
|
-
suggestedFps!: number;
|
|
14
|
-
advancedTiming!: boolean;
|
|
15
|
-
frames!: number;
|
|
16
|
-
fps!: number;
|
|
17
|
-
fpsMin!: number;
|
|
18
|
-
fpsMax!: number;
|
|
19
|
-
msMin!: number;
|
|
20
|
-
msMax!: number;
|
|
21
|
-
pauseDuration!: number;
|
|
22
|
-
timeToCall!: number;
|
|
23
|
-
timeExpected!: number;
|
|
24
|
-
events!: Timer;
|
|
25
|
-
_frameCount!: number;
|
|
26
|
-
_elapsedAccumulator!: number;
|
|
27
|
-
_started!: number;
|
|
28
|
-
_timeLastSecond!: number;
|
|
29
|
-
_pauseStarted!: number;
|
|
30
|
-
_justResumed!: boolean;
|
|
31
|
-
_timers!: Timer[];
|
|
5
|
+
public game!: Game;
|
|
6
|
+
public time!: number;
|
|
7
|
+
public prevTime!: number;
|
|
8
|
+
public now!: number;
|
|
9
|
+
public elapsed!: number;
|
|
10
|
+
public elapsedMS!: number;
|
|
11
|
+
public desiredFpsMult!: number;
|
|
12
|
+
public _desiredFps!: number;
|
|
13
|
+
public suggestedFps!: number;
|
|
14
|
+
public advancedTiming!: boolean;
|
|
15
|
+
public frames!: number;
|
|
16
|
+
public fps!: number;
|
|
17
|
+
public fpsMin!: number;
|
|
18
|
+
public fpsMax!: number;
|
|
19
|
+
public msMin!: number;
|
|
20
|
+
public msMax!: number;
|
|
21
|
+
public pauseDuration!: number;
|
|
22
|
+
public timeToCall!: number;
|
|
23
|
+
public timeExpected!: number;
|
|
24
|
+
public events!: Timer;
|
|
25
|
+
public _frameCount!: number;
|
|
26
|
+
public _elapsedAccumulator!: number;
|
|
27
|
+
public _started!: number;
|
|
28
|
+
public _timeLastSecond!: number;
|
|
29
|
+
public _pauseStarted!: number;
|
|
30
|
+
public _justResumed!: boolean;
|
|
31
|
+
public _timers!: Timer[];
|
|
32
32
|
/**
|
|
33
33
|
* Creates a new Time instance.
|
|
34
|
-
* @param {
|
|
34
|
+
* @param {Game} game - Reference to the Phaser Game instance.
|
|
35
35
|
*/
|
|
36
|
-
constructor(game: Game) {
|
|
36
|
+
public constructor(game: Game) {
|
|
37
37
|
this.game = game;
|
|
38
38
|
this.time = 0;
|
|
39
39
|
this.prevTime = 0;
|
|
@@ -66,7 +66,7 @@ export class Time {
|
|
|
66
66
|
/**
|
|
67
67
|
* Initializes the time manager and starts tracking time.
|
|
68
68
|
*/
|
|
69
|
-
boot() {
|
|
69
|
+
public boot() {
|
|
70
70
|
this._started = Date.now();
|
|
71
71
|
this.time = Date.now();
|
|
72
72
|
this.events.start();
|
|
@@ -78,7 +78,7 @@ export class Time {
|
|
|
78
78
|
* @param {Timer} timer - The Timer to add.
|
|
79
79
|
* @returns {Timer} The added Timer object.
|
|
80
80
|
*/
|
|
81
|
-
add(timer: Timer) {
|
|
81
|
+
public add(timer: Timer) {
|
|
82
82
|
this._timers.push(timer);
|
|
83
83
|
return timer;
|
|
84
84
|
}
|
|
@@ -88,7 +88,7 @@ export class Time {
|
|
|
88
88
|
* @param {boolean} autoDestroy - Whether the timer should be automatically destroyed when it completes.
|
|
89
89
|
* @returns {Timer} The created Timer object.
|
|
90
90
|
*/
|
|
91
|
-
create(autoDestroy
|
|
91
|
+
public create(autoDestroy = true) {
|
|
92
92
|
const timer = new Timer(this.game, autoDestroy);
|
|
93
93
|
this._timers.push(timer);
|
|
94
94
|
return timer;
|
|
@@ -97,9 +97,9 @@ export class Time {
|
|
|
97
97
|
/**
|
|
98
98
|
* Removes all timers from the Time manager.
|
|
99
99
|
*/
|
|
100
|
-
removeAll() {
|
|
101
|
-
for (
|
|
102
|
-
|
|
100
|
+
public removeAll() {
|
|
101
|
+
for (const timer of this._timers) {
|
|
102
|
+
timer.destroy();
|
|
103
103
|
}
|
|
104
104
|
this._timers = [];
|
|
105
105
|
this.events.removeAll();
|
|
@@ -108,7 +108,7 @@ export class Time {
|
|
|
108
108
|
/**
|
|
109
109
|
* Refreshes the time tracking values.
|
|
110
110
|
*/
|
|
111
|
-
refresh() {
|
|
111
|
+
public refresh() {
|
|
112
112
|
const previousDateNow = this.time;
|
|
113
113
|
// this.time always holds a Date.now value
|
|
114
114
|
this.time = Date.now();
|
|
@@ -120,7 +120,7 @@ export class Time {
|
|
|
120
120
|
* Updates the Time manager with a new timestamp.
|
|
121
121
|
* @param {number} time - The new timestamp to use for updating.
|
|
122
122
|
*/
|
|
123
|
-
update(time: number) {
|
|
123
|
+
public update(time: number) {
|
|
124
124
|
const previousDateNow = this.time;
|
|
125
125
|
// this.time always holds a Date.now value
|
|
126
126
|
this.time = Date.now();
|
|
@@ -140,7 +140,7 @@ export class Time {
|
|
|
140
140
|
if (!this.game.paused) {
|
|
141
141
|
// Our internal Phaser.Timer
|
|
142
142
|
this.events.update(this.time);
|
|
143
|
-
if (this._timers.length) {
|
|
143
|
+
if (this._timers.length > 0) {
|
|
144
144
|
this.updateTimers();
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -149,11 +149,11 @@ export class Time {
|
|
|
149
149
|
/**
|
|
150
150
|
* Updates all timers managed by the Time manager.
|
|
151
151
|
*/
|
|
152
|
-
updateTimers() {
|
|
152
|
+
public updateTimers() {
|
|
153
153
|
let i = 0;
|
|
154
154
|
let len = this._timers.length;
|
|
155
155
|
while (i < len) {
|
|
156
|
-
if (this._timers[i]
|
|
156
|
+
if (this._timers[i]!.update(this.time)) {
|
|
157
157
|
i += 1;
|
|
158
158
|
} else {
|
|
159
159
|
// Timer requests to be removed
|
|
@@ -166,7 +166,7 @@ export class Time {
|
|
|
166
166
|
/**
|
|
167
167
|
* Updates the advanced timing values.
|
|
168
168
|
*/
|
|
169
|
-
updateAdvancedTiming() {
|
|
169
|
+
public updateAdvancedTiming() {
|
|
170
170
|
// count the number of time.update calls
|
|
171
171
|
this._frameCount += 1;
|
|
172
172
|
this._elapsedAccumulator += this.elapsed;
|
|
@@ -192,27 +192,27 @@ export class Time {
|
|
|
192
192
|
/**
|
|
193
193
|
* Handles game pause event.
|
|
194
194
|
*/
|
|
195
|
-
gamePaused() {
|
|
195
|
+
public gamePaused() {
|
|
196
196
|
this._pauseStarted = Date.now();
|
|
197
197
|
this.events.pause();
|
|
198
198
|
let i = this._timers.length;
|
|
199
199
|
while (i) {
|
|
200
200
|
i -= 1;
|
|
201
|
-
this._timers[i]
|
|
201
|
+
this._timers[i]!._pause();
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
/**
|
|
206
206
|
* Handles game resume event.
|
|
207
207
|
*/
|
|
208
|
-
gameResumed() {
|
|
208
|
+
public gameResumed() {
|
|
209
209
|
this.time = Date.now();
|
|
210
210
|
this.pauseDuration = this.time - this._pauseStarted;
|
|
211
211
|
this.events.resume();
|
|
212
212
|
let i = this._timers.length;
|
|
213
213
|
while (i) {
|
|
214
214
|
i -= 1;
|
|
215
|
-
this._timers[i]
|
|
215
|
+
this._timers[i]!._resume();
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
@@ -220,7 +220,7 @@ export class Time {
|
|
|
220
220
|
* Gets the total elapsed time in seconds since the game started.
|
|
221
221
|
* @returns {number} The total elapsed time in seconds.
|
|
222
222
|
*/
|
|
223
|
-
totalElapsedSeconds() {
|
|
223
|
+
public totalElapsedSeconds() {
|
|
224
224
|
return (this.time - this._started) * 0.001;
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -229,7 +229,7 @@ export class Time {
|
|
|
229
229
|
* @param {number} since - The timestamp to calculate elapsed time from.
|
|
230
230
|
* @returns {number} The elapsed time in milliseconds.
|
|
231
231
|
*/
|
|
232
|
-
elapsedSince(since: number) {
|
|
232
|
+
public elapsedSince(since: number) {
|
|
233
233
|
return this.time - since;
|
|
234
234
|
}
|
|
235
235
|
|
|
@@ -238,14 +238,14 @@ export class Time {
|
|
|
238
238
|
* @param {number} since - The timestamp to calculate elapsed time from.
|
|
239
239
|
* @returns {number} The elapsed time in seconds.
|
|
240
240
|
*/
|
|
241
|
-
elapsedSecondsSince(since: number) {
|
|
241
|
+
public elapsedSecondsSince(since: number) {
|
|
242
242
|
return (this.time - since) * 0.001;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
/**
|
|
246
246
|
* Resets the time tracking values.
|
|
247
247
|
*/
|
|
248
|
-
reset() {
|
|
248
|
+
public reset() {
|
|
249
249
|
this._started = this.time;
|
|
250
250
|
this.removeAll();
|
|
251
251
|
}
|
|
@@ -253,7 +253,7 @@ export class Time {
|
|
|
253
253
|
/**
|
|
254
254
|
* Destroys the Time manager and cleans up resources.
|
|
255
255
|
*/
|
|
256
|
-
destroy() {
|
|
256
|
+
public destroy() {
|
|
257
257
|
this.reset();
|
|
258
258
|
}
|
|
259
259
|
|
|
@@ -261,14 +261,14 @@ export class Time {
|
|
|
261
261
|
* Gets the desired frames per second.
|
|
262
262
|
* @returns {number} The desired frames per second.
|
|
263
263
|
*/
|
|
264
|
-
get desiredFps() {
|
|
264
|
+
public get desiredFps() {
|
|
265
265
|
return this._desiredFps;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
/**
|
|
269
269
|
* Sets the desired frames per second.
|
|
270
270
|
*/
|
|
271
|
-
set desiredFps(value) {
|
|
271
|
+
public set desiredFps(value) {
|
|
272
272
|
this._desiredFps = value;
|
|
273
273
|
this.desiredFpsMult = 1 / value;
|
|
274
274
|
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import type { Game } from './game.js';
|
|
3
|
+
import { Timer } from './timer.js';
|
|
4
|
+
|
|
5
|
+
const createGame = (time = 0): Game => ({ time: { time } }) as unknown as Game;
|
|
6
|
+
|
|
7
|
+
const createTimer = (startTime = 0): Timer => {
|
|
8
|
+
const timer = new Timer(createGame(startTime));
|
|
9
|
+
timer._now = startTime;
|
|
10
|
+
return timer;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
describe('Timer', () => {
|
|
14
|
+
describe('start', () => {
|
|
15
|
+
it('rebases every queued event onto the start time', () => {
|
|
16
|
+
const timer = createTimer(1000);
|
|
17
|
+
timer.add(100, () => undefined);
|
|
18
|
+
timer.add(300, () => undefined);
|
|
19
|
+
timer.start();
|
|
20
|
+
expect(timer.events.map((event) => event.tick)).toStrictEqual([1100, 1300]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('is a no-op once already running', () => {
|
|
24
|
+
const timer = createTimer(1000);
|
|
25
|
+
timer.add(100, () => undefined);
|
|
26
|
+
timer.start();
|
|
27
|
+
const ticks = timer.events.map((event) => event.tick);
|
|
28
|
+
timer.start(500);
|
|
29
|
+
expect(timer.events.map((event) => event.tick)).toStrictEqual(ticks);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe('order', () => {
|
|
34
|
+
it('sorts events by tick and exposes the earliest as nextTick', () => {
|
|
35
|
+
const timer = createTimer(0);
|
|
36
|
+
timer.add(500, () => undefined);
|
|
37
|
+
timer.add(100, () => undefined);
|
|
38
|
+
timer.add(300, () => undefined);
|
|
39
|
+
expect(timer.events.map((event) => event.delay)).toStrictEqual([100, 300, 500]);
|
|
40
|
+
expect(timer.nextTick).toBe(100);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('leaves nextTick untouched when there are no events', () => {
|
|
44
|
+
const timer = createTimer(0);
|
|
45
|
+
timer.nextTick = 42;
|
|
46
|
+
timer.order();
|
|
47
|
+
expect(timer.nextTick).toBe(42);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('remove', () => {
|
|
52
|
+
it('marks a matching event for deletion and reports success', () => {
|
|
53
|
+
const timer = createTimer(0);
|
|
54
|
+
const event = timer.add(100, () => undefined);
|
|
55
|
+
expect(timer.remove(event)).toBe(true);
|
|
56
|
+
expect(event.pendingDelete).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('reports failure for an event it does not hold', () => {
|
|
60
|
+
const timer = createTimer(0);
|
|
61
|
+
timer.add(100, () => undefined);
|
|
62
|
+
const other = createTimer(0).add(100, () => undefined);
|
|
63
|
+
expect(timer.remove(other)).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('reports failure for null without throwing', () => {
|
|
67
|
+
const timer = createTimer(0);
|
|
68
|
+
timer.add(100, () => undefined);
|
|
69
|
+
expect(timer.remove(null)).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
describe('clearPendingEvents', () => {
|
|
74
|
+
it('drops only the events marked for deletion', () => {
|
|
75
|
+
const timer = createTimer(0);
|
|
76
|
+
const first = timer.add(100, () => undefined);
|
|
77
|
+
const second = timer.add(200, () => undefined);
|
|
78
|
+
timer.remove(first);
|
|
79
|
+
timer.clearPendingEvents();
|
|
80
|
+
expect(timer.events).toStrictEqual([second]);
|
|
81
|
+
expect(timer._len).toBe(1);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('update', () => {
|
|
86
|
+
it('fires a one-shot event once its tick is reached and marks it spent', () => {
|
|
87
|
+
const timer = createTimer(0);
|
|
88
|
+
const callback = vi.fn();
|
|
89
|
+
timer.add(100, callback);
|
|
90
|
+
timer.start();
|
|
91
|
+
timer.update(50);
|
|
92
|
+
expect(callback).not.toHaveBeenCalled();
|
|
93
|
+
timer.update(100);
|
|
94
|
+
expect(callback).toHaveBeenCalledTimes(1);
|
|
95
|
+
expect(timer.events[0]?.pendingDelete).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('keeps firing a looping event and reschedules its tick', () => {
|
|
99
|
+
const timer = createTimer(0);
|
|
100
|
+
const callback = vi.fn();
|
|
101
|
+
timer.loop(100, callback);
|
|
102
|
+
timer.start();
|
|
103
|
+
timer.update(100);
|
|
104
|
+
timer.update(200);
|
|
105
|
+
timer.update(300);
|
|
106
|
+
expect(callback).toHaveBeenCalledTimes(3);
|
|
107
|
+
expect(timer.events[0]?.pendingDelete).toBe(false);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('fires a repeating event exactly repeatCount times', () => {
|
|
111
|
+
const timer = createTimer(0);
|
|
112
|
+
const callback = vi.fn();
|
|
113
|
+
timer.repeat(100, 2, callback);
|
|
114
|
+
timer.start();
|
|
115
|
+
timer.update(100);
|
|
116
|
+
timer.update(200);
|
|
117
|
+
timer.update(300);
|
|
118
|
+
timer.update(400);
|
|
119
|
+
expect(callback).toHaveBeenCalledTimes(2);
|
|
120
|
+
expect(timer.expired).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('passes the configured context and arguments to the callback', () => {
|
|
124
|
+
const timer = createTimer(0);
|
|
125
|
+
const context = { seen: null as unknown };
|
|
126
|
+
const callback = vi.fn(function callbackImpl(this: typeof context, value: string) {
|
|
127
|
+
this.seen = value;
|
|
128
|
+
});
|
|
129
|
+
timer.add(100, callback, context, 'payload');
|
|
130
|
+
timer.start();
|
|
131
|
+
timer.update(100);
|
|
132
|
+
expect(callback).toHaveBeenCalledWith('payload');
|
|
133
|
+
expect(context.seen).toBe('payload');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('completes and dispatches onComplete once every event is spent', () => {
|
|
137
|
+
const timer = createTimer(0);
|
|
138
|
+
const onComplete = vi.fn();
|
|
139
|
+
timer.onComplete.add(onComplete);
|
|
140
|
+
timer.add(100, () => undefined);
|
|
141
|
+
timer.start();
|
|
142
|
+
timer.update(100);
|
|
143
|
+
expect(timer.expired).toBe(true);
|
|
144
|
+
expect(onComplete).toHaveBeenCalledTimes(1);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('survives a callback that removes every event mid-tick', () => {
|
|
148
|
+
const timer = createTimer(0);
|
|
149
|
+
timer.add(100, () => {
|
|
150
|
+
timer.events.length = 0;
|
|
151
|
+
});
|
|
152
|
+
timer.start();
|
|
153
|
+
expect(() => timer.update(100)).not.toThrow();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
describe('adjustEvents', () => {
|
|
158
|
+
it('shifts pending events forward by the time they missed', () => {
|
|
159
|
+
const timer = createTimer(0);
|
|
160
|
+
const event = timer.add(100, () => undefined);
|
|
161
|
+
timer.start();
|
|
162
|
+
timer._now = 5000;
|
|
163
|
+
timer.adjustEvents(0);
|
|
164
|
+
expect(event.tick).toBe(5100);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it('clamps events whose tick already passed to the current time', () => {
|
|
168
|
+
const timer = createTimer(0);
|
|
169
|
+
const event = timer.add(100, () => undefined);
|
|
170
|
+
timer.start();
|
|
171
|
+
timer._now = 5000;
|
|
172
|
+
timer.adjustEvents(500);
|
|
173
|
+
expect(event.tick).toBe(5000);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('leaves events marked for deletion alone', () => {
|
|
177
|
+
const timer = createTimer(0);
|
|
178
|
+
const event = timer.add(100, () => undefined);
|
|
179
|
+
timer.start();
|
|
180
|
+
timer.remove(event);
|
|
181
|
+
const { tick } = event;
|
|
182
|
+
timer._now = 5000;
|
|
183
|
+
timer.adjustEvents(0);
|
|
184
|
+
expect(event.tick).toBe(tick);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|