import { type LonLatPoint } from '../../utils/projection' import { type GameAudioConfig } from '../audio/audioConfig' import { type H5ExperiencePresentation } from '../experience/h5Experience' export type GameMode = 'classic-sequential' | 'score-o' export type GameControlKind = 'start' | 'control' | 'finish' export type PunchPolicyType = 'enter' | 'enter-confirm' export interface GameContentExperienceConfig { type: 'native' | 'h5' url: string | null bridge: string fallback: 'native' presentation: H5ExperiencePresentation } export interface GameContentExperienceConfigOverride { type?: 'native' | 'h5' url?: string bridge?: string fallback?: 'native' presentation?: H5ExperiencePresentation } export interface GameControlDisplayContent { template: 'minimal' | 'story' | 'focus' title: string body: string autoPopup: boolean once: boolean priority: number clickTitle: string | null clickBody: string | null contentExperience: GameContentExperienceConfig | null clickExperience: GameContentExperienceConfig | null } export interface GameControlDisplayContentOverride { template?: 'minimal' | 'story' | 'focus' title?: string body?: string autoPopup?: boolean once?: boolean priority?: number clickTitle?: string clickBody?: string contentExperience?: GameContentExperienceConfigOverride clickExperience?: GameContentExperienceConfigOverride } export interface GameControl { id: string code: string label: string kind: GameControlKind point: LonLatPoint sequence: number | null score: number | null displayContent: GameControlDisplayContent | null } export interface GameDefinition { id: string mode: GameMode title: string controlRadiusMeters: number punchRadiusMeters: number punchPolicy: PunchPolicyType requiresFocusSelection: boolean skipEnabled: boolean skipRadiusMeters: number skipRequiresConfirm: boolean controls: GameControl[] autoFinishOnLastControl: boolean audioConfig?: GameAudioConfig }