mapRenderer.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { type CameraState } from '../camera/camera'
  2. import { type TileStoreStats } from '../tile/tileStore'
  3. import { type LonLatPoint, type MapCalibration } from '../../utils/projection'
  4. import { type TileZoomBounds } from '../../utils/remoteMapConfig'
  5. import { type OrienteeringCourseData } from '../../utils/orienteeringCourse'
  6. export interface MapScene {
  7. tileSource: string
  8. osmTileSource: string
  9. zoom: number
  10. centerTileX: number
  11. centerTileY: number
  12. exactCenterWorldX: number
  13. exactCenterWorldY: number
  14. tileBoundsByZoom: Record<number, TileZoomBounds> | null
  15. viewportWidth: number
  16. viewportHeight: number
  17. visibleColumns: number
  18. overdraw: number
  19. translateX: number
  20. translateY: number
  21. rotationRad: number
  22. previewScale: number
  23. previewOriginX: number
  24. previewOriginY: number
  25. track: LonLatPoint[]
  26. gpsPoint: LonLatPoint | null
  27. gpsCalibration: MapCalibration
  28. gpsCalibrationOrigin: LonLatPoint
  29. course: OrienteeringCourseData | null
  30. cpRadiusMeters: number
  31. controlVisualMode: 'single-target' | 'multi-target'
  32. showCourseLegs: boolean
  33. guidanceLegAnimationEnabled: boolean
  34. focusableControlIds: string[]
  35. focusedControlId: string | null
  36. focusedControlSequences: number[]
  37. activeControlSequences: number[]
  38. activeStart: boolean
  39. completedStart: boolean
  40. activeFinish: boolean
  41. focusedFinish: boolean
  42. completedFinish: boolean
  43. revealFullCourse: boolean
  44. activeLegIndices: number[]
  45. completedLegIndices: number[]
  46. completedControlSequences: number[]
  47. skippedControlIds: string[]
  48. skippedControlSequences: number[]
  49. osmReferenceEnabled: boolean
  50. overlayOpacity: number
  51. }
  52. export type MapRendererStats = TileStoreStats
  53. export interface MapRenderer {
  54. attachCanvas(canvasNode: any, width: number, height: number, dpr: number, labelCanvasNode?: any): void
  55. updateScene(scene: MapScene): void
  56. setAnimationPaused(paused: boolean): void
  57. destroy(): void
  58. }
  59. export function buildCamera(scene: MapScene): CameraState {
  60. return {
  61. centerWorldX: scene.centerTileX + 0.5,
  62. centerWorldY: scene.centerTileY + 0.5,
  63. viewportWidth: scene.viewportWidth,
  64. viewportHeight: scene.viewportHeight,
  65. visibleColumns: scene.visibleColumns,
  66. translateX: scene.translateX,
  67. translateY: scene.translateY,
  68. rotationRad: scene.rotationRad,
  69. }
  70. }