gameDefinition.ts 2.3 KB

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