mapRenderer.ts 2.4 KB

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