54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { type CameraState } from '../camera/camera'
|
|
import { type TileStoreStats } from '../tile/tileStore'
|
|
import { type LonLatPoint, type MapCalibration } from '../../utils/projection'
|
|
import { type TileZoomBounds } from '../../utils/remoteMapConfig'
|
|
|
|
export interface MapScene {
|
|
tileSource: string
|
|
osmTileSource: string
|
|
zoom: number
|
|
centerTileX: number
|
|
centerTileY: number
|
|
exactCenterWorldX: number
|
|
exactCenterWorldY: number
|
|
tileBoundsByZoom: Record<number, TileZoomBounds> | null
|
|
viewportWidth: number
|
|
viewportHeight: number
|
|
visibleColumns: number
|
|
overdraw: number
|
|
translateX: number
|
|
translateY: number
|
|
rotationRad: number
|
|
previewScale: number
|
|
previewOriginX: number
|
|
previewOriginY: number
|
|
track: LonLatPoint[]
|
|
gpsPoint: LonLatPoint | null
|
|
gpsCalibration: MapCalibration
|
|
gpsCalibrationOrigin: LonLatPoint
|
|
osmReferenceEnabled: boolean
|
|
overlayOpacity: number
|
|
}
|
|
|
|
export type MapRendererStats = TileStoreStats
|
|
|
|
export interface MapRenderer {
|
|
attachCanvas(canvasNode: any, width: number, height: number, dpr: number): void
|
|
updateScene(scene: MapScene): void
|
|
setAnimationPaused(paused: boolean): void
|
|
destroy(): void
|
|
}
|
|
|
|
export function buildCamera(scene: MapScene): CameraState {
|
|
return {
|
|
centerWorldX: scene.centerTileX + 0.5,
|
|
centerWorldY: scene.centerTileY + 0.5,
|
|
viewportWidth: scene.viewportWidth,
|
|
viewportHeight: scene.viewportHeight,
|
|
visibleColumns: scene.visibleColumns,
|
|
translateX: scene.translateX,
|
|
translateY: scene.translateY,
|
|
rotationRad: scene.rotationRad,
|
|
}
|
|
}
|