Lane B R34: ⚖ LIST in the crate · AT AUCTION section · the morning paper rides the toasts
hud.js: every crate find row gains ⚖ (mail-in consignment — very 1996); AT AUCTION section
(non-empty only) shows what hammers tomorrow; the rebuild watcher now folds listings in.
index.html: the wake toast and the travel-arrival toast carry the drained auction news —
'🌅 day 2 · ⚖ SOLD "Cane Toad Blues" — hammer $22, $19 after fees' is the come-back-tomorrow
hook paying off at dawn.
This commit is contained in:
parent
b048f51640
commit
e528c92fed
@ -264,7 +264,9 @@ const game = GAME_ON ? createGame({
|
||||
onDay: (day) => {
|
||||
if (gigState) gigState.setWeekNight(weekNightOf(day)); // (day − 1) % 7 — see the seam note below
|
||||
lighting.setSegment(0);
|
||||
hud.showToast(`🌅 day ${day}`);
|
||||
// [R34] the morning paper: GODBAY resolved before this hook fired — fold the results in
|
||||
const news = game ? game.takeAuctionNews() : [];
|
||||
hud.showToast(`🌅 day ${day}` + (news.length ? ' · ' + news.join(' · ') : ''), news.length ? 6 : 2.6);
|
||||
},
|
||||
}) : null;
|
||||
const wallet = game ? game.wallet : baseWallet;
|
||||
@ -283,7 +285,13 @@ const weekNightOf = (day) => (Math.max(1, day) - 1) % 7;
|
||||
if (game && gigState) gigState.setWeekNight(weekNightOf(game.day));
|
||||
// [R33 — TRAVEL COSTS A DAY] this boot adopted a save from another town: the ride ate a day (save.js
|
||||
// adopt() did the increment + pull-pruning; weekNight above already read the incremented day). Tell John.
|
||||
if (game && game.traveled) hud.showToast(`🚌 ${plan.name || 'a new town'} — the ride cost a day. Day ${game.day}`, 4);
|
||||
// [R34] the ride also resolved any GODBAY listings the day moved past — the arrival toast carries the news.
|
||||
if (game) {
|
||||
const bootNews = game.takeAuctionNews();
|
||||
if (game.traveled) hud.showToast(`🚌 ${plan.name || 'a new town'} — the ride cost a day. Day ${game.day}`
|
||||
+ (bootNews.length ? ' · ' + bootNews.join(' · ') : ''), bootNews.length ? 7 : 4);
|
||||
else if (bootNews.length) hud.showToast(bootNews.join(' · '), 6);
|
||||
}
|
||||
// [Lane F R9] occupancyOf closure defers to `citizens` (declared just below); only invoked at enter()
|
||||
// time (door click), long after citizens is initialized — so the forward reference is safe.
|
||||
const interiorMode = createInteriorMode({ THREE, renderer, camera, plan, fleet, useGLB: !NOASSETS,
|
||||
|
||||
@ -200,7 +200,34 @@ export function createHUD({ camera, renderer, plan, getDoorMeshes, onEnterShop }
|
||||
const meta = document.createElement('div'); meta.className = 'pc-crate-meta';
|
||||
meta.textContent = `paid $${e.pricePaid} · ${foundAt(e, game)} · day ${e.dayFound}`;
|
||||
main.append(t, a, meta);
|
||||
row.append(th, main); panel.appendChild(row);
|
||||
row.append(th, main);
|
||||
// [R34 GODBAY] ⚖ LIST — mail-in consignment; the entry leaves the crate, hammers tomorrow.
|
||||
if (typeof game.listFind === 'function') {
|
||||
const lb = document.createElement('div');
|
||||
lb.textContent = '⚖'; lb.title = 'LIST at GodBay — the auction resolves tomorrow';
|
||||
lb.style.cssText = 'cursor:pointer;opacity:.65;padding:0 4px;flex:none;font-size:15px';
|
||||
lb.onclick = () => { if (game.listFind(e)) rebuildList(); };
|
||||
row.appendChild(lb);
|
||||
}
|
||||
panel.appendChild(row);
|
||||
}
|
||||
// [R34] AT AUCTION — consigned finds, hammering overnight. Non-empty only (no header over nothing).
|
||||
const listings = game.listings || [];
|
||||
if (listings.length) {
|
||||
const lh = document.createElement('h3');
|
||||
lh.style.marginTop = '10px';
|
||||
lh.textContent = `AT AUCTION — ${listings.length} consigned · hammers tomorrow`;
|
||||
panel.appendChild(lh);
|
||||
for (const l of listings) {
|
||||
const row = document.createElement('div'); row.className = 'pc-crate-row';
|
||||
const main = document.createElement('div'); main.className = 'pc-crate-main';
|
||||
const t = document.createElement('div'); t.className = 'pc-crate-title';
|
||||
t.textContent = l.title || l.sku || l.slotId || 'item';
|
||||
const meta = document.createElement('div'); meta.className = 'pc-crate-meta';
|
||||
meta.textContent = `paid $${l.pricePaid} · listed day ${l.listDay}`;
|
||||
main.append(t, meta);
|
||||
row.append(main); panel.appendChild(row);
|
||||
}
|
||||
}
|
||||
// [R33] THE WANTLIST — what you're hunting (☆ on a pull card adds; ✕ here removes; buying one
|
||||
// clears it automatically). Section exists only when non-empty — no stray header over nothing.
|
||||
@ -245,8 +272,8 @@ export function createHUD({ camera, renderer, plan, getDoorMeshes, onEnterShop }
|
||||
shownCount = col.length; btnCrate.textContent = `CRATE ${shownCount}`;
|
||||
if (open) rebuildList();
|
||||
}
|
||||
const nw = (game.wants || []).length; // [R33] want add/clear refreshes an open panel too
|
||||
if (nw !== shownWants) { shownWants = nw; if (open) rebuildList(); }
|
||||
const nw = (game.wants || []).length + (game.listings || []).length * 100; // [R33/R34] wants OR
|
||||
if (nw !== shownWants) { shownWants = nw; if (open) rebuildList(); } // listings change → rebuild
|
||||
// [R32] the surface yields to the map and to the dig/sell cards (they own the screen), and shows
|
||||
// everywhere else — street AND interior. Cheap: a style write only when the answer changes.
|
||||
const P = window.PROCITY, im = P && P.interiorMode;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user