diff --git a/App/teacher.html b/App/teacher.html index 9956861..3e6f9e0 100644 --- a/App/teacher.html +++ b/App/teacher.html @@ -574,7 +574,7 @@ function _liveToggleHtml() { + '
' + ' ' + ' ' - + ' ' + + ' ' + ' ' + '
' + (_liveMode==='uebersicht' ? @@ -1284,6 +1284,7 @@ function _liveMood(simId, s) { if (_liveNeedsHelp(simId, s)) return 'bad'; switch (simId) { case 'weltkueche': return (s.mistakesInDish||0) <= 2 ? 'good' : (s.mistakesInDish >= 8 ? 'bad' : 'mid'); + case 'farmer': return (s.hit_rate==null) ? 'mid' : (s.hit_rate >= 60 ? 'good' : s.hit_rate >= 30 ? 'mid' : 'bad'); case 'klima': case 'klima-3d': return ((s.floodedPct==null?100:s.floodedPct) < 20 && (s.budget||0) >= 0) ? 'good' : 'mid'; case 'busfahrt': case 'fluggesellschaft': return (s.budget==null?0:s.budget) >= 5000 ? 'good' : (s.budget < 0 ? 'bad' : 'mid'); case 'tourismustal': return (s.money==null?0:s.money) >= 4000 ? 'good' : (s.money < 0 ? 'bad' : 'mid'); @@ -1433,14 +1434,13 @@ async function renderLive() { html += ''; html += ''; - // Spalten-Maxima für relative Mini-Balken (über alle Zeilen dieser Sim). + // Spalten-Maxima für relative Mini-Balken (über alle Zeilen dieser Sim) — + // für ALLE Zahlenspalten, damit jede Zahl einen kleinen Vergleichs-Balken bekommt. var colMax = {}; fields.forEach(function(f) { - if (f.bar && f.bar.kind === 'rel') { - var mx = 0; - grp.rows.forEach(function(r) { var val = (r.state||{})[f.k]; if (typeof val === 'number' && !isNaN(val)) mx = Math.max(mx, Math.abs(val)); }); - colMax[f.k] = mx; - } + var mx = 0; + grp.rows.forEach(function(r) { var val = (r.state||{})[f.k]; if (typeof val === 'number' && !isNaN(val)) mx = Math.max(mx, Math.abs(val)); }); + colMax[f.k] = mx; }); grp.rows.forEach(function(ls) { @@ -1489,6 +1489,10 @@ async function renderLive() { } cell = '
'+cell+'
' + _liveMiniBar(pct, bcol); } + } else if (typeof s[f.k] === 'number' && !isNaN(s[f.k]) && (colMax[f.k]||0) > 0 && cell.indexOf('border-radius:99px') < 0) { + // Mini-Balken auch für alle übrigen Zahlenspalten: relativ zum Spalten-Max (neutral grau). + var apct = (Math.abs(s[f.k]) / colMax[f.k]) * 100; + cell = '
'+cell+'
' + _liveMiniBar(apct, '#9aa7b0'); } html += ''+cell+''; }); @@ -1928,6 +1932,8 @@ function _renderGenericCompareBody(rows, simId) { if (typeof s.planCorrect === 'number' && s.planTotal) return Math.min(100, s.planCorrect / s.planTotal * 100); // Busfahrt: quizFirstTry / orderIndex if (typeof s.quizFirstTry === 'number' && s.orderIndex) return Math.min(100, s.quizFirstTry / s.orderIndex * 100); + // Farmer: Trefferquote = Anteil gut geeigneter Anbau-Versuche + if (typeof s.hit_rate === 'number') return s.hit_rate; return null; } var data = rows.map(function(ls, idx){ @@ -1948,7 +1954,7 @@ function _renderGenericCompareBody(rows, simId) { if (b.progress !== a.progress) return b.progress - a.progress; return (a.displayName||'').localeCompare(b.displayName||''); }); - var html = '
'+esc(_compareGroupLabel(simId))+' · Vergleich
'; + var html = '
'+esc(_compareGroupLabel(simId))+' · Fortschritt & Qualität
'; html += '

'+data.length+' aktiv · Klick auf Zeile öffnet Detail.

'; html += '
'; html += ''