完善文创展示控制与结果层基础
This commit is contained in:
@@ -2,6 +2,7 @@ import {
|
||||
MapEngine,
|
||||
type MapEngineGameInfoRow,
|
||||
type MapEngineGameInfoSnapshot,
|
||||
type MapEngineResultSnapshot,
|
||||
type MapEngineStageRect,
|
||||
type MapEngineViewState,
|
||||
} from '../../engine/map/mapEngine'
|
||||
@@ -64,6 +65,7 @@ type StoredUserSettings = {
|
||||
type MapPageData = MapEngineViewState & {
|
||||
showDebugPanel: boolean
|
||||
showGameInfoPanel: boolean
|
||||
showResultScene: boolean
|
||||
showSystemSettingsPanel: boolean
|
||||
showCenterScaleRuler: boolean
|
||||
showPunchHintBanner: boolean
|
||||
@@ -78,6 +80,11 @@ type MapPageData = MapEngineViewState & {
|
||||
gameInfoSubtitle: string
|
||||
gameInfoLocalRows: MapEngineGameInfoRow[]
|
||||
gameInfoGlobalRows: MapEngineGameInfoRow[]
|
||||
resultSceneTitle: string
|
||||
resultSceneSubtitle: string
|
||||
resultSceneHeroLabel: string
|
||||
resultSceneHeroValue: string
|
||||
resultSceneRows: MapEngineGameInfoRow[]
|
||||
panelTimerText: string
|
||||
panelMileageText: string
|
||||
panelDistanceValueText: string
|
||||
@@ -121,7 +128,7 @@ type MapPageData = MapEngineViewState & {
|
||||
showRightButtonGroups: boolean
|
||||
showBottomDebugButton: boolean
|
||||
}
|
||||
const INTERNAL_BUILD_VERSION = 'map-build-283'
|
||||
const INTERNAL_BUILD_VERSION = 'map-build-291'
|
||||
const USER_SETTINGS_STORAGE_KEY = 'cmr_user_settings_v1'
|
||||
const CLASSIC_REMOTE_GAME_CONFIG_URL = 'https://oss-mbh5.colormaprun.com/gotomars/event/classic-sequential.json'
|
||||
const SCORE_O_REMOTE_GAME_CONFIG_URL = 'https://oss-mbh5.colormaprun.com/gotomars/event/score-o.json'
|
||||
@@ -494,7 +501,7 @@ function buildSideButtonState(data: Pick<MapPageData, 'sideButtonMode' | 'showGa
|
||||
: data.gpsLockEnabled
|
||||
? 'active'
|
||||
: 'default'
|
||||
const sideButton4State: SideActionButtonState = data.gameSessionStatus === 'idle' ? 'default' : 'active'
|
||||
const sideButton4State: SideActionButtonState = data.gameSessionStatus === 'running' ? 'active' : 'muted'
|
||||
const sideButton11State: SideActionButtonState = data.showGameInfoPanel ? 'active' : 'default'
|
||||
const sideButton12State: SideActionButtonState = data.showSystemSettingsPanel ? 'active' : 'default'
|
||||
const sideButton13State: SideActionButtonState = data.showCenterScaleRuler ? 'active' : 'default'
|
||||
@@ -690,10 +697,21 @@ function buildEmptyGameInfoSnapshot(): MapEngineGameInfoSnapshot {
|
||||
}
|
||||
}
|
||||
|
||||
function buildEmptyResultSceneSnapshot(): MapEngineResultSnapshot {
|
||||
return {
|
||||
title: '本局结果',
|
||||
subtitle: '未开始',
|
||||
heroLabel: '本局用时',
|
||||
heroValue: '--',
|
||||
rows: [],
|
||||
}
|
||||
}
|
||||
|
||||
Page({
|
||||
data: {
|
||||
showDebugPanel: false,
|
||||
showGameInfoPanel: false,
|
||||
showResultScene: false,
|
||||
showSystemSettingsPanel: false,
|
||||
showCenterScaleRuler: false,
|
||||
statusBarHeight: 0,
|
||||
@@ -714,6 +732,11 @@ Page({
|
||||
gameInfoSubtitle: '未开始',
|
||||
gameInfoLocalRows: [],
|
||||
gameInfoGlobalRows: buildEmptyGameInfoSnapshot().globalRows,
|
||||
resultSceneTitle: '本局结果',
|
||||
resultSceneSubtitle: '未开始',
|
||||
resultSceneHeroLabel: '本局用时',
|
||||
resultSceneHeroValue: '--',
|
||||
resultSceneRows: buildEmptyResultSceneSnapshot().rows,
|
||||
panelTimerText: '00:00:00',
|
||||
panelMileageText: '0m',
|
||||
panelActionTagText: '目标',
|
||||
@@ -942,6 +965,22 @@ Page({
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof nextPatch.gameSessionStatus === 'string') {
|
||||
if (
|
||||
nextPatch.gameSessionStatus !== this.data.gameSessionStatus
|
||||
&& (nextPatch.gameSessionStatus === 'finished' || nextPatch.gameSessionStatus === 'failed')
|
||||
) {
|
||||
this.syncResultSceneSnapshot()
|
||||
nextData.showResultScene = true
|
||||
nextData.showDebugPanel = false
|
||||
nextData.showGameInfoPanel = false
|
||||
nextData.showSystemSettingsPanel = false
|
||||
clearGameInfoPanelSyncTimer()
|
||||
} else if (nextPatch.gameSessionStatus === 'running' || nextPatch.gameSessionStatus === 'idle') {
|
||||
nextData.showResultScene = false
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(nextData).length || Object.keys(derivedPatch).length) {
|
||||
this.setData({
|
||||
...nextData,
|
||||
@@ -1341,6 +1380,16 @@ Page({
|
||||
}
|
||||
},
|
||||
|
||||
handleConnectAllMockSources() {
|
||||
if (!mapEngine) {
|
||||
return
|
||||
}
|
||||
mapEngine.handleConnectMockLocationBridge()
|
||||
mapEngine.handleSetMockLocationMode()
|
||||
mapEngine.handleSetMockHeartRateMode()
|
||||
mapEngine.handleConnectMockHeartRateBridge()
|
||||
},
|
||||
|
||||
handleMockBridgeUrlInput(event: WechatMiniprogram.Input) {
|
||||
this.setData({
|
||||
mockBridgeUrlDraft: event.detail.value,
|
||||
@@ -1485,7 +1534,7 @@ Page({
|
||||
},
|
||||
|
||||
handleForceExitGame() {
|
||||
if (!mapEngine || this.data.gameSessionStatus === 'idle') {
|
||||
if (!mapEngine || this.data.gameSessionStatus !== 'running') {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1555,6 +1604,21 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
syncResultSceneSnapshot() {
|
||||
if (!mapEngine) {
|
||||
return
|
||||
}
|
||||
|
||||
const snapshot = mapEngine.getResultSceneSnapshot()
|
||||
this.setData({
|
||||
resultSceneTitle: snapshot.title,
|
||||
resultSceneSubtitle: snapshot.subtitle,
|
||||
resultSceneHeroLabel: snapshot.heroLabel,
|
||||
resultSceneHeroValue: snapshot.heroValue,
|
||||
resultSceneRows: snapshot.rows,
|
||||
})
|
||||
},
|
||||
|
||||
scheduleGameInfoPanelSnapshotSync() {
|
||||
if (!this.data.showGameInfoPanel) {
|
||||
clearGameInfoPanelSyncTimer()
|
||||
@@ -1614,6 +1678,27 @@ Page({
|
||||
|
||||
handleGameInfoPanelTap() {},
|
||||
|
||||
handleResultSceneTap() {},
|
||||
|
||||
handleCloseResultScene() {
|
||||
this.setData({
|
||||
showResultScene: false,
|
||||
})
|
||||
},
|
||||
|
||||
handleRestartFromResult() {
|
||||
if (!mapEngine) {
|
||||
return
|
||||
}
|
||||
this.setData({
|
||||
showResultScene: false,
|
||||
}, () => {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleStartGame()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
handleOpenSystemSettingsPanel() {
|
||||
clearGameInfoPanelSyncTimer()
|
||||
this.setData({
|
||||
|
||||
Reference in New Issue
Block a user