telemetryState.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { type LonLatPoint } from '../../utils/projection'
  2. import { type GameSessionStatus } from '../core/gameSessionState'
  3. export type DevicePose = 'upright' | 'tilted' | 'flat'
  4. export type HeadingConfidence = 'low' | 'medium' | 'high'
  5. export interface TelemetryState {
  6. sessionStatus: GameSessionStatus
  7. sessionStartedAt: number | null
  8. sessionEndedAt: number | null
  9. elapsedMs: number
  10. distanceMeters: number
  11. currentSpeedKmh: number | null
  12. averageSpeedKmh: number | null
  13. distanceToTargetMeters: number | null
  14. targetControlId: string | null
  15. targetPoint: LonLatPoint | null
  16. lastGpsPoint: LonLatPoint | null
  17. lastGpsAt: number | null
  18. lastGpsAccuracyMeters: number | null
  19. accelerometer: { x: number; y: number; z: number } | null
  20. accelerometerUpdatedAt: number | null
  21. accelerometerSampleCount: number
  22. gyroscope: { x: number; y: number; z: number } | null
  23. deviceMotion: { alpha: number | null; beta: number | null; gamma: number | null } | null
  24. deviceHeadingDeg: number | null
  25. devicePose: DevicePose
  26. headingConfidence: HeadingConfidence
  27. heartRateBpm: number | null
  28. caloriesKcal: number | null
  29. calorieTrackingAt: number | null
  30. }
  31. export const EMPTY_TELEMETRY_STATE: TelemetryState = {
  32. sessionStatus: 'idle',
  33. sessionStartedAt: null,
  34. sessionEndedAt: null,
  35. elapsedMs: 0,
  36. distanceMeters: 0,
  37. currentSpeedKmh: null,
  38. averageSpeedKmh: null,
  39. distanceToTargetMeters: null,
  40. targetControlId: null,
  41. targetPoint: null,
  42. lastGpsPoint: null,
  43. lastGpsAt: null,
  44. lastGpsAccuracyMeters: null,
  45. accelerometer: null,
  46. accelerometerUpdatedAt: null,
  47. accelerometerSampleCount: 0,
  48. gyroscope: null,
  49. deviceMotion: null,
  50. deviceHeadingDeg: null,
  51. devicePose: 'upright',
  52. headingConfidence: 'low',
  53. heartRateBpm: null,
  54. caloriesKcal: null,
  55. calorieTrackingAt: null,
  56. }