60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { type LonLatPoint } from '../../utils/projection'
|
|
import { type GameSessionStatus } from '../core/gameSessionState'
|
|
|
|
export type DevicePose = 'upright' | 'tilted' | 'flat'
|
|
export type HeadingConfidence = 'low' | 'medium' | 'high'
|
|
|
|
export interface TelemetryState {
|
|
sessionStatus: GameSessionStatus
|
|
sessionStartedAt: number | null
|
|
sessionEndedAt: number | null
|
|
elapsedMs: number
|
|
distanceMeters: number
|
|
currentSpeedKmh: number | null
|
|
averageSpeedKmh: number | null
|
|
distanceToTargetMeters: number | null
|
|
targetControlId: string | null
|
|
targetPoint: LonLatPoint | null
|
|
lastGpsPoint: LonLatPoint | null
|
|
lastGpsAt: number | null
|
|
lastGpsAccuracyMeters: number | null
|
|
accelerometer: { x: number; y: number; z: number } | null
|
|
accelerometerUpdatedAt: number | null
|
|
accelerometerSampleCount: number
|
|
gyroscope: { x: number; y: number; z: number } | null
|
|
deviceMotion: { alpha: number | null; beta: number | null; gamma: number | null } | null
|
|
deviceHeadingDeg: number | null
|
|
devicePose: DevicePose
|
|
headingConfidence: HeadingConfidence
|
|
heartRateBpm: number | null
|
|
caloriesKcal: number | null
|
|
calorieTrackingAt: number | null
|
|
}
|
|
|
|
export const EMPTY_TELEMETRY_STATE: TelemetryState = {
|
|
sessionStatus: 'idle',
|
|
sessionStartedAt: null,
|
|
sessionEndedAt: null,
|
|
elapsedMs: 0,
|
|
distanceMeters: 0,
|
|
currentSpeedKmh: null,
|
|
averageSpeedKmh: null,
|
|
distanceToTargetMeters: null,
|
|
targetControlId: null,
|
|
targetPoint: null,
|
|
lastGpsPoint: null,
|
|
lastGpsAt: null,
|
|
lastGpsAccuracyMeters: null,
|
|
accelerometer: null,
|
|
accelerometerUpdatedAt: null,
|
|
accelerometerSampleCount: 0,
|
|
gyroscope: null,
|
|
deviceMotion: null,
|
|
deviceHeadingDeg: null,
|
|
devicePose: 'upright',
|
|
headingConfidence: 'low',
|
|
heartRateBpm: null,
|
|
caloriesKcal: null,
|
|
calorieTrackingAt: null,
|
|
}
|