Files
pixel.horse/src/ts/components/services/frameService.ts
T
Eliot Partridge caf70a864f Revert codestyle changes (#40)
* Revert "7f7efbb94bab8574e42d942ad82d414e007b2970"

Code style changes should probably be part of a PR
2019-08-30 10:53:14 -05:00

39 lines
670 B
TypeScript

import { Injectable, NgZone } from '@angular/core';
export interface FrameLoop {
init(): void;
destroy(): void;
}
@Injectable({
providedIn: 'root',
})
export class FrameService {
constructor(private zone: NgZone) {
}
create(frame: (delta: number) => void) {
const zone = this.zone;
let ref = 0;
let last = 0;
function tick(now: number) {
ref = requestAnimationFrame(tick);
frame((now - last) / 1000);
last = now;
}
return {
init() {
if (!ref) {
last = performance.now();
zone.runOutsideAngular(() => ref = requestAnimationFrame(tick));
}
},
destroy() {
cancelAnimationFrame(ref);
ref = 0;
}
};
}
}