From 670cc24d7a64a9de0c31e1136d0ae29b763f657e Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 26 Mar 2026 01:19:10 -0700 Subject: [PATCH] =?UTF-8?q?feat(climate-sim):=20=E2=9C=A8=20Update=20Stats?= =?UTF-8?q?Dashboard=20component=20with=20enhanced=20visualizations=20and?= =?UTF-8?q?=20improve=20sprite=20generation=20tooling=20for=20better=20ass?= =?UTF-8?q?et=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../components/climate-sim/StatsDashboard.tsx | 75 ++++++++++-------- m2_life_dashboard_working.png | Bin 0 -> 69695 bytes tools/sprite-generation/server.py | 21 +++-- tools/sprite-generation/sprites.db | Bin 90112 -> 90112 bytes tools/sprite-generation/sprites.db-shm | Bin 32768 -> 0 bytes tools/sprite-generation/sprites.db-wal | Bin 12392 -> 0 bytes 6 files changed, 55 insertions(+), 41 deletions(-) create mode 100644 m2_life_dashboard_working.png delete mode 100644 tools/sprite-generation/sprites.db-shm delete mode 100644 tools/sprite-generation/sprites.db-wal diff --git a/guide/engine/src/components/climate-sim/StatsDashboard.tsx b/guide/engine/src/components/climate-sim/StatsDashboard.tsx index 87c9797a..17f54744 100644 --- a/guide/engine/src/components/climate-sim/StatsDashboard.tsx +++ b/guide/engine/src/components/climate-sim/StatsDashboard.tsx @@ -52,6 +52,39 @@ interface MetricDef { phaseBands?: PhaseBand[] } +// ── Formatters ─────────────────────────────────────────────────────────────── + +const fmt3 = (v: number) => v.toFixed(3) +const fmt2 = (v: number) => v.toFixed(2) +const fmt4 = (v: number) => v.toFixed(4) +const fmtDelta3 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(3) +const fmtDelta2 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(2) +const fmtDelta4 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(4) + +// ── Metric catalog (single source of truth) ───────────────────────────────── + +const METRIC_CATALOG: Record = { + // -- Climate / atmosphere -- + sea_level: { key: 'sea_level', label: 'Sea Lvl', tooltip: 'Elevation threshold for water. Rises with warming, falls with cooling.', color: '#5C6BC0', getValue: (s) => s.sea_level, formatValue: fmt3, formatDelta: fmtDelta3 }, + et: { key: 'evapotrans', label: 'ET', tooltip: 'Average evapotranspiration across land. Moisture recycled by vegetation per turn.', color: '#80DEEA', getValue: (s) => s.avg_evapotranspiration, formatValue: fmt4, formatDelta: fmtDelta4 }, + albedo: { key: 'albedo', label: 'Albedo', tooltip: 'Global average surface reflectivity (0=absorbs all, 1=reflects all). Ice/snow raise it, forests/water lower it.', color: '#BDBDBD', getValue: (s) => s.avg_albedo, formatValue: fmt3, formatDelta: fmtDelta3 }, + aerosol: { key: 'aerosol', label: 'Aerosol', tooltip: 'Global average sulfate aerosol opacity. Volcanic eruptions inject aerosols that cool and dry the atmosphere.', color: '#90A4AE', getValue: (s) => s.avg_aerosol, formatValue: fmt4, formatDelta: fmtDelta4 }, + // -- Land ecology -- + land_canopy: { key: 'land_canopy', label: 'Flora', tooltip: 'Average tree canopy cover across land (0=barren, 1=full canopy). Drives succession and shading.', color: '#2E7D32', getValue: (s) => s.avg_land_canopy, formatValue: fmt3, formatDelta: fmtDelta3 }, + land_under: { key: 'land_undergrowth', label: 'Undergrowth', tooltip: 'Average ground vegetation across land (0=bare, 1=dense). Drives food yield and habitat quality.', color: '#66BB6A', getValue: (s) => s.avg_land_undergrowth, formatValue: fmt3, formatDelta: fmtDelta3 }, + land_fungi: { key: 'land_fungi', label: 'Fungi', tooltip: 'Average mycorrhizal network across land (0=none, 1=dense). Accelerates forest regrowth, boosts ecosystem resilience.', color: '#8D6E63', getValue: (s) => s.avg_land_fungi, formatValue: fmt3, formatDelta: fmtDelta3 }, + land_habitat: { key: 'land_habitat', label: 'Fauna', tooltip: 'Average fauna habitat suitability across land (0=inhospitable, 1=thriving). Combines flora density, moisture, temperature.', color: '#A1887F', getValue: (s) => s.avg_land_habitat, formatValue: fmt3, formatDelta: fmtDelta3 }, + land_quality: { key: 'land_quality', label: 'Quality', tooltip: 'Average tile quality across land (1=Prolific, 5=Epic). Ecology composite of flora health, fauna diversity, biome stability.', color: '#FFD54F', getValue: (s) => s.avg_land_quality, formatValue: fmt2, formatDelta: fmtDelta2 }, + // -- Water ecology -- + water_reef: { key: 'water_reef', label: 'Flora', tooltip: 'Average reef health across water tiles (0=dead, 1=pristine). Bleaching from high temps (>0.75). Dead reefs halve fish capacity.', color: '#29B6F6', getValue: (s) => s.avg_water_reef, formatValue: fmt3, formatDelta: fmtDelta3 }, + water_fish: { key: 'water_fish', label: 'Fauna', tooltip: 'Average fish stock across water tiles (0=empty, 100+=abundant). Logistic reproduction, temperature-scaled.', color: '#26C6DA', getValue: (s) => s.avg_water_fish, formatValue: fmt2, formatDelta: fmtDelta2 }, + water_quality:{ key: 'water_quality', label: 'Quality', tooltip: 'Average tile quality across water tiles (1=Prolific, 5=Epic). Reflects marine ecosystem health.', color: '#42A5F5', getValue: (s) => s.avg_water_quality, formatValue: fmt2, formatDelta: fmtDelta2 }, +} + +const m = (key: string): MetricDef => METRIC_CATALOG[key] + +// ── Layout selections ──────────────────────────────────────────────────────── + const PRIMARY_METRICS: MetricDef[] = [ { key: 'temp', label: 'Temp', tooltip: 'Average land temperature (0=frozen, 1=scorching). Driven by solar input, albedo, and orbital cycles.', color: '#E85D3A', @@ -69,44 +102,14 @@ const PRIMARY_METRICS: MetricDef[] = [ m('sea_level'), ] -// ── Metric catalog (single source of truth) ───────────────────────────────── -// Each metric defined ONCE. Dashboard layouts select by key. - -const fmt3 = (v: number) => v.toFixed(3) -const fmt2 = (v: number) => v.toFixed(2) -const fmt4 = (v: number) => v.toFixed(4) -const fmtDelta3 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(3) -const fmtDelta2 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(2) -const fmtDelta4 = (d: number) => (d >= 0 ? '+' : '') + d.toFixed(4) - -const METRIC_CATALOG: Record = { - // -- Climate / atmosphere -- - sea_level: { key: 'sea_level', label: 'Sea Lvl', tooltip: 'Elevation threshold for water. Rises with warming, falls with cooling.', color: '#5C6BC0', getValue: (s) => s.sea_level, formatValue: fmt3, formatDelta: fmtDelta3 }, - et: { key: 'evapotrans', label: 'ET', tooltip: 'Average evapotranspiration across land. Moisture recycled by vegetation per turn.', color: '#80DEEA', getValue: (s) => s.avg_evapotranspiration, formatValue: fmt4, formatDelta: fmtDelta4 }, - albedo: { key: 'albedo', label: 'Albedo', tooltip: 'Global average surface reflectivity (0=absorbs all, 1=reflects all). Ice/snow raise it, forests/water lower it.', color: '#BDBDBD', getValue: (s) => s.avg_albedo, formatValue: fmt3, formatDelta: fmtDelta3 }, - aerosol: { key: 'aerosol', label: 'Aerosol', tooltip: 'Global average sulfate aerosol opacity. Volcanic eruptions inject aerosols that cool and dry the atmosphere.', color: '#90A4AE', getValue: (s) => s.avg_aerosol, formatValue: fmt4, formatDelta: fmtDelta4 }, - // -- Land ecology -- - land_canopy: { key: 'land_canopy', label: 'Canopy', tooltip: 'Average tree canopy cover across land (0=barren, 1=full canopy). Drives succession and shading.', color: '#2E7D32', getValue: (s) => s.avg_land_canopy, formatValue: fmt3, formatDelta: fmtDelta3 }, - land_under: { key: 'land_undergrowth', label: 'Undergrowth', tooltip: 'Average ground vegetation across land (0=bare, 1=dense). Drives food yield and habitat quality.', color: '#66BB6A', getValue: (s) => s.avg_land_undergrowth, formatValue: fmt3, formatDelta: fmtDelta3 }, - land_fungi: { key: 'land_fungi', label: 'Fungi', tooltip: 'Average mycorrhizal network across land (0=none, 1=dense). Accelerates forest regrowth, boosts ecosystem resilience.', color: '#8D6E63', getValue: (s) => s.avg_land_fungi, formatValue: fmt3, formatDelta: fmtDelta3 }, - land_habitat: { key: 'land_habitat', label: 'Habitat', tooltip: 'Average habitat suitability across land (0=inhospitable, 1=thriving). Combines flora density, moisture, temperature.', color: '#A1887F', getValue: (s) => s.avg_land_habitat, formatValue: fmt3, formatDelta: fmtDelta3 }, - land_quality: { key: 'land_quality', label: 'Quality', tooltip: 'Average tile quality across land (1=Prolific, 5=Epic). Ecology composite of flora health, fauna diversity, biome stability.', color: '#FFD54F', getValue: (s) => s.avg_land_quality, formatValue: fmt2, formatDelta: fmtDelta2 }, - // -- Water ecology -- - water_reef: { key: 'water_reef', label: 'Reef', tooltip: 'Average reef health across water tiles (0=dead, 1=pristine). Bleaching from high temps (>0.75). Dead reefs halve fish capacity.', color: '#29B6F6', getValue: (s) => s.avg_water_reef, formatValue: fmt3, formatDelta: fmtDelta3 }, - water_fish: { key: 'water_fish', label: 'Fish', tooltip: 'Average fish stock across water tiles (0=empty, 100+=abundant). Logistic reproduction, temperature-scaled.', color: '#26C6DA', getValue: (s) => s.avg_water_fish, formatValue: fmt2, formatDelta: fmtDelta2 }, - water_quality:{ key: 'water_quality', label: 'Quality', tooltip: 'Average tile quality across water tiles (1=Prolific, 5=Epic). Reflects marine ecosystem health.', color: '#42A5F5', getValue: (s) => s.avg_water_quality, formatValue: fmt2, formatDelta: fmtDelta2 }, -} - -const m = (key: string): MetricDef => METRIC_CATALOG[key] - -// Life mode: LAND column (fauna quality first, then flora quality, then details) +// Life mode: LAND column — Fauna, Flora, Quality, then details const LIFE_LEFT: MetricDef[] = [ - m('land_habitat'), m('land_quality'), m('land_canopy'), m('land_under'), m('land_fungi'), + m('land_habitat'), m('land_canopy'), m('land_quality'), m('land_under'), m('land_fungi'), ] -// Life mode: WATER column (fauna quality first, then flora quality, then details) +// Life mode: WATER column — Fauna, Flora, Quality const LIFE_RIGHT: MetricDef[] = [ - m('water_fish'), m('water_quality'), m('water_reef'), + m('water_fish'), m('water_reef'), m('water_quality'), ] // Environment mode: left column (energy budget) @@ -359,7 +362,9 @@ function TerrainDistChart({ stats, currentTurn, onScrub }: StatsDashboardProps): // Match total height of primary + compact sections // Height matches the tallest possible content (life mode with headers) - const maxCompactRows = Math.max(LIFE_LEFT.length, LIFE_RIGHT.length) + 1 + const lifeRows = Math.max(LIFE_LEFT.length, LIFE_RIGHT.length) + 1 // +1 for header + const envRows = Math.max(ENV_LEFT.length, ENV_RIGHT.length) + const maxCompactRows = Math.max(lifeRows, envRows) const chartH = PRIMARY_METRICS.length * (PRIMARY_H + 3) + 6 + maxCompactRows * (COMPACT_H + 3) diff --git a/m2_life_dashboard_working.png b/m2_life_dashboard_working.png new file mode 100644 index 0000000000000000000000000000000000000000..ebab6412f5def6aa842f5b0dfe9b6c3881805138 GIT binary patch literal 69695 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%0DJRl@-wr3&U?MBm!8;c@s1lgC}-OZ5l)HtVap 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 Mr>mdKI;Vst0J9XVd;kCd literal 0 HcmV?d00001 diff --git a/tools/sprite-generation/server.py b/tools/sprite-generation/server.py index 7e43d19f..f6196fde 100644 --- a/tools/sprite-generation/server.py +++ b/tools/sprite-generation/server.py @@ -189,22 +189,31 @@ def create_app( @app.get("/api/stream/variants") async def stream_variants() -> StreamingResponse: async def event_generator(): - # Start from the highest known variant ID current = registry.get_recent_variants(limit=1) last_id = current[0]["variant_id"] if current else 0 + last_rating_snapshot = "" + poll_count = 0 while True: await asyncio.sleep(3) new_variants = registry.get_recent_variants(limit=10, since_id=last_id) if new_variants: last_id = max(v["variant_id"] for v in new_variants) yield f"data: {json.dumps(new_variants)}\n\n" - else: - # Also check for rating updates on recent variants + continue + + # Check for rating updates every ~15s (5 cycles) + poll_count += 1 + if poll_count % 5 == 0: updated = registry.get_recent_variants(limit=30) - if updated: + snapshot = "|".join( + f"{v['variant_id']}:{v['rating']}" for v in updated + ) + if snapshot != last_rating_snapshot: + last_rating_snapshot = snapshot yield f"data: {json.dumps(updated)}\n\n" - else: - yield ": keepalive\n\n" + continue + + yield ": keepalive\n\n" return StreamingResponse( event_generator(), diff --git a/tools/sprite-generation/sprites.db b/tools/sprite-generation/sprites.db index 3bf8cc198c8d00878a98e0fd55d4948b70e4ac58..2914153abaad14a50b065b3316888c73a284c360 100644 GIT binary patch delta 168 zcmZoTz}j$tb;GfEMwZRT<81|aSon@J@NeW#<`?BVzFAOUJD;i#3nzoGF9Rb7BcqXl zk(sW6v96I>h=GNbp|O>Tk)DC2nSq7zbVqhZ5i3J8D+41vQv(ZABLi&%11kdq9v&7S oW?cFWfkx;VnV49Z8-VqT0!;*p0QH*~8A9}PaByr+uAln=0Ky?8fdBvi delta 35 rcmZoTz}j$tb;GfEMyAcj<81{vnD~?eBIJvmAn~qYV28m#lq$>DA!P!MWf#@f& zqb}m&ClH+79348jcqK};b#T++e-Ls!JbAeLZTZ`+>G}p1$SpSNzNQ z<^5W@BTCt?^~_!Ce6e$MQBWR zv}lvXGx?bp%pAV@!#7V?1yPg~n<&@Hns{MB00Izz00bZa0SG_<0uX=z1R&58n3Zy* zE`F(HnR3RhD$}dnT4Ii;X`ZI5+%O!QRT%RalWQ5#TPIYeeZ9=}G_LA~ZgDN`9h}8g z)74Fzf6S8QI!&k1foYn@4OQcoWBoXd8J@{i%dt(zO{bNL*&%VIZ@IwgaelL$J3B~o r0V~Y~tlq`3g8&2|009U<00Izz00bZa0SG{#lEwn`H?hF~&IR59JpzEz