mirror of
https://github.com/Terncode/pixel.horse.git
synced 2026-09-24 13:55:04 +02:00
* Revert "7f7efbb94bab8574e42d942ad82d414e007b2970" Code style changes should probably be part of a PR
39 lines
670 B
TypeScript
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;
|
|
}
|
|
};
|
|
}
|
|
}
|