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:
@@ -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();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user