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

56 lines
1.5 KiB
TypeScript

import { type GameMode } from './gameDefinition'
export interface GameModeDefaults {
sessionCloseAfterMs: number
sessionCloseWarningMs: number
minCompletedControlsBeforeFinish: number
requiresFocusSelection: boolean
skipEnabled: boolean
skipRequiresConfirm: boolean
autoFinishOnLastControl: boolean
defaultControlScore: number
}
const GAME_MODE_DEFAULTS: Record<GameMode, GameModeDefaults> = {
'classic-sequential': {
sessionCloseAfterMs: 2 * 60 * 60 * 1000,
sessionCloseWarningMs: 10 * 60 * 1000,
minCompletedControlsBeforeFinish: 0,
requiresFocusSelection: false,
skipEnabled: true,
skipRequiresConfirm: true,
autoFinishOnLastControl: false,
defaultControlScore: 1,
},
'score-o': {
sessionCloseAfterMs: 2 * 60 * 60 * 1000,
sessionCloseWarningMs: 10 * 60 * 1000,
minCompletedControlsBeforeFinish: 1,
requiresFocusSelection: false,
skipEnabled: false,
skipRequiresConfirm: true,
autoFinishOnLastControl: false,
defaultControlScore: 10,
},
}
export function getGameModeDefaults(mode: GameMode): GameModeDefaults {
return GAME_MODE_DEFAULTS[mode]
}
export function getDefaultSkipRadiusMeters(mode: GameMode, punchRadiusMeters: number): number {
if (mode === 'classic-sequential') {
return punchRadiusMeters * 2
}
return 30
}
export function resolveDefaultControlScore(mode: GameMode, configuredDefaultScore: number | null): number {
if (typeof configuredDefaultScore === 'number') {
return configuredDefaultScore
}
return getGameModeDefaults(mode).defaultControlScore
}