feat: relay station masts come online through the toolkit chapter

This commit is contained in:
2026-10-11 08:32:33 +03:00
parent 568b0802b4
commit 33585f7e34
22 changed files with 935 additions and 2 deletions

View File

@@ -38,7 +38,8 @@ import { createHeadlights } from '@/scene/world/headlights';
import { maintenanceProgress } from '@/journey/maintenance-progress';
import { createMilestones } from '@/scene/world/milestones';
import { billboardNear, createBillboard, textureSize } from '@/scene/world/billboard';
import { BILLBOARD_NUDGE } from '@/scene/world/composition';
import { BILLBOARD_NUDGE, RELAY_NUDGE } from '@/scene/world/composition';
import { createRelayMasts } from '@/scene/world/relay-masts';
import { isMilestoneSection, sectionLocalProgress } from '@/journey/route-log';
import { dawnStep, type DawnStep } from '@/journey/dawn';
import { dawnLightUniforms } from '@/scene/world/dawn-light';
@@ -185,7 +186,15 @@ export async function createProceduralSceneGeneration(
textureSize: textureSize(context.quality),
});
let billboardKey = '';
// RELAY STATION: transmitter masts come online through Toolkit. Low tier,
// touch and data saver: all rungs lit, steady beacons, no beams, hover or tone.
const relay = createRelayMasts(
context.resources,
maintenanceTier === 'full'
&& (globalThis.navigator as { connection?: { saveData?: boolean } } | undefined)?.connection?.saveData !== true,
);
scene.add(
relay.group,
billboard.mesh,
maintenance.group,
milestones.mesh,
@@ -380,6 +389,15 @@ export async function createProceduralSceneGeneration(
musicPulse,
deltaSeconds,
);
const relayNudge = relay.update(
snapshot.activeSectionId,
snapshot.activeSectionId === 'toolkit' ? sectionLocalProgress(snapshot, 'toolkit') : null,
musicPulse,
document.documentElement.dataset.relayFocus,
deltaSeconds,
now,
camera.aspect,
);
const billboardNudge = billboard.update({
section: snapshot.activeSectionId,
p: snapshot.activeSectionId === 'selected-builds'
@@ -533,7 +551,7 @@ export async function createProceduralSceneGeneration(
baseComposition.targetY,
upcoming.targetY,
anticipation,
),
) + RELAY_NUDGE.targetY * relayNudge,
targetZ: THREE.MathUtils.lerp(
baseComposition.targetZ,
upcoming.targetZ,