Repository navigation
HUD Telemetry Cards
Telemetry Cards 是所有 HUD 可共用的中央遙測 cluster。它不是某個 style 的私有畫面,而是由 launcher host 初始化一次,再隨 canonical telemetry 更新。使用者操作請看 HUD Overlay 總覽;若要改卡片資料或版面,先閱讀 HUD Shared Core 的事件與單位規則。
flowchart TB
Host[hud_overlay/index.html] --> Mount[#teleCardsMount]
Mount --> Manager[TelemetryCardsManager]
Manager --> Template[template.js]
Manager --> Radar[g-radar.js]
Manager --> Corners[corner-card.js]
Manager --> Pedal[pedal-wave.js]
Manager --> Power[power-torque.js]
Manager --> Map[live-map.js]
Manager --> Utils[utils.js]
Frame[hud:frame] --> Manager
Config[hud:config + elements] --> Manager
入口 shared/telemetry-cards.js 重新 export manager、template、各 renderer 和 utils,並將 singleton 掛到 window.TelemetryCardsManager。launcher 會在 host 的 #teleCardsMount 初始化;多數 HUD 只需要讓 host 顯示/隱藏卡片,不要在 iframe 再建立第二份 cluster。
只有完全獨立的 HUD 頁面需要自己的 cards 時,才建立掛載點並使用:
import { createTelemetryCardsManager } from '../shared/telemetry-cards/manager.js';
var manager = createTelemetryCardsManager();
manager.init(document.getElementById('teleCardsMount'));
manager.update(data, config);
// 切換/關閉頁面時
manager.destroy();| 卡片 | 顯示內容 | 主要輸入 | 實作方式 |
|---|---|---|---|
| G-Force radar | 橫向/縱向 G、車輛動態點、歷史軌跡與 marker |
accel_x、accel_y
|
中央 Canvas/DOM 混合 |
| 四角 cards | FL/FR/RL/RR 懸吊行程、歷史波形、四輪 slip angle/ratio、胎溫 |
susp_*、slip_*、slip_angle_*、TireTemp
|
每輪子卡片、Canvas wave/radar、溫度色階 |
| Pedal wave | 油門與煞車隨時間的波形 |
throttle、brake
|
edge chart Canvas,top/bottom 可換位 |
| Power/Torque | 馬力、扭力與 RPM 歷史曲線 |
power、torque、rpm
|
edge chart Canvas,top/bottom 可換位 |
| Live Map | 玩家位置、移動方向、航向、道路背景、POI |
pos_x、pos_z、heading_deg
|
Canvas + live_map_bg.png + POI JSON |
四角卡的顯示順序固定是 FL、FR、RL、RR。懸吊與輪胎子區塊可以分開關閉;只關閉 slip 或 temp 時,外層 corner 仍可能保留其他可見子卡片。
元素 map 由 Overlay 控制頁保存,manager 將 master switch 與個別開關合併:
| Element | 影響 |
|---|---|
showTeleMaster |
所有共用 cards 的總開關 |
showTeleAttitude |
G-Force radar |
showTeleSuspension |
四角懸吊行程與波形 |
showTeleTires |
四角胎溫/輪胎相關卡片的總開關 |
showTeleTiresSlip |
四輪 slip 子卡片 |
showTeleTiresTemp |
四輪胎溫子卡片 |
showTelePedals |
油門/煞車波形 |
showPowerTorque |
馬力/扭力圖 |
showLiveMap |
Live Map |
showTeleCenterAnchor |
中央對齊框/anchor |
showTeleGridLines |
對齊輔助格線 |
showTeleSideBySideCharts |
踏板與 Power/Torque 並排 |
showTeleCornerEdgeSnap |
四角卡靠近螢幕邊緣的 anchor 模式 |
showTeleMaster 關閉時,子卡片不會繼續更新。新增 element 時要同步 config 型別、控制頁、manager visibility logic、文件和測試;只在模板新增 DOM 而沒有開關會造成設定表面上可用但實際無效。
| 設定 | 預設 | 作用 |
|---|---|---|
telemetryOpacity |
0.65 |
cluster 與 edge chart 的整體透明度;manager 也會保存到 localStorage |
telemetryCardFontScale |
1.0 |
共用文字,manager 會限制在 0.5 到 2.0
|
telemetryGRadarScale |
1.0 |
G-Force radar |
telemetryCornersScale |
1.0 |
四角 cards |
telemetryPedalScale |
1.0 |
非並排時的 pedal chart |
telemetryPowerTorqueScale |
1.0 |
非並排時的 Power/Torque chart |
telemetryMergedChartsScale |
1.0 |
並排 chart 的群組 |
telemetryLiveMapScale |
1.0 |
Live Map |
telemetryLiveMapOpacity |
1.0 |
Live Map 自身透明度 |
telemetryCornerOffsetX/Y |
0 |
四角 cards 的共同位移 |
telemetryPedalOffsetX |
0 |
非並排 pedal chart 位移 |
telemetryPowerTorqueOffsetX |
0 |
非並排 Power/Torque 位移 |
telemetryMergedChartsOffsetX |
0 |
並排 chart 群組位移 |
telemetryLiveMapOffsetX/Y |
0 |
Live Map 位移 |
telemetryPedalPosition |
bottom |
pedal chart 放在 top 或 bottom edge |
telemetryPowerTorquePosition |
top |
Power/Torque chart 放在 top 或 bottom edge |
telemetryMergedChartsPosition |
bottom |
並排 chart 放在哪個 edge |
telemetrySideBySideCharts |
true |
是否將兩個 edge chart 佈置為半寬並排 |
CSS 變數由 manager 寫入:--tc-font-scale、--tc-corners-scale、--tc-gradar-scale、--tc-corner-offset-x、--tc-corner-offset-y、--tc-live-map-scale、--tc-live-map-opacity 及對應 Live Map offset。--tc-gradar-scale 的拼法是現有程式的相容名稱,修改時不可只改 CSS 而漏掉 manager。
共用 palette 使用 useDefaultColors、customColor 推導 --card-primary 和 --card-contrast。卡片需要與 style 主儀表保持相同色彩,但警示色、溫度色階不應被品牌色完全覆蓋。
G-Force card 由 coordinator 提供 accel_x/y,renderer 依物理方向轉成畫面座標,再保留 gHist 歷史點。新增顯示時應沿用相同軸向與 clamp,不要在不同 HUD 中各自定義「左/右」或「前/後」。
renderCorners() 同時接受四輪 history、懸吊 min/max 和目前的顯示開關。懸吊 bar 是目前 normalized travel;波形是時間歷史;slip radar 使用 slip angle/ratio;胎溫色彩透過 utils.js 的溫度 helper。缺少某一輪資料時要保留固定四輪結構並使用安全預設,不要把陣列縮短造成 FL/FR 對錯位置。
兩個 edge chart 都是歷史型視覺,onFrame 每次只加入新 sample 並由 renderer 繪製。換車後 coordinator 會重置 sessionMaxima;卡片不應把前一台車的峰值當作新車 scale。卡片 disconnected/paused 超過約 1.5 秒時,manager 會清空 history,恢復後從新 sample 開始。
Live Map 讀取 shared/live_map_bg.png 與 shared/japan_pois.json,依 pos_x/pos_z 映射到 Canvas;live-map.js 會載入可用的背景/POI 資料並支援 map calibration 的 scaleX/scaleZ。heading_deg 用於方向箭頭;位置未移動時不要假設航向一定改變。若要新增 POI 或地圖資產,應同時確認 asset load failure 的 fallback 和座標校準,不要把遊戲世界座標硬編碼到某個 HUD style。
- 先確認需求是資料契約、卡片計算、模板 DOM 或 manager layout;不要在 style 內以 workaround 修補 shared bug。
- 修改
template.js的 ID/class 後,搜尋manager.js與所有 renderer 的getElementById,確保 cache 仍完整。 - 修改 config 時,從
frontend/src/features/overlay_control/hudConfig.ts開始,接著檢查 Overlay control、launcher、manager 和 CSS variable。 - 修改 renderer 時,維持固定 60Hz frame path:不要建立大量 DOM;Canvas context/元素應 cache;陣列 history 要有上限和斷線清理。
- 新增資料欄位時,先在 HUD Shared Core 定義 canonical meaning/unit,再讓 card 使用。
- 若卡片是 host-level singleton,切換 style 不應重新初始化一份;若是獨立 manager,必須明確呼叫
destroy()。
- 只看不到一張卡:檢查對應 element flag、template ID、manager DOM cache 和 renderer 是否在
show*false 時被跳過。 - 卡片全不見:檢查
showTeleMaster、telemetryOpacity、#teleCardsMount是否存在,以及 host 是否收到hud:frame。 - 方向或單位錯:檢查 coordinator 的 canonical field 和
displayUnits,不要先改 renderer 的常數。 - 圖表重疊:檢查 position、side-by-side、scale、offset 的 combination,並確認不是同時套用兩種 layout transform。
- Live Map 偏移:確認背景/POI 資產載入、
scaleX/scaleZ校準、pos_x/pos_z方向與 heading;不同地圖不能共用未驗證的校準值。 - 效能下降:檢查 history 是否無上限、是否每 frame querySelector、是否重複 init manager 或產生第二個 animation loop。
驗收至少要包含:啟用/關閉每個 card、切換 top/bottom/side-by-side、縮放/offset/opacity、單位切換、無 telemetry、斷線超過 1.5 秒後恢復、切換車輛重置 maxima、Live Map 資產失敗與多次 Launch/Destroy。
shared/telemetry-cards.jsshared/telemetry-cards/manager.jsshared/telemetry-cards/template.jsshared/telemetry-cards/g-radar.jsshared/telemetry-cards/corner-card.jsshared/telemetry-cards/pedal-wave.jsshared/telemetry-cards/power-torque.jsshared/telemetry-cards/live-map.jsfrontend/src/features/overlay_control/hudConfig.ts
Telemetry Cards are a host-level shared cluster containing G-Force, four-corner suspension/tire cards, pedal and power/torque charts, and Live Map. The manager owns visibility, scale, opacity, positions, history cleanup, and rendering dispatch. Reuse canonical fields from Shared Core, keep DOM/canvas references cached, and destroy independent managers explicitly.
Telemetry Cards は host レベルの共有クラスターで、G-Force、4 輪のサスペンション/タイヤ、ペダル、パワー/トルク、Live Map を提供します。manager は表示切替、拡大率、透明度、位置、履歴の消去、描画の振り分けを担当します。Shared Core の canonical field を使用し、DOM/Canvas の参照を cache し、独立した manager は明示的に destroy() してください。
FH6-HorizonTuner Wiki · v1.6.1 已發布 Rust backend / MCP Beta · PR #443(Rust hardening、Agent CLI、Python runtime retirement)尚未合併或發布 · Repository · Releases