human tweaks
This commit is contained in:
parent
1ea8ba1701
commit
f5e7a1df1d
9 changed files with 1201 additions and 45 deletions
66
app.js
66
app.js
|
|
@ -34,6 +34,9 @@ const modeGrid = document.getElementById("modeGrid");
|
|||
const statsEl = document.getElementById("stats");
|
||||
const idsEl = document.getElementById("nameIds");
|
||||
const tooltipEl = document.getElementById("mapTooltip");
|
||||
const progressEl = document.getElementById("generationProgress");
|
||||
const progressStageEl = document.getElementById("generationProgressStage");
|
||||
const progressTimingsEl = document.getElementById("generationProgressTimings");
|
||||
|
||||
function parseSeed(seedText) {
|
||||
const numeric = Number.parseInt(seedText, 10);
|
||||
|
|
@ -56,10 +59,53 @@ function countText(items) {
|
|||
return `${insideCount(items)} / outside ${outsideCount(items)}`;
|
||||
}
|
||||
|
||||
function formatMs(ms) {
|
||||
if (!Number.isFinite(ms)) return "-";
|
||||
return ms >= 1000 ? `${(ms / 1000).toFixed(2)}s` : `${Math.round(ms)}ms`;
|
||||
}
|
||||
|
||||
function renderTimingRows(timings = []) {
|
||||
if (!progressTimingsEl) return;
|
||||
progressTimingsEl.innerHTML = "";
|
||||
for (const row of timings) {
|
||||
const item = document.createElement("div");
|
||||
item.className = "progress-timing-row";
|
||||
const label = document.createElement("span");
|
||||
label.textContent = row.label;
|
||||
const value = document.createElement("strong");
|
||||
value.textContent = formatMs(row.ms);
|
||||
item.append(label, value);
|
||||
progressTimingsEl.append(item);
|
||||
}
|
||||
}
|
||||
|
||||
function updateGenerationProgress(event) {
|
||||
if (!progressEl) return;
|
||||
progressEl.classList.remove("hidden");
|
||||
if (progressStageEl) {
|
||||
progressStageEl.textContent = event?.status === "done"
|
||||
? `Completed: ${event.label} / ${formatMs(event.ms)}`
|
||||
: `Running: ${event?.label || "Preparing"}`;
|
||||
}
|
||||
renderTimingRows(event?.timings || []);
|
||||
}
|
||||
|
||||
function setProgressVisible(visible, message = "Preparing") {
|
||||
if (!progressEl) return;
|
||||
progressEl.classList.toggle("hidden", !visible);
|
||||
if (progressStageEl) progressStageEl.textContent = message;
|
||||
if (visible) renderTimingRows([]);
|
||||
}
|
||||
|
||||
function nextFrame() {
|
||||
return new Promise((resolve) => requestAnimationFrame(() => resolve()));
|
||||
}
|
||||
|
||||
function getStats(map) {
|
||||
return [
|
||||
["Map Type", map.terrainTemplate?.terrainTypeLabel || map.terrainDebug?.terrainTypeLabel || "-"],
|
||||
["Terrain ID", map.terrainTemplate?.terrainType || map.terrainDebug?.terrainType || "-"],
|
||||
["Generation Time", map.generationTotalMs ? `${formatMs(map.generationTotalMs)} / slowest ${(map.generationTimings || []).slice().sort((a, b) => b.ms - a.ms)[0]?.label || "-"}` : "-"],
|
||||
["Villages", countText(map.villages)],
|
||||
["Market Towns", countText(map.markets)],
|
||||
["Castles", countText(map.castles)],
|
||||
|
|
@ -202,12 +248,22 @@ function renderModeButtons() { modeGrid.innerHTML = "";
|
|||
}
|
||||
}
|
||||
|
||||
function regenerate() {
|
||||
async function regenerate() {
|
||||
state.seedText = seedInput.value;
|
||||
state.map = generateMap(parseSeed(state.seedText));
|
||||
renderStats(state.map);
|
||||
renderNameIds(state.map);
|
||||
redraw();
|
||||
setProgressVisible(true, "Preparing generation...");
|
||||
await nextFrame();
|
||||
try {
|
||||
state.map = generateMap(parseSeed(state.seedText), { onProgress: updateGenerationProgress });
|
||||
renderStats(state.map);
|
||||
renderNameIds(state.map);
|
||||
redraw();
|
||||
if (progressStageEl) progressStageEl.textContent = `Done in ${formatMs(state.map.generationTotalMs || 0)}`;
|
||||
renderTimingRows(state.map.generationTimings || []);
|
||||
window.setTimeout(() => setProgressVisible(false), 900);
|
||||
} catch (error) {
|
||||
if (progressStageEl) progressStageEl.textContent = `Generation failed: ${error?.message || error}`;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
function redraw() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue