UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

40 lines 1.41 kB
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