From ffed5c57127426bbda7a9da5d0cd9a1146e05d75 Mon Sep 17 00:00:00 2001 From: Abbondanzo Date: Sat, 17 Aug 2019 16:26:18 -0400 Subject: [PATCH] Pass delta into frame callbacks --- src/eventbus/events/frame.ts | 1 + src/managers/GameManager.ts | 4 +--- src/managers/SceneManager.ts | 8 ++++++-- src/utils/FPSClock.ts | 17 +++++++++-------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/eventbus/events/frame.ts b/src/eventbus/events/frame.ts index bb2cffe..02a4f09 100644 --- a/src/eventbus/events/frame.ts +++ b/src/eventbus/events/frame.ts @@ -5,6 +5,7 @@ import EventBus from "../EventBus" * Fires each time the global game clock advances a frame or updates its current frame. */ export interface FrameEvent { + delta: number frame: number elapsedTime: number } diff --git a/src/managers/GameManager.ts b/src/managers/GameManager.ts index 5dd508c..c2a2e96 100644 --- a/src/managers/GameManager.ts +++ b/src/managers/GameManager.ts @@ -52,9 +52,7 @@ export class GameManager { paused ? this.clock.pause() : this.clock.play() } - animate({ }: FrameEvent) { - const delta = this.clock.getDelta() - + animate({ delta }: FrameEvent) { if (delta) { AnimationManager.getInstance().updateAnimationClips(delta) this.render() diff --git a/src/managers/SceneManager.ts b/src/managers/SceneManager.ts index 09f36ba..7da2f1c 100644 --- a/src/managers/SceneManager.ts +++ b/src/managers/SceneManager.ts @@ -1,6 +1,10 @@ import { Scene } from "three" -import { addFrameListener, removeFrameListener } from "../eventbus/events/frame" +import { + addFrameListener, + FrameEvent, + removeFrameListener, +} from "../eventbus/events/frame" import BallManager from "./models/BallManager" import FieldManager from "./models/FieldManager" import PlayerManager from "./models/PlayerManager" @@ -27,7 +31,7 @@ export default class SceneManager { addFrameListener(this.update) } - private readonly update = () => { + private readonly update = ({ delta }: FrameEvent) => { for (const player of this.players) { if (player.carGroup.position.y < 0) { player.carGroup.visible = false diff --git a/src/utils/FPSClock.ts b/src/utils/FPSClock.ts index aa2535d..a4755e6 100644 --- a/src/utils/FPSClock.ts +++ b/src/utils/FPSClock.ts @@ -78,6 +78,13 @@ export default class FPSClock { this.timeout(false) } + /** + * Returns the elapsed time in milliseconds. + */ + public getElapsedTime() { + return this.frameToDuration[this.currentFrame] + } + /** * Returns the number of seconds elapsed since the last time getDelta was called. This function * uses a combination of the performance.now() functionality when animations are rolling, @@ -87,7 +94,7 @@ export default class FPSClock { * * @returns {number} seconds */ - public getDelta(): number { + private getDelta(): number { const now = performance.now() // Initialize empty delta if (!this.lastDelta) { @@ -111,13 +118,6 @@ export default class FPSClock { return delta / 1000 } - /** - * Returns the elapsed time in milliseconds. - */ - public getElapsedTime() { - return this.frameToDuration[this.currentFrame] - } - private update() { if (!this.paused) { this.getElapsedFrames() @@ -147,6 +147,7 @@ export default class FPSClock { private doCallbacks() { dispatchFrameEvent({ + delta: this.getDelta(), frame: this.currentFrame, elapsedTime: this.getElapsedTime(), })