Files
cmr-mini/miniprogram/game/core/gameDefinition.ts

77 lines
2.0 KiB
TypeScript

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
}