59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { TimeMgr } from '@common/TimeMgr';
|
|
|
|
describe('TimeMgr', () => {
|
|
let tm: TimeMgr;
|
|
beforeEach(() => {
|
|
tm = new TimeMgr();
|
|
});
|
|
|
|
it('advances both clocks at timeScale 1', () => {
|
|
tm.update(1);
|
|
tm.update(0.5);
|
|
expect(tm.gameTime).toBeCloseTo(1.5);
|
|
expect(tm.realTime).toBeCloseTo(1.5);
|
|
});
|
|
|
|
it('freezes gameTime when paused but keeps realTime ticking', () => {
|
|
tm.pause();
|
|
tm.update(1);
|
|
expect(tm.gameTime).toBe(0);
|
|
expect(tm.realTime).toBe(1);
|
|
tm.resume();
|
|
tm.update(0.5);
|
|
expect(tm.gameTime).toBeCloseTo(0.5);
|
|
expect(tm.realTime).toBeCloseTo(1.5);
|
|
});
|
|
|
|
it('honors timeScale for slow-mo', () => {
|
|
tm.setTimeScale(0.5);
|
|
tm.update(2);
|
|
expect(tm.gameTime).toBeCloseTo(1);
|
|
expect(tm.realTime).toBe(2);
|
|
});
|
|
|
|
it('clamps negative timeScale to 0', () => {
|
|
tm.setTimeScale(-3);
|
|
expect(tm.timeScale).toBe(0);
|
|
tm.update(10);
|
|
expect(tm.gameTime).toBe(0);
|
|
});
|
|
|
|
it('scaledDelta() reflects pause and timeScale', () => {
|
|
tm.setTimeScale(2);
|
|
expect(tm.scaledDelta(0.1)).toBeCloseTo(0.2);
|
|
tm.pause();
|
|
expect(tm.scaledDelta(0.1)).toBe(0);
|
|
});
|
|
|
|
it('reset() zeros everything', () => {
|
|
tm.update(1);
|
|
tm.pause();
|
|
tm.setTimeScale(0.2);
|
|
tm.reset();
|
|
expect(tm.gameTime).toBe(0);
|
|
expect(tm.realTime).toBe(0);
|
|
expect(tm.timeScale).toBe(1);
|
|
expect(tm.paused).toBe(false);
|
|
});
|
|
});
|