Spaces:
Configuration error
Configuration error
| import { JulianDate } from "@cesium/engine"; | |
| import type { Viewer } from "@cesium/widgets"; | |
| // Use `any` for Cesium viewer/event - tightening Cesium types is out of scope. | |
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | |
| type CesiumEvent = any; | |
| export class CesiumCallbackHelper { | |
| /** | |
| * Fire every `refreshRate` ticks of the clock. | |
| * @returns the unsubscribe | |
| */ | |
| static createPeriodicTickCallback(viewer: Viewer, refreshRate: number, callback: (time: JulianDate) => void, event: CesiumEvent = viewer.clock.onTick): () => void { | |
| let ticks = 0; | |
| return event.addEventListener(() => { | |
| if (ticks < refreshRate) { | |
| ticks += 1; | |
| return; | |
| } | |
| callback(viewer.clock.currentTime); | |
| ticks = 0; | |
| }); | |
| } | |
| /** | |
| * Fire every `refreshRate` seconds of *simulation* time, so a faster clock | |
| * fires it more often in real time. | |
| * @returns the unsubscribe | |
| */ | |
| static createPeriodicTimeCallback(viewer: Viewer, refreshRate: number, callback: (time: JulianDate) => void, event: CesiumEvent = viewer.clock.onTick): () => void { | |
| let lastUpdated = viewer.clock.currentTime; | |
| return event.addEventListener(() => { | |
| const time = viewer.clock.currentTime; | |
| const delta = Math.abs(JulianDate.secondsDifference(time, lastUpdated)); | |
| if (delta < refreshRate) { | |
| return; | |
| } | |
| callback(time); | |
| lastUpdated = time; | |
| }); | |
| } | |
| } | |