| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import { type GameDefinition } from '../core/gameDefinition'
- import { type GameSessionState } from '../core/gameSessionState'
- import { type TelemetryPresentation } from '../telemetry/telemetryPresentation'
- export interface ResultSummaryRow {
- label: string
- value: string
- }
- export interface ResultSummarySnapshot {
- title: string
- subtitle: string
- heroLabel: string
- heroValue: string
- rows: ResultSummaryRow[]
- }
- function resolveTitle(definition: GameDefinition | null, mapTitle: string): string {
- if (mapTitle) {
- return mapTitle
- }
- if (definition && definition.title) {
- return definition.title
- }
- return '本局结果'
- }
- function buildHeroValue(definition: GameDefinition | null, sessionState: GameSessionState, telemetryPresentation: TelemetryPresentation): string {
- if (definition && definition.mode === 'score-o') {
- return `${sessionState.score}`
- }
- return telemetryPresentation.timerText
- }
- function buildHeroLabel(definition: GameDefinition | null): string {
- return definition && definition.mode === 'score-o' ? '本局得分' : '本局用时'
- }
- function buildSubtitle(sessionState: GameSessionState): string {
- if (sessionState.status === 'finished') {
- return '本局已完成'
- }
- if (sessionState.status === 'failed') {
- return '本局已结束'
- }
- return '对局摘要'
- }
- export function buildResultSummarySnapshot(
- definition: GameDefinition | null,
- sessionState: GameSessionState | null,
- telemetryPresentation: TelemetryPresentation,
- mapTitle: string,
- ): ResultSummarySnapshot {
- const resolvedSessionState: GameSessionState = sessionState || {
- status: 'idle',
- startedAt: null,
- endedAt: null,
- completedControlIds: [],
- skippedControlIds: [],
- currentTargetControlId: null,
- inRangeControlId: null,
- score: 0,
- guidanceState: 'searching',
- modeState: null,
- }
- const skippedCount = resolvedSessionState.skippedControlIds.length
- const totalControlCount = definition
- ? definition.controls.filter((control) => control.kind === 'control').length
- : 0
- const averageHeartRateText = telemetryPresentation.heartRateValueText !== '--'
- ? `${telemetryPresentation.heartRateValueText} ${telemetryPresentation.heartRateUnitText || 'bpm'}`
- : '--'
- return {
- title: resolveTitle(definition, mapTitle),
- subtitle: buildSubtitle(resolvedSessionState),
- heroLabel: buildHeroLabel(definition),
- heroValue: buildHeroValue(definition, resolvedSessionState, telemetryPresentation),
- rows: [
- { label: '状态', value: resolvedSessionState.status === 'finished' ? '完成' : (resolvedSessionState.status === 'failed' ? '结束' : '进行中') },
- { label: '完成点数', value: totalControlCount > 0 ? `${resolvedSessionState.completedControlIds.length}/${totalControlCount}` : `${resolvedSessionState.completedControlIds.length}` },
- { label: '跳过点数', value: `${skippedCount}` },
- { label: '累计里程', value: telemetryPresentation.mileageText },
- { label: '平均速度', value: `${telemetryPresentation.averageSpeedValueText}${telemetryPresentation.averageSpeedUnitText}` },
- { label: '当前得分', value: `${resolvedSessionState.score}` },
- { label: '累计消耗', value: `${telemetryPresentation.caloriesValueText}${telemetryPresentation.caloriesUnitText}` },
- { label: '平均心率', value: averageHeartRateText },
- ],
- }
- }
|