Эх сурвалжийг харах

fix(cockpit): T03 平移方向反转为「抓着地图拖」,三类交互加阻尼

维护者目视复验后裁定两条修改,均已落地:

- **平移方向反转**:原先按 ADR 0008 字面做成「相机跟着拖」(拖右 → 相机右移、画面左移),
  现改为**抓着地图拖**(拖右 → 画面右移、相机左移)。落地在 `PAN_FOLLOWS_DRAG = false`
  一处开关,方向语义集中在 `pivotOffsetMeters()`。**ADR 0008 同步改写**,
  否则下个会话照旧文读会把方向改回去。
- **阻尼**:三类交互都改成「目标态 / 实际态」双状态 —— 输入立刻写 `target`(不丢输入,
  位移量与方向仍可精确断言),相机 `shown` 按 `1 − e^(−dt/τ)` 朝目标收敛
  (`DAMPING_TAU_MS = 110`),差到 `SETTLE_EPSILON` 内吸附到目标。系数与帧率无关,
  帧间隔取自排帧时刻的真实时间戳(不是写死的每帧毫秒);`shown/target/settled`
  都进了 `getState()` 与 `data-camera`,所以「阻尼真的在生效」可被断言而非只凭手感。
- **手感现场可调**:DEV 把手加 `__cockpitMap.setCameraDamping(毫秒)`(`0` = 不做阻尼)。
  `mapService.js` 里对应的那行改动**未随本次提交**:该文件当前还带着并发会话
  「底图/配置」票的未提交改动(引用尚未提交的 `domain/basemap.js`、`services/cockpitConfig.js` 等),
  提交它会产出引用缺失模块的树。等那一路落地后,这行把手改动随它一起提交。

验证:`verify/t03-camera-contract.mjs` **14/14**(新增阻尼渐入/不超调/停稳吸附、
阻尼与帧率无关 60fps 83.8% vs 120fps 83.8%、用户操作打断飞行、阻尼可拖调三组断言);
回归 `t01-panel-catalog`、`t06-assets` 15/15。真机走查脚本已按新方向与阻尼更新
(A2 改为断言沿相机左手方向、新增 A10 阻尼在真机生效、量几何前统一等 `settled`),
**真机尚未跑**,票面进度保持 90%。
Kazerin 1 сар өмнө
parent
commit
6c599feb3f

+ 2 - 0
.scratch/cockpit-shell-panel-layout/issues/03-camera-control-contract.md

@@ -34,6 +34,8 @@ Labels: ready-for-agent
 
 改动文件:`src/modules/cockpit/domain/camera.js`、`src/modules/cockpit/services/cameraControl.js`、`src/modules/cockpit/services/mapService.js`、`docs/adr/0008-web-cockpit-camera-controls.md`、`verify/t03-camera-contract.mjs`、`verify/t03-camera-walkthrough.mjs`。
 
+提交情况(`42200a4`,2026-09-17):除 `mapService.js` 外均已提交。`mapService.js` 里那一行 `__cockpitMap.setCameraDamping` 把手**故意没随本次提交** —— 该文件当时还带着并发会话「底图/配置」票的未提交改动(引用尚未提交的 `domain/basemap.js`、`services/cockpitConfig.js` 等),单独提交会产出引用缺失模块的树。维护者裁定:**等那一路落地后随它一起提交**(那行改动内容极小,落地前 `setCameraDamping` 只影响 DEV 调参便利性,不影响契约本身)。
+
 ## 进度:90%
 
 ### 交付物