Auto-Build advisor + resilient simulation loop

- New advisor button (toolbar, purple wand): one click per planning pass
  * Genesis: founds a town from a blank map (main street + zone bands)
  * Keeps power ahead of demand (wind/solar/coal by deficit size)
  * BFS road spurs to reach orphaned zoned land
  * Stamps new districts when demand is high and empty plots run out
  * Places the weakest service coverage; parks/plazas for land value
  * Never spends below an emergency reserve; recomputes power per action
- Simulation no longer dies when rAF throttles: interval watchdog
  compensates only after 3s of total frame silence
- preserveDrawingBuffer now opt-in via ?cap=1 (software-GL perf)
- Smoke test drives via game API, prefers headless_shell binary,
  tolerates stalled screenshots; engine suite at 51 assertions
This commit is contained in:
PolyCity
2026-08-23 03:28:17 +00:00
parent 3266b8d640
commit a54f04ed5f
17 changed files with 482 additions and 37 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ const b = await chromium.launch({ executablePath: exe, args: ['--no-sandbox', '-
const page = await b.newPage({ viewport: { width: 1280, height: 800 }, deviceScaleFactor: 1 });
await page.addInitScript(() => localStorage.setItem('polycity.settings.v1',
JSON.stringify({ sound: false, shadows: true, autosave: true, minimap: true })));
await page.goto('http://127.0.0.1:4176/', { waitUntil: 'load' });
await page.goto('http://127.0.0.1:4176/?cap=1', { waitUntil: 'load' });
await page.waitForTimeout(3500);
try { const h = await page.$('#helpClose'); if (h) await h.click(); } catch {}
await page.waitForTimeout(600);