Add mock heart rate simulator flow
This commit is contained in:
@@ -19,6 +19,7 @@ type MapPageData = MapEngineViewState & {
|
||||
topInsetHeight: number
|
||||
hudPanelIndex: number
|
||||
mockBridgeUrlDraft: string
|
||||
mockHeartRateBridgeUrlDraft: string
|
||||
panelTimerText: string
|
||||
panelMileageText: string
|
||||
panelDistanceValueText: string
|
||||
@@ -31,7 +32,7 @@ type MapPageData = MapEngineViewState & {
|
||||
showRightButtonGroups: boolean
|
||||
showBottomDebugButton: boolean
|
||||
}
|
||||
const INTERNAL_BUILD_VERSION = 'map-build-195'
|
||||
const INTERNAL_BUILD_VERSION = 'map-build-196'
|
||||
const REMOTE_GAME_CONFIG_URL = 'https://oss-mbh5.colormaprun.com/wxmini/test/game.json'
|
||||
let mapEngine: MapEngine | null = null
|
||||
let stageCanvasAttached = false
|
||||
@@ -115,6 +116,13 @@ Page({
|
||||
mockBridgeUrlDraft: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockCoordText: '--',
|
||||
mockSpeedText: '--',
|
||||
heartRateSourceMode: 'real',
|
||||
heartRateSourceText: '真实心率',
|
||||
mockHeartRateBridgeConnected: false,
|
||||
mockHeartRateBridgeStatusText: '未连接',
|
||||
mockHeartRateBridgeUrlText: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockHeartRateBridgeUrlDraft: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockHeartRateText: '--',
|
||||
heartRateScanText: '未扫描',
|
||||
heartRateDiscoveredDevices: [],
|
||||
panelSpeedValueText: '0',
|
||||
@@ -164,18 +172,25 @@ Page({
|
||||
mapEngine = new MapEngine(INTERNAL_BUILD_VERSION, {
|
||||
onData: (patch) => {
|
||||
const nextPatch = patch as Partial<MapPageData>
|
||||
const nextData: Partial<MapPageData> = {
|
||||
...nextPatch,
|
||||
}
|
||||
|
||||
if (
|
||||
typeof nextPatch.mockBridgeUrlText === 'string'
|
||||
&& this.data.mockBridgeUrlDraft === this.data.mockBridgeUrlText
|
||||
) {
|
||||
this.setData({
|
||||
...nextPatch,
|
||||
mockBridgeUrlDraft: nextPatch.mockBridgeUrlText,
|
||||
})
|
||||
return
|
||||
nextData.mockBridgeUrlDraft = nextPatch.mockBridgeUrlText
|
||||
}
|
||||
|
||||
this.setData(nextPatch)
|
||||
if (
|
||||
typeof nextPatch.mockHeartRateBridgeUrlText === 'string'
|
||||
&& this.data.mockHeartRateBridgeUrlDraft === this.data.mockHeartRateBridgeUrlText
|
||||
) {
|
||||
nextData.mockHeartRateBridgeUrlDraft = nextPatch.mockHeartRateBridgeUrlText
|
||||
}
|
||||
|
||||
this.setData(nextData)
|
||||
},
|
||||
})
|
||||
|
||||
@@ -202,6 +217,13 @@ Page({
|
||||
mockBridgeUrlDraft: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockCoordText: '--',
|
||||
mockSpeedText: '--',
|
||||
heartRateSourceMode: 'real',
|
||||
heartRateSourceText: '真实心率',
|
||||
mockHeartRateBridgeConnected: false,
|
||||
mockHeartRateBridgeStatusText: '未连接',
|
||||
mockHeartRateBridgeUrlText: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockHeartRateBridgeUrlDraft: 'wss://gs.gotomars.xyz/mock-gps',
|
||||
mockHeartRateText: '--',
|
||||
panelSpeedValueText: '0',
|
||||
panelTelemetryTone: 'blue',
|
||||
panelHeartRateZoneNameText: '--',
|
||||
@@ -469,6 +491,42 @@ Page({
|
||||
}
|
||||
},
|
||||
|
||||
handleSetRealHeartRateMode() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleSetRealHeartRateMode()
|
||||
}
|
||||
},
|
||||
|
||||
handleSetMockHeartRateMode() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleSetMockHeartRateMode()
|
||||
}
|
||||
},
|
||||
|
||||
handleMockHeartRateBridgeUrlInput(event: WechatMiniprogram.Input) {
|
||||
this.setData({
|
||||
mockHeartRateBridgeUrlDraft: event.detail.value,
|
||||
})
|
||||
},
|
||||
|
||||
handleSaveMockHeartRateBridgeUrl() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleSetMockHeartRateBridgeUrl(this.data.mockHeartRateBridgeUrlDraft)
|
||||
}
|
||||
},
|
||||
|
||||
handleConnectMockHeartRateBridge() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleConnectMockHeartRateBridge()
|
||||
}
|
||||
},
|
||||
|
||||
handleDisconnectMockHeartRateBridge() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleDisconnectMockHeartRateBridge()
|
||||
}
|
||||
},
|
||||
|
||||
handleConnectHeartRate() {
|
||||
if (mapEngine) {
|
||||
mapEngine.handleConnectHeartRate()
|
||||
|
||||
@@ -328,15 +328,23 @@
|
||||
<text class="info-panel__label">Heart Rate</text>
|
||||
<text class="info-panel__value">{{heartRateStatusText}}</text>
|
||||
</view>
|
||||
<view class="info-panel__row">
|
||||
<text class="info-panel__label">Heart Source</text>
|
||||
<text class="info-panel__value">{{heartRateSourceText}}</text>
|
||||
</view>
|
||||
<view class="info-panel__row info-panel__row--stack">
|
||||
<text class="info-panel__label">HR Device</text>
|
||||
<text class="info-panel__value">{{heartRateDeviceText}}</text>
|
||||
</view>
|
||||
<view class="info-panel__row">
|
||||
<view class="control-row">
|
||||
<view class="control-chip {{heartRateSourceMode === 'real' ? 'control-chip--active' : 'control-chip--secondary'}}" bindtap="handleSetRealHeartRateMode">真实心率</view>
|
||||
<view class="control-chip {{heartRateSourceMode === 'mock' ? 'control-chip--active' : 'control-chip--secondary'}}" bindtap="handleSetMockHeartRateMode">模拟心率</view>
|
||||
</view>
|
||||
<view class="info-panel__row" wx:if="{{heartRateSourceMode === 'real'}}">
|
||||
<text class="info-panel__label">HR Scan</text>
|
||||
<text class="info-panel__value">{{heartRateScanText}}</text>
|
||||
</view>
|
||||
<view class="debug-device-list" wx:if="{{heartRateDiscoveredDevices.length}}">
|
||||
<view class="debug-device-list" wx:if="{{heartRateSourceMode === 'real' && heartRateDiscoveredDevices.length}}">
|
||||
<view class="debug-device-card" wx:for="{{heartRateDiscoveredDevices}}" wx:key="deviceId">
|
||||
<view class="debug-device-card__main">
|
||||
<view class="debug-device-card__title-row">
|
||||
@@ -348,13 +356,37 @@
|
||||
<view class="debug-device-card__action {{item.connected ? 'debug-device-card__action--active' : ''}}" data-device-id="{{item.deviceId}}" bindtap="handleConnectHeartRateDevice">{{item.connected ? '已连接' : '连接'}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="control-row">
|
||||
<view class="control-row" wx:if="{{heartRateSourceMode === 'real'}}">
|
||||
<view class="control-chip {{heartRateConnected ? 'control-chip--active' : 'control-chip--secondary'}}" bindtap="handleConnectHeartRate">{{heartRateConnected ? '心率带已连接' : '连接心率带'}}</view>
|
||||
<view class="control-chip control-chip--secondary" bindtap="handleDisconnectHeartRate">断开心率带</view>
|
||||
</view>
|
||||
<view class="control-row">
|
||||
<view class="control-row" wx:if="{{heartRateSourceMode === 'real'}}">
|
||||
<view class="control-chip control-chip--secondary" bindtap="handleClearPreferredHeartRateDevice">清除首选</view>
|
||||
</view>
|
||||
<view class="info-panel__row info-panel__row--stack" wx:if="{{heartRateSourceMode === 'mock'}}">
|
||||
<text class="info-panel__label">Mock HR Bridge</text>
|
||||
<text class="info-panel__value">{{mockHeartRateBridgeStatusText}}</text>
|
||||
</view>
|
||||
<view class="info-panel__row info-panel__row--stack" wx:if="{{heartRateSourceMode === 'mock'}}">
|
||||
<text class="info-panel__label">Mock HR URL</text>
|
||||
<view class="debug-inline-stack">
|
||||
<input
|
||||
class="debug-input"
|
||||
value="{{mockHeartRateBridgeUrlDraft}}"
|
||||
placeholder="ws://192.168.x.x:17865/mock-gps"
|
||||
bindinput="handleMockHeartRateBridgeUrlInput"
|
||||
/>
|
||||
<view class="control-row control-row--compact">
|
||||
<view class="control-chip control-chip--secondary" bindtap="handleSaveMockHeartRateBridgeUrl">保存地址</view>
|
||||
<view class="control-chip {{mockHeartRateBridgeConnected ? 'control-chip--active' : 'control-chip--secondary'}}" bindtap="handleConnectMockHeartRateBridge">连接模拟心率源</view>
|
||||
<view class="control-chip control-chip--secondary" bindtap="handleDisconnectMockHeartRateBridge">断开模拟心率源</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="info-panel__row" wx:if="{{heartRateSourceMode === 'mock'}}">
|
||||
<text class="info-panel__label">Mock BPM</text>
|
||||
<text class="info-panel__value">{{mockHeartRateText}}</text>
|
||||
</view>
|
||||
<view class="info-panel__row">
|
||||
<text class="info-panel__label">Heading Mode</text>
|
||||
<text class="info-panel__value">{{orientationModeText}}</text>
|
||||
|
||||
Reference in New Issue
Block a user