Improve map lock and smart heading behavior

This commit is contained in:
2026-03-25 14:56:28 +08:00
parent d1cc6cc473
commit a19342d61f
8 changed files with 300 additions and 62 deletions

View File

@@ -42,6 +42,7 @@ type MapPageData = MapEngineViewState & {
compassLabels: CompassLabelData[]
sideButtonMode: SideButtonMode
sideToggleIconSrc: string
sideButton2Class: string
sideButton4Class: string
sideButton11Class: string
sideButton16Class: string
@@ -49,7 +50,7 @@ type MapPageData = MapEngineViewState & {
showRightButtonGroups: boolean
showBottomDebugButton: boolean
}
const INTERNAL_BUILD_VERSION = 'map-build-207'
const INTERNAL_BUILD_VERSION = 'map-build-213'
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'
let mapEngine: MapEngine | null = null
@@ -131,13 +132,19 @@ function getSideActionButtonClass(state: SideActionButtonState): string {
return 'map-side-button map-side-button--default'
}
function buildSideButtonState(data: Pick<MapPageData, 'sideButtonMode' | 'showGameInfoPanel' | 'skipButtonEnabled' | 'gameSessionStatus'>) {
function buildSideButtonState(data: Pick<MapPageData, 'sideButtonMode' | 'showGameInfoPanel' | 'skipButtonEnabled' | 'gameSessionStatus' | 'gpsLockEnabled' | 'gpsLockAvailable'>) {
const sideButton2State: SideActionButtonState = !data.gpsLockAvailable
? 'muted'
: data.gpsLockEnabled
? 'active'
: 'default'
const sideButton4State: SideActionButtonState = data.gameSessionStatus === 'idle' ? 'default' : 'active'
const sideButton11State: SideActionButtonState = data.showGameInfoPanel ? 'active' : 'default'
const sideButton16State: SideActionButtonState = data.skipButtonEnabled ? 'default' : 'muted'
return {
sideToggleIconSrc: getSideToggleIconSrc(data.sideButtonMode),
sideButton2Class: getSideActionButtonClass(sideButton2State),
sideButton4Class: getSideActionButtonClass(sideButton4State),
sideButton11Class: getSideActionButtonClass(sideButton11State),
sideButton16Class: getSideActionButtonClass(sideButton16State),
@@ -180,6 +187,8 @@ Page({
panelProgressText: '0/0',
gameSessionStatus: 'idle',
gameModeText: '顺序赛',
gpsLockEnabled: false,
gpsLockAvailable: false,
locationSourceMode: 'real',
locationSourceText: '真实定位',
mockBridgeConnected: false,
@@ -239,6 +248,8 @@ Page({
showGameInfoPanel: false,
skipButtonEnabled: false,
gameSessionStatus: 'idle',
gpsLockEnabled: false,
gpsLockAvailable: false,
}),
} as unknown as MapPageData,
@@ -306,6 +317,8 @@ Page({
panelProgressText: '0/0',
gameSessionStatus: 'idle',
gameModeText: '顺序赛',
gpsLockEnabled: false,
gpsLockAvailable: false,
locationSourceMode: 'real',
locationSourceText: '真实定位',
mockBridgeConnected: false,
@@ -363,6 +376,8 @@ Page({
showGameInfoPanel: false,
skipButtonEnabled: false,
gameSessionStatus: 'idle',
gpsLockEnabled: false,
gpsLockAvailable: false,
}),
})
},
@@ -723,9 +738,21 @@ Page({
},
handleForceExitGame() {
if (mapEngine) {
mapEngine.handleForceExitGame()
if (!mapEngine || this.data.gameSessionStatus === 'idle') {
return
}
wx.showModal({
title: '确认退出',
content: '确认强制结束当前对局并返回开始前状态?',
confirmText: '确认退出',
cancelText: '取消',
success: (result) => {
if (result.confirm && mapEngine) {
mapEngine.handleForceExitGame()
}
},
})
},
handleSkipAction() {
@@ -781,6 +808,8 @@ Page({
showGameInfoPanel: true,
skipButtonEnabled: this.data.skipButtonEnabled,
gameSessionStatus: this.data.gameSessionStatus,
gpsLockEnabled: this.data.gpsLockEnabled,
gpsLockAvailable: this.data.gpsLockAvailable,
}),
})
},
@@ -793,6 +822,8 @@ Page({
showGameInfoPanel: false,
skipButtonEnabled: this.data.skipButtonEnabled,
gameSessionStatus: this.data.gameSessionStatus,
gpsLockEnabled: this.data.gpsLockEnabled,
gpsLockAvailable: this.data.gpsLockAvailable,
}),
})
},
@@ -832,9 +863,16 @@ Page({
showGameInfoPanel: this.data.showGameInfoPanel,
skipButtonEnabled: this.data.skipButtonEnabled,
gameSessionStatus: this.data.gameSessionStatus,
gpsLockEnabled: this.data.gpsLockEnabled,
gpsLockAvailable: this.data.gpsLockAvailable,
}),
})
},
handleToggleGpsLock() {
if (mapEngine) {
mapEngine.handleToggleGpsLock()
}
},
handleToggleMapRotateMode() {
if (!mapEngine) {
return
@@ -856,6 +894,8 @@ Page({
showGameInfoPanel: false,
skipButtonEnabled: this.data.skipButtonEnabled,
gameSessionStatus: this.data.gameSessionStatus,
gpsLockEnabled: this.data.gpsLockEnabled,
gpsLockAvailable: this.data.gpsLockAvailable,
}),
})
},
@@ -868,6 +908,8 @@ Page({
showGameInfoPanel: this.data.showGameInfoPanel,
skipButtonEnabled: this.data.skipButtonEnabled,
gameSessionStatus: this.data.gameSessionStatus,
gpsLockEnabled: this.data.gpsLockEnabled,
gpsLockAvailable: this.data.gpsLockAvailable,
}),
})
},