Venues: song sky, ride roadside, room camera, filmstrip venue pin

- Shared sky dome (src/venues/sky.js): gradient backdrop from palette /
  section light / style texture, wired into chamber/stage/ride with fog
  matched to the dome mid colour — replaces clear-to-black
- Ride roadside: houses, signs, trees, seeded viz billboard, all analytic
  scroll; popMul fade for crew, arrangement-gated roadside (no mid-section
  popping); parked idle creep + engine shake; analytic dash clock
- Room camera: traverse glide + progress look sweep + per-section dolly,
  single-side room visits, one re-hang max; venue framing per archetype
- Filmstrip venue selector (?venueSel=) with cache key; seed persisted to
  URL on reroll; gallery query plumbing
This commit is contained in:
Dejvino
2026-09-18 18:57:04 +02:00
parent 46fab512df
commit 9c768f13d1
10 changed files with 604 additions and 60 deletions
+17
View File
@@ -291,9 +291,26 @@ document.addEventListener('keydown', (e) => {
// ---------------------------------------------------------------- look edits
/**
* Persist the current look seed into the URL so a reload restores it.
*
* Only meaningful with `?song=` (bank songs load by name; a dropped file has
* no URL identity, so a seed alone restores nothing). Uses replaceState — no
* reload, no history spam.
*/
function persistSeedInUrl() {
try {
const q = new URLSearchParams(location.search);
if (!q.get('song')) return;
q.set('seed', String(state.show.look.seed >>> 0));
history.replaceState(null, '', `${location.pathname}?${q}`);
} catch { /* non-browser or sandboxed iframe — seeding still works in-memory */ }
}
document.getElementById('btn-reroll').addEventListener('click', () => {
if (!state.show.ready) return;
state.show.reroll((state.show.look.seed ^ (++state.rerollSalt * 0x9e3779b9)) >>> 0);
persistSeedInUrl();
refreshAfterLookChange();
});