- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.6 KiB
von, an, datum, status, betrifft
| von | an | datum | status | betrifft |
|---|---|---|---|---|
| klima | atlas | 2026-04-29 | neu | Klima-Beitrag zur Lehrer-Ergebnisseite — Erfolgs-Parameter + Field-Mapping |
Klima-Beitrag zur Lehrer-Ergebnisseite
Thomas möchte die Lehrer-Seite „Ergebnisse" (Tab in App/teacher.html,
Z. 628 ff.) ausbauen:
- Modul-Filter über alle Einträge
- Modul-spezifische Spalten mit den entscheidenden Erfolgs-Parametern
- Game-Over-Indikator pro Zeile
- Fleiß-Übersicht mit Filtern Tag / Woche / Monat / Jahr (Zeit pro Schüler*in, gesamt + pro Modul)
Da das die zentrale Lehrer-Seite und cross-modular ist, gehört das in deine Hand. Ich liefere hiermit den Klima-Block fertig — die anderen Module musst du analog koordinieren.
Klima — entscheidende Erfolgs-Parameter
Die Engine speichert pro abgeschlossenem Durchgang via
endLevel() → POST /api/assessment.php ein results-JSON. Diese
Felder sind die didaktisch entscheidenden:
| Spalte (Lehrer-Sicht) | JSON-Pfad in results |
Sinn |
|---|---|---|
| Ergebnis-Icon | abgeleitet (siehe unten) | 🏆 / 💸 / 🌊 / 🌫 / 🌡 / ⏸ |
| Endgrund | endReason |
won · pleite · ueberflutet · co2-top · temp-top |
| Jahr erreicht | tick + Engine-startYear |
bis 2175 = 75 Ticks = Vollerfolg |
| Sterne | stars |
0–5 |
| Score | score |
0–100 |
| CO₂ (ppm) | final_co2 |
< 450 = Klimaziel · ≥ 700 = Game-Over |
| Temperatur (°C) | final_temperature |
< 17 = Pariser Ziel · ≥ 19 = Game-Over |
| Budget (Mio €) | final_budget |
> 0 = Pflicht · > 100 = Sparfuchs |
| Überflutet (%) | final_flooded_pct |
< 30 = Pflicht · < 5 = ausgezeichnet |
| Bevölkerung | final_population |
nicht unter Startwert sinken lassen |
| Maßnahmen gebaut | measures_bought |
Aktivitätsindex |
| Events erlebt | events_survived |
Reaktionsbreite |
| Spielzeit | duration_ms (Top-Level) |
für Fleiß-Spalte |
Game-Over-Erkennung
const won = endReason === 'won';
const gameOver = endReason && endReason !== 'won'; // true bei 'pleite' /
// 'ueberflutet' / 'co2-top' /
// 'temp-top'
Icon-Mapping:
won→ 🏆pleite→ 💸ueberflutet→ 🌊co2-top→ 🌫temp-top→ 🌡- kein
endReason(vorzeitig abgebrochen) → ⏸
Variante 2D vs 3D
In assessments.sim_id steht aktuell für beide Varianten 'klima'. Wenn
du im Lehrer-UI 2D/3D unterscheiden willst, müsste der Wrapper das beim
Senden mitliefern (z.B. simVariant: '2d' | '3d'). Das wäre eine
kleine Engine-Refactor-Erweiterung — kann ich machen, sobald du sagst
ob's relevant ist. Vorerst egal: dieselbe Engine, dieselbe Bewertung.
Fleiß-Übersicht — Vorschlag
Aus assessments.duration_ms und submitted_at:
- Pro Schüler*in:
SUM(duration_ms) GROUP BY session_id - Pro Modul:
SUM(duration_ms) GROUP BY sim_id - Pro Zeitfenster:
WHERE submitted_at >= NOW() - INTERVAL X
Filter Tag/Woche/Monat/Jahr → Standard-DATE_SUB-Pattern.
Wenn du auch laufende Sessions (nicht nur completed) mitzählen
willst: das fehlt aktuell in assessments. Müsste über
student_sessions.last_seen_at oder einen zusätzlichen Heartbeat
laufen. Mehraufwand, aber didaktisch wahrscheinlich wertvoll
(Schüler*innen, die viel reinklicken aber nichts abschließen).
Was bei mir vorbereitet ist
Engine + 2D + 3D senden bereits endReason, levelWon, stars,
score, final_*, measures_bought, events_survived, duration_ms
in der results-JSON. Du kannst direkt parsen, ich muss nichts
anpassen.
Ausnahme: der Integrations-Auftrag (mode-check + Assessment-Calls in running-Phase + neuer End-Screen) wartet noch auf Thomas-Go. Sobald das passiert ist, kommen Zwischenstände alle ~30 s mit dazu.
Bestätigen
- status: gelesen
- Wenn du die Spalten so übernimmst, brauche ich keine Rückmeldung —
meld dich nur, wenn dir ein Feld fehlt oder du
simVariantwillst