Klima: Aktuell-Linien gruen->rot (CO2/Temp/Geflutet/Budget/Bev.) + "Nochmal spielen" setzt wirklich zurueck
- teacher.html: LIVE_PRIMARY_FIELDS.klima Kennzahlen mit _liveBar-Ampel (absolute Skalen), _liveBar +Nachkomma-Param; tick-Spalte entfernt (redundant zu Jahr) - game-2d/3d: beendete Laeufe (phase=end) werden beim Resume verworfen -> "Nochmal spielen"/erneutes Oeffnen startet frisch statt im Endbildschirm Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1009,7 +1009,7 @@
|
||||
<div class="ggs-results-stats" id="end-stats"></div>
|
||||
|
||||
<div style="display:flex;gap:12px;justify-content:center">
|
||||
<button class="ggs-btn ggs-btn-primary" onclick="location.reload()">Nochmal spielen</button>
|
||||
<button class="ggs-btn ggs-btn-primary" onclick="for(var i=1;i<=3;i++)localStorage.removeItem('ggs-save-klima-'+i);location.reload()">Nochmal spielen</button>
|
||||
<button class="ggs-btn ggs-btn-secondary" onclick="location.href='../../'">Zurück</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
+9
-8
@@ -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 '<span style="color:#9a9a9a">—</span>';
|
||||
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 ''
|
||||
+ '<span style="display:inline-flex;align-items:center;gap:.35rem;font-variant-numeric:tabular-nums">'
|
||||
+ '<span aria-hidden="true" style="display:inline-block;width:42px;height:7px;border-radius:99px;background:rgba(0,0,0,.08);overflow:hidden">'
|
||||
+ '<span style="display:block;height:100%;width:'+pct.toFixed(0)+'%;background:'+c+'"></span>'
|
||||
+ '</span>'
|
||||
+ '<span style="color:'+c+';font-weight:700;font-size:.8rem;min-width:1.6em;text-align:right">'+Math.round(val)+'</span>'
|
||||
+ '<span style="color:'+c+';font-weight:700;font-size:.8rem;min-width:1.6em;text-align:right">'+disp+'</span>'
|
||||
+ '</span>';
|
||||
}
|
||||
|
||||
@@ -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:'×'},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user