From 31377791a19454e76cf3f4f74f1d90e3460f5c2d Mon Sep 17 00:00:00 2001 From: dax Date: Tue, 4 Aug 2026 09:22:43 +0000 Subject: pathways: no dead-end directions while photos remain - server extends short walks with library ids to 60 entries, client falls back to any remaining unplaced photo when a direction's walk is exhausted --- public/app.js | 7 +++++++ public/index.html | 4 ++-- server.mjs | 8 +++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/public/app.js b/public/app.js index 1c98d84..57827fa 100644 --- a/public/app.js +++ b/public/app.js @@ -274,6 +274,13 @@ function choosePlacement(id, dir) { const p = bestPlacement(tileW(info), tileH(info), from, dir) if (p) scored.push({ id: cid, info, rect: p.rect, cost: p.cost }) } + if (!scored.length) { + for (const [cid, info] of photoInfo) { + if (rectOf.has(cid) || cid === id) continue + const p = bestPlacement(tileW(info), tileH(info), from, dir) + if (p) scored.push({ id: cid, info, rect: p.rect, cost: p.cost + (claimed.has(cid) ? 1e12 : 0) }) + } + } if (!scored.length) return null scored.sort((a, b) => a.cost - b.cost) const best = scored[0] diff --git a/public/index.html b/public/index.html index 2de35c3..d38008c 100644 --- a/public/index.html +++ b/public/index.html @@ -5,7 +5,7 @@ pathways - +
@@ -16,6 +16,6 @@

four paths, one per direction. walk them.

- + diff --git a/server.mjs b/server.mjs index b73c44e..f03eace 100644 --- a/server.mjs +++ b/server.mjs @@ -137,11 +137,17 @@ async function load() { usedNext.add(nextId) const wi = walk.indexOf(nextId) const rot = wi > 0 ? walk.slice(wi).concat(walk.slice(0, wi)) : walk + const li = library.ids.indexOf(pid) + const ext = rot.slice() + for (let k = 1; ext.length < 60 && k < library.ids.length; k++) { + const wid = library.ids[(li + k) % library.ids.length] + if (wid !== pid && !ext.includes(wid)) ext.push(wid) + } list.push({ dir: DIRS[i], path: { type: p.type, name: p.name, count: p.count }, nextId, - walk: rot, + walk: ext, }) } exits.set(pid, list) -- cgit v1.3.1