wip(mobile): checkpoint experience round three in progress

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VVYRAqiQj9Y1V9ZfG1RcDH
This commit is contained in:
Claude committed 2026-10-23 07:52:23 +00:00
1 parent 5aba6bab58
commit e0fd7acead
4 files changed
+54 -7

No files matched your search

+23 -1
View File
@@ -85,6 +85,14 @@ export function normMoment(m) {
media: c.media || c.kind || 'photo',
live: c.live || c.kind === 'live',
distanceM: c.distanceM ?? c.rangeM ?? Math.round(dist(c)),
headingDeg: Number.isFinite(c.headingDeg)
? c.headingDeg
: (Math.atan2(
(subject.lon - c.lon) * Math.cos((c.lat * Math.PI) / 180),
subject.lat - c.lat,
) *
180) /
Math.PI,
})),
chat: (m.chat || []).map((c) => ({ ...c, handle: at(c.handle) })),
posts: (m.posts || []).map((p) => ({
@@ -556,7 +564,21 @@ export function createMomentPlayer({
if (!m) return;
cancelAnimationFrame(raf);
raf = 0;
globe.exitMoment();
// Stop the clock and let a frame render before the engine tears the
// Moment's primitives down (exiting mid-frame can stop Cesium's render).
globe.playback.stop();
const leaving = m;
requestAnimationFrame(() =>
requestAnimationFrame(() => {
if (m === null || m === leaving) globe.exitMoment();
}),
);
try {
ext?.destroy?.();
} catch {
/* ignore */
}
ext = null;
offOwn?.();
offOwn = null;
const was = m;
+1
View File
@@ -552,6 +552,7 @@ export function createTimeRibbon(
function goLive() {
haptic('tick');
stopPlay();
if (clipMode) setClipMode(false);
if (custom) {
animateTo(custom.start, () => emit(true));
return;