From fac282bcbc8e2b6b9e11df27b9d090ea5eb985c4 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Thu, 17 Sep 2026 09:56:16 +0900 Subject: [PATCH] feat(274): show the east stub ahead of time; slow its paint run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Transect.tsx: the dimmed "road ahead" now includes the east continuation (274-route-east.json), so it is visible all along instead of appearing only once the paint reaches it after 東に続く. - progress.ts: EAST_RUN_S 4 -> 75. The paint used to dash along the east stub (5.25 km in 4 s, about 1.3 km/s, after 0.55 km/s for the leg before it); it now takes 75 s from 東に続く, well into the outro. Verified: eslint + tsc clean. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01PLt25nCVMsoroKALYUBu6u --- src/song-274/Transect.tsx | 12 +++++++----- src/song-274/progress.ts | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/song-274/Transect.tsx b/src/song-274/Transect.tsx index c4e70f2..bac24dd 100644 --- a/src/song-274/Transect.tsx +++ b/src/song-274/Transect.tsx @@ -69,18 +69,20 @@ export const Transect: React.FC = ({ palette, audio, data }) => { const frame = useCurrentFrame(); const { fps, width, height } = useVideoConfig(); const projection = useMemo(() => (data ? projectGround(data.route) : null), [data]); + // The main road plus the east continuation. The paint runs into the latter + // after 東に続く; the camera and overview stay on the main road, so that run + // leaves the screen. + const paintRoute = useMemo(() => (data ? paintableRoute(data) : []), [data]); + // The dimmed road ahead includes the east continuation, so it shows all along. const fullRoad = useMemo( - () => (data && projection ? routePath(data.route, projection) : ""), - [data, projection], + () => (projection && paintRoute.length > 1 ? routePath(paintRoute, projection) : ""), + [paintRoute, projection], ); const bounds = useMemo( () => (data && projection ? prefixBounds(data.route, projection) : []), [data, projection], ); const kmAt = useMemo(() => (data ? monotoneCurve(progressKeyframes(data)) : null), [data]); - // The paint may run past the main road into the east continuation; the camera - // and overview stay on the main road, so that run leaves the screen. - const paintRoute = useMemo(() => (data ? paintableRoute(data) : []), [data]); const westRoad = useMemo( () => data && projection && data.routeWest.length > 1 diff --git a/src/song-274/progress.ts b/src/song-274/progress.ts index 8de0e90..895751c 100644 --- a/src/song-274/progress.ts +++ b/src/song-274/progress.ts @@ -13,7 +13,7 @@ import type { RoutePoint, TransectData } from "./data"; export type Keyframe = { t: number; km: number }; /** How long the paint takes to run the east continuation once 東に続く starts. */ -export const EAST_RUN_S = 4; +export const EAST_RUN_S = 75.0; /** * Pins, in time order: the start of the route at 0 s and each sung line's