diff --git a/App/sims/klima/game-2d.html b/App/sims/klima/game-2d.html index 8820108..1d25e1b 100644 --- a/App/sims/klima/game-2d.html +++ b/App/sims/klima/game-2d.html @@ -1009,7 +1009,7 @@
- +
@@ -4148,6 +4148,9 @@ function tryResume() { try { const d = JSON.parse(raw); if (!d || !d.tick || d.tick <= 0) continue; + // Beendete Läufe nie wieder aufnehmen — sonst landet „Nochmal spielen" / + // erneutes Öffnen direkt im Endbildschirm. Alten Stand verwerfen. + if (d.phase === 'end') { localStorage.removeItem(SAVE_KEY_BASE + '-' + lvl); continue; } deserializeState(d); hideOverlay('level-select-overlay'); state.phase = (d.phase === 'citizen' ? 'playing' : d.phase) || 'playing'; diff --git a/App/sims/klima/game-3d.html b/App/sims/klima/game-3d.html index 291a8c4..ecac31f 100644 --- a/App/sims/klima/game-3d.html +++ b/App/sims/klima/game-3d.html @@ -5641,6 +5641,9 @@ function tryResume() { try { const d = JSON.parse(raw); if (!d || !d.tick || d.tick <= 0) continue; + // Beendete Läufe nie wieder aufnehmen — sonst landet erneutes Öffnen + // direkt im Endbildschirm. Alten Stand verwerfen. + if (d.phase === 'end') { localStorage.removeItem(SAVE_KEY_BASE + '-' + lvl); continue; } deserializeState(d); hideOverlay('level-select-overlay'); state.phase = (d.phase === 'citizen' ? 'playing' : d.phase) || 'playing'; diff --git a/App/teacher.html b/App/teacher.html index 53aab23..4cfb91d 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -614,7 +614,7 @@ function _fmtSeconds(s) { // goodWhen 'high' → grün ab >= 60% der Range, gelb ab >= 30%, sonst rot // goodWhen 'low' → invers (z. B. Fehlerzahl, idleMs) // goodWhen 'mid' → neutral grau (z. B. Progress) -function _liveBar(val, min, max, goodWhen) { +function _liveBar(val, min, max, goodWhen, dec) { if (val == null || isNaN(val)) return ''; var span = (max - min) || 1; var pct = Math.max(0, Math.min(100, ((val - min) / span) * 100)); @@ -626,12 +626,13 @@ function _liveBar(val, min, max, goodWhen) { } else { c = pct >= 60 ? '#5a8a5e' : pct >= 30 ? '#c9913a' : '#c07a6b'; } + var disp = (dec != null) ? Number(val).toFixed(dec) : Math.round(val); return '' + '' + '' - + ''+Math.round(val)+'' + + ''+disp+'' + ''; } @@ -732,13 +733,13 @@ var LIVE_PRIMARY_FIELDS = { ], klima: [ {k:'level', label:'Stufe'}, - {k:'tick', label:'Tick'}, {k:'year', label:'Jahr'}, - {k:'budget', label:'Budget', unit:'Mio €'}, - {k:'co2', label:'CO₂', unit:'ppm'}, - {k:'temp', label:'Temp', unit:'°C'}, - {k:'floodedPct', label:'Geflutet', fmt:function(v){ return _liveBar(v, 0, 100, 'low'); }}, - {k:'population', label:'Bev.'}, + // Kennzahlen mit Ampel-Linien (grün→rot), absolute Skalen wie im Spiel: + {k:'co2', label:'CO₂', unit:'ppm', fmt:function(v){ return _liveBar(v, 280, 700, 'low'); }}, + {k:'temp', label:'Temp', unit:'°C', fmt:function(v){ return _liveBar(v, 14, 20, 'low', 1); }}, + {k:'floodedPct', label:'Geflutet', unit:'%', fmt:function(v){ return _liveBar(v, 0, 100, 'low'); }}, + {k:'budget', label:'Budget', unit:'Mio €', fmt:function(v){ return _liveBar(v, -500, 3000, 'high'); }}, + {k:'population', label:'Bev.', fmt:function(v){ return _liveBar(v, 1500, 4500, 'high'); }}, {k:'measures', label:'Maßn.'}, {k:'speed', label:'Speed', unit:'×'}, ],