feat: engine off at the destination
On arrival the drive winds down to a stop, the tail and running lamps drop to parking level, the sky darkens about 10% with more stars and the grid fades. The engine and road noise take a 1.2 s low-pass sweep to idle. The letterbox stays within 8vh and the closing credit types into the lower bar; reduced motion keeps only the bars and dimming.
This commit is contained in:
@@ -24,6 +24,8 @@ export interface TerrainWorld {
|
||||
overdrive?: number,
|
||||
surge?: number,
|
||||
spectrumPhase?: number,
|
||||
/** 0 driving, 1 parked: the grid fades out under the end shot. */
|
||||
engineOff?: number,
|
||||
): void;
|
||||
}
|
||||
|
||||
@@ -59,6 +61,7 @@ export function createTerrain(
|
||||
uSurge: { value: 0 },
|
||||
uSpectrumPhase: { value: 0 },
|
||||
uRouteProgress: { value: 0 },
|
||||
uEngineOff: { value: 0 },
|
||||
uTerrainEnergy: { value: initialPalette.terrainEnergy },
|
||||
uOctaves: { value: quality.terrainOctaves },
|
||||
uRelief: { value: 49 },
|
||||
@@ -180,6 +183,7 @@ export function createTerrain(
|
||||
uniform vec3 uFogColor;
|
||||
uniform vec3 uHazeColor;
|
||||
uniform float uRouteProgress;
|
||||
uniform float uEngineOff;
|
||||
uniform float uOverdrive;
|
||||
uniform float uSurge;
|
||||
varying float vHeight;
|
||||
@@ -200,7 +204,8 @@ export function createTerrain(
|
||||
float road = 1.0 - smoothstep(7.6, 8.4, abs(vTerrainPosition.x));
|
||||
float apron = 1.0 - smoothstep(12.0, 32.0, abs(vTerrainPosition.x));
|
||||
float surfaceStrength = mix(0.72, 0.12 + uOverdrive * 0.3, road);
|
||||
float alpha = vDepthFade * pulse * routeCalm * mix(surfaceStrength, 0.91, ridgeMix);
|
||||
float alpha = vDepthFade * pulse * routeCalm * mix(surfaceStrength, 0.91, ridgeMix)
|
||||
* (1.0 - uEngineOff * 0.72);
|
||||
float charge = uOverdrive * (0.35 + vFlow * 0.8) * (0.5 + apron * 0.5);
|
||||
charge += uSurge * (0.28 + vCrest * 0.5) * (1.0 - road);
|
||||
gl_FragColor = vec4(color * (1.46 + ridgeMix * 0.54 + charge), alpha);
|
||||
@@ -282,7 +287,9 @@ export function createTerrain(
|
||||
overdrive = 0,
|
||||
surge = 0,
|
||||
spectrumPhase = 0,
|
||||
engineOff = 0,
|
||||
) {
|
||||
uniforms.uEngineOff.value = clamp01(engineOff);
|
||||
const chapterPalette = CHAPTER_PALETTES[chapter];
|
||||
uniforms.uDistance.value =
|
||||
((finiteOrZero(distance) % NOISE_PERIOD) + NOISE_PERIOD) % NOISE_PERIOD;
|
||||
|
||||
Reference in New Issue
Block a user