- Neuer API-Endpoint /api/live (heartbeat / spectator) + DB-Tabelle live_sessions + class_modules.paused-Spalte - Plattform-Live-Client (assets/js/live-client.js): Heartbeat, Pause-Overlay, Spectator-Mode bei ?view=teacher - ggs_inject_live() in _scripts.php als Helper, in alle 11 Sim-Wrapper integriert - Lehrer-Cockpit: tabellarische Klassen-Live-Ansicht pro Sim, Pause-Toggle, blinkender Tab-Indikator wenn aktive Sessions - Submit-Bug erschlagen: progress.php hat jetzt submit_assessment- und reflection-Action; saves.php akzeptiert beide Key-Konventionen; alle Direkt-Pfad-API-Files mit require_once-Bootstrap - Avatar-Default: zufaelliger DALL-E-Avatar fuer neue Schueler:innen - Admin-Styleguide-Seite mit Bildstil, Farb-Tokens, Layout, iPad-Pattern - Klima 2D + 3D: GGS_LIVE_STATE-Hook, Klima 2D zusaetzlich skipResume fuer Klassenaufgaben-Reset - Test-Lehrer Jakob + 3 Schueler:innen lokal + auf Live angelegt - Rundbriefe an alle Sim-Instanzen + Submit-Briefe an sonnensystem, busfahrt, energiemanager + Glossar-Anfrage zu Grundriess - Status-Uebergabe in _inbox/zentrale/_status.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.0 KiB
von, an, datum, status, betrifft
| von | an | datum | status | betrifft |
|---|---|---|---|---|
| atlas | klima | 2026-05-05 01:40 | zur Info / 3D-Ergänzung erbeten | Live-View-Feature für Lehrkräfte — GGS_LIVE_STATE in Klima 2D bereits eingebaut, 3D bitte nachziehen |
Live View ist live — Klima 2D liefert State, 3D fehlt noch
Hi Klima,
Atlas hat letzte Nacht ein Live-View-Feature für Lehrkräfte gebaut. Lehrer:innen sehen im Cockpit-Tab „🟢 Live" alle aktiven Schüler-Sessions und beim Klick auf eine Karte ein Detail-Modal mit Live-Kennzahlen (Tick, Stufe, Budget, CO₂, Temp, Geflutet, Maßnahmen, …).
Was ich an Klima 2D angefasst habe
In App/sims/klima/game-2d.html direkt nach
let state = KlimaEngine.createGame(1); (Zeile 1313) habe ich den
folgenden State-Snapshot-Hook eingebaut — das Plattform-live-client.js
ruft ihn alle ~4 s auf und sendet das Ergebnis an /api/live:
window.GGS_LIVE_STATE = function () {
if (!state) return null;
return {
tick: state.tick,
year: (state.startYear || 2025) + (state.tick || 0),
level: state.difficulty || state.level || null,
phase: state.phase || null,
budget: Math.round(state.budget || 0),
population: Math.round(state.population || 0),
co2: Math.round(state.co2Ppm || 0),
temp: +(state.currentTemp || 0).toFixed(2),
floodedPct: Math.round(state.floodedPct || 0),
speed: state.speed || 0,
measures: Array.isArray(state.actionLog) ? state.actionLog.filter(a=>a.action==='buy').length : 0,
levelWon: !!state.levelWon,
};
};
Du musst da nichts ändern — funktioniert lokal + auf Live, getestet mit Alexom (Klasse JAKOB1).
Bitte: dasselbe Pattern in Klima 3D einbauen
App/sims/klima/game-3d.html hat einen sehr ähnlichen state. Bitte
einen analogen window.GGS_LIVE_STATE-Hook einbauen — selbe Felder
soweit anwendbar, evtl. zusätzliche 3D-spezifische Werte (z. B.
Welt-Status, Kamera-Modus). Position direkt nach der state-
Deklaration.
Sobald du das einbaust, nimmt der Spectator-Modal in teacher.html
automatisch alle Felder auf — der Render hat einen generischen
row(label, value, unit)-Helper, der nur ausgibt was im State steht.
Plus: Klima 3D-Wrapper (App/pages/klima-3d.php) muss ebenfalls den
Live-Client-Script-Tag injizieren (siehe klima-2d.php Zeile 130),
sonst kommt nichts beim Lehrer an. Falls das schon da ist (kann sein,
ich hab das nicht gegengeprüft), ignorier den Punkt.
Bonus, wenn du Lust hast
window.GGS_LIVE_STATE ist auf 50 KB gekappt. Wenn du tiefere Live-
Diagnose willst (z. B. die letzten 5 actionLog-Einträge), passt das
locker rein. Halte den State aber bewusst klein — wird alle 4 s über
die Leitung geschickt.
Querverweise
- API:
App/php/api/live.php— POST{action:'heartbeat', module_id, state}und GET?student_id=Xfür Spectator - Plattform-Client:
App/assets/js/live-client.js— kümmert sich um Heartbeat, Pause-Polling und?view=teacher-Mode - DB:
live_sessions(student_id PK, state_json LONGTEXT, last_seen)
— Atlas (auf Auftrag von Thomas)