Improve heart rate device reconnect flow

This commit is contained in:
2026-03-24 17:17:29 +08:00
parent 71ad6c6535
commit 0ccf7daf50
8 changed files with 831 additions and 72 deletions

View File

@@ -31,9 +31,10 @@ type MapPageData = MapEngineViewState & {
showRightButtonGroups: boolean
showBottomDebugButton: boolean
}
const INTERNAL_BUILD_VERSION = 'map-build-175'
const INTERNAL_BUILD_VERSION = 'map-build-195'
const REMOTE_GAME_CONFIG_URL = 'https://oss-mbh5.colormaprun.com/wxmini/test/game.json'
let mapEngine: MapEngine | null = null
let stageCanvasAttached = false
function buildSideButtonVisibility(mode: SideButtonMode) {
return {
sideButtonMode: mode,
@@ -114,6 +115,8 @@ Page({
mockBridgeUrlDraft: 'wss://gs.gotomars.xyz/mock-gps',
mockCoordText: '--',
mockSpeedText: '--',
heartRateScanText: '未扫描',
heartRateDiscoveredDevices: [],
panelSpeedValueText: '0',
panelTelemetryTone: 'blue',
panelHeartRateZoneNameText: '--',
@@ -150,7 +153,7 @@ Page({
compassTicks: buildCompassTicks(),
compassLabels: buildCompassLabels(),
...buildSideButtonVisibility('left'),
} as MapPageData,
} as unknown as MapPageData,
onLoad() {
const systemInfo = wx.getSystemInfoSync()
@@ -239,15 +242,29 @@ Page({
},
onReady() {
stageCanvasAttached = false
this.measureStageAndCanvas()
this.loadMapConfigFromRemote()
},
onShow() {
if (mapEngine) {
mapEngine.handleAppShow()
}
},
onHide() {
if (mapEngine) {
mapEngine.handleAppHide()
}
},
onUnload() {
if (mapEngine) {
mapEngine.destroy()
mapEngine = null
}
stageCanvasAttached = false
},
loadMapConfigFromRemote() {
@@ -295,6 +312,10 @@ Page({
currentEngine.setStage(rect)
if (stageCanvasAttached) {
return
}
const canvasQuery = wx.createSelectorQuery().in(page)
canvasQuery.select('#mapCanvas').fields({ node: true, size: true })
canvasQuery.select('#routeLabelCanvas').fields({ node: true, size: true })
@@ -317,6 +338,7 @@ Page({
dpr,
labelCanvasRef && labelCanvasRef.node ? labelCanvasRef.node : undefined,
)
stageCanvasAttached = true
} catch (error) {
page.setData({
statusText: `WebGL 鍒濆鍖栧け璐?(${INTERNAL_BUILD_VERSION})`,
@@ -453,11 +475,23 @@ Page({
}
},
handleDisconnectHeartRate() {
if (mapEngine) {
mapEngine.handleDisconnectHeartRate()
}
},
handleDisconnectHeartRate() {
if (mapEngine) {
mapEngine.handleDisconnectHeartRate()
}
},
handleConnectHeartRateDevice(event: WechatMiniprogram.BaseEvent<{ deviceId?: string }>) {
if (mapEngine && event.currentTarget && event.currentTarget.dataset && event.currentTarget.dataset.deviceId) {
mapEngine.handleConnectHeartRateDevice(event.currentTarget.dataset.deviceId)
}
},
handleClearPreferredHeartRateDevice() {
if (mapEngine) {
mapEngine.handleClearPreferredHeartRateDevice()
}
},
handleDebugHeartRateBlue() {
if (mapEngine) {