lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
40 lines • 1.41 kB
JavaScript
import { Cancellable } from "@lincode/promiselikes";
import { createEffect } from "@lincode/reactivity";
import { Clock } from "three";
import { getRenderer } from "../states/useRenderer";
import { getFps } from "../states/useFps";
import { STANDARD_FRAME } from "../globals";
import { dtPtr } from "../pointers/dtPtr";
import { fpsRatioPtr } from "../pointers/fpsRatioPtr";
import { fpsPtr } from "../pointers/fpsPtr";
import { rendererPtr } from "../pointers/rendererPtr";
import { getEditorRuntime } from "../states/useEditorRuntime";
import { getTabPaused } from "../states/useTabPaused";
const callbacks = new Set();
const clock = new Clock();
let delta = 0;
createEffect(() => {
if (getEditorRuntime() || getTabPaused())
return;
const targetDelta = (1 / fpsPtr[0]) * 0.9;
rendererPtr[0].setAnimationLoop(() => {
delta += clock.getDelta();
if (delta > 0.2)
delta = 0;
if (delta < targetDelta)
return;
fpsRatioPtr[0] = delta * STANDARD_FRAME;
dtPtr[0] = delta;
delta = 0;
for (const cb of callbacks)
cb();
});
return () => {
rendererPtr[0].setAnimationLoop(null);
};
}, [getFps, getRenderer, getEditorRuntime, getTabPaused]);
export const loop = (cb) => {
callbacks.add(cb);
return new Cancellable(() => callbacks.delete(cb));
};
//# sourceMappingURL=eventLoop.js.map