75 lines
2.2 KiB
TypeScript
75 lines
2.2 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'
|
|
import { type OrienteeringCourseData } from '../../utils/orienteeringCourse'
|
|
|
|
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
|
|
course: OrienteeringCourseData | null
|
|
cpRadiusMeters: number
|
|
controlVisualMode: 'single-target' | 'multi-target'
|
|
showCourseLegs: boolean
|
|
guidanceLegAnimationEnabled: boolean
|
|
focusableControlIds: string[]
|
|
focusedControlId: string | null
|
|
focusedControlSequences: number[]
|
|
activeControlSequences: number[]
|
|
activeStart: boolean
|
|
completedStart: boolean
|
|
activeFinish: boolean
|
|
focusedFinish: boolean
|
|
completedFinish: boolean
|
|
revealFullCourse: boolean
|
|
activeLegIndices: number[]
|
|
completedLegIndices: number[]
|
|
completedControlSequences: number[]
|
|
osmReferenceEnabled: boolean
|
|
overlayOpacity: number
|
|
}
|
|
|
|
export type MapRendererStats = TileStoreStats
|
|
|
|
export interface MapRenderer {
|
|
attachCanvas(canvasNode: any, width: number, height: number, dpr: number, labelCanvasNode?: any): 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,
|
|
}
|
|
}
|
|
|
|
|