Add config-driven game host updates

This commit is contained in:
2026-03-25 13:58:51 +08:00
parent f0ced54805
commit d1cc6cc473
28 changed files with 3247 additions and 105 deletions

View File

@@ -17,6 +17,7 @@ export interface GameControl {
kind: GameControlKind
point: LonLatPoint
sequence: number | null
score: number | null
displayContent: GameControlDisplayContent | null
}
@@ -27,6 +28,10 @@ export interface GameDefinition {
controlRadiusMeters: number
punchRadiusMeters: number
punchPolicy: PunchPolicyType
requiresFocusSelection: boolean
skipEnabled: boolean
skipRadiusMeters: number
skipRequiresConfirm: boolean
controls: GameControl[]
autoFinishOnLastControl: boolean
audioConfig?: GameAudioConfig

View File

@@ -2,5 +2,6 @@ export type GameEvent =
| { type: 'session_started'; at: number }
| { type: 'gps_updated'; at: number; lon: number; lat: number; accuracyMeters: number | null }
| { type: 'punch_requested'; at: number }
| { type: 'skip_requested'; at: number; lon: number | null; lat: number | null }
| { type: 'control_focused'; at: number; controlId: string | null }
| { type: 'session_ended'; at: number }

View File

@@ -65,6 +65,7 @@ export class GameRuntime {
startedAt: null,
endedAt: null,
completedControlIds: [],
skippedControlIds: [],
currentTargetControlId: null,
inRangeControlId: null,
score: 0,

View File

@@ -7,6 +7,7 @@ export interface GameSessionState {
startedAt: number | null
endedAt: number | null
completedControlIds: string[]
skippedControlIds: string[]
currentTargetControlId: string | null
inRangeControlId: string | null
score: number