32 lines
807 B
TypeScript
32 lines
807 B
TypeScript
import { appConfig } from '../config';
|
|
import { clamp } from './math';
|
|
|
|
export class DeltaTimeCalculator {
|
|
private previousTime: DOMHighResTimeStamp | null = null;
|
|
|
|
constructor() {
|
|
document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
|
|
}
|
|
|
|
public calculateDeltaTimeInSeconds(
|
|
currentTime: DOMHighResTimeStamp
|
|
): DOMHighResTimeStamp {
|
|
if (this.previousTime === null) {
|
|
this.previousTime = currentTime;
|
|
}
|
|
|
|
const delta = currentTime - this.previousTime;
|
|
this.previousTime = currentTime;
|
|
return clamp(
|
|
delta / 1000,
|
|
appConfig.deltaTime.minDeltaTimeSeconds,
|
|
appConfig.deltaTime.maxDeltaTimeSeconds
|
|
);
|
|
}
|
|
|
|
private handleVisibilityChange() {
|
|
if (!document.hidden) {
|
|
this.previousTime = null;
|
|
}
|
|
}
|
|
}
|