gameDefinition.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { type LonLatPoint } from '../../utils/projection'
  2. import { type GameAudioConfig } from '../audio/audioConfig'
  3. import { type H5ExperiencePresentation } from '../experience/h5Experience'
  4. export type GameMode = 'classic-sequential' | 'score-o'
  5. export type GameControlKind = 'start' | 'control' | 'finish'
  6. export type PunchPolicyType = 'enter' | 'enter-confirm'
  7. export interface GameContentExperienceConfig {
  8. type: 'native' | 'h5'
  9. url: string | null
  10. bridge: string
  11. fallback: 'native'
  12. presentation: H5ExperiencePresentation
  13. }
  14. export interface GameContentExperienceConfigOverride {
  15. type?: 'native' | 'h5'
  16. url?: string
  17. bridge?: string
  18. fallback?: 'native'
  19. presentation?: H5ExperiencePresentation
  20. }
  21. export interface GameControlDisplayContent {
  22. template: 'minimal' | 'story' | 'focus'
  23. title: string
  24. body: string
  25. autoPopup: boolean
  26. once: boolean
  27. priority: number
  28. clickTitle: string | null
  29. clickBody: string | null
  30. contentExperience: GameContentExperienceConfig | null
  31. clickExperience: GameContentExperienceConfig | null
  32. }
  33. export interface GameControlDisplayContentOverride {
  34. template?: 'minimal' | 'story' | 'focus'
  35. title?: string
  36. body?: string
  37. autoPopup?: boolean
  38. once?: boolean
  39. priority?: number
  40. clickTitle?: string
  41. clickBody?: string
  42. contentExperience?: GameContentExperienceConfigOverride
  43. clickExperience?: GameContentExperienceConfigOverride
  44. }
  45. export interface GameControl {
  46. id: string
  47. code: string
  48. label: string
  49. kind: GameControlKind
  50. point: LonLatPoint
  51. sequence: number | null
  52. score: number | null
  53. displayContent: GameControlDisplayContent | null
  54. }
  55. export interface GameDefinition {
  56. id: string
  57. mode: GameMode
  58. title: string
  59. controlRadiusMeters: number
  60. punchRadiusMeters: number
  61. punchPolicy: PunchPolicyType
  62. requiresFocusSelection: boolean
  63. skipEnabled: boolean
  64. skipRadiusMeters: number
  65. skipRequiresConfirm: boolean
  66. controls: GameControl[]
  67. autoFinishOnLastControl: boolean
  68. audioConfig?: GameAudioConfig
  69. }