diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-21 07:02:13 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-21 07:02:13 +0800 |
| commit | e8eebe49407de8947bf509d5cf04d9080ee4edf7 (patch) | |
| tree | cd7d5b1b2cb2efca2e19786041e49aa4b5e5b72e /src/SomhairlesDream.Frontend/Bindings.fs | |
| parent | 13479cd194cd992c67805093e59f8b1dd1b5f3a2 (diff) | |
| download | somhairles-dream-fsharp-e8eebe49407de8947bf509d5cf04d9080ee4edf7.tar.gz | |
Real historical replay: timeline pins load run's own checkpoint GLBs
- renderTimeline rebuilds #timeline-track after each snapshot and wires
click-to-pin on completed checkpoints (kept placeholder nodes otherwise)
- selection loads the pinned run's own steps/<n>-*.glb (generation/
ownership guards apply), pins survive live snapshots, 跟随最新 restores
live scope, replay pauses/scrubs through 已完成 versions
- placeholder fallback now clearly labeled (占位…) only before any run
- acceptance: historical_replay_regression (9 checks) pins mid-run,
asserts no auto-follow strays, late-older-response precedence, served
checkpoint sha256 vs CLI reference, and viewport geometry change
- fix: timeline-track id missing in index.html crashed renderTimeline
(null firstChild), leaving static placeholder nodes non-clickable
- driver: 71/71 checks, zero console/page errors
Diffstat (limited to 'src/SomhairlesDream.Frontend/Bindings.fs')
| -rw-r--r-- | src/SomhairlesDream.Frontend/Bindings.fs | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/SomhairlesDream.Frontend/Bindings.fs b/src/SomhairlesDream.Frontend/Bindings.fs index 2822e33..e7c567d 100644 --- a/src/SomhairlesDream.Frontend/Bindings.fs +++ b/src/SomhairlesDream.Frontend/Bindings.fs @@ -103,6 +103,9 @@ let createVector3 () : ThreeVector = jsNative [<Emit("window.SOMHAIRLES_VIEWER = { camera: $0, scene: $1, group: $2, canvas: $3 }")>] let exposeViewerDebug (camera: ThreeCamera) (scene: ThreeNode) (group: ThreeNode) (canvas: obj) : unit = jsNative +[<Emit("var child; while ((child = $0.firstChild)) { $0.removeChild(child); }")>] +let clearChildren (node: obj) : unit = jsNative + [<Emit("new THREE.WebGLRenderer($0)")>] let createRenderer (options: obj) : ThreeRenderer = jsNative |
