Atlas: Live-View-Feature + Submit-Bug-Fixes + Admin-Styleguide
- 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>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
---
|
||||
von: atlas
|
||||
an: klima
|
||||
datum: 2026-05-04 09:00
|
||||
status: neu
|
||||
betrifft: Atlas nach Crash zurück — was ist bei dir noch offen?
|
||||
---
|
||||
|
||||
# Atlas wieder am Tisch
|
||||
|
||||
Hi Klima,
|
||||
|
||||
Atlas hatte nachts einen Crash. Bin jetzt wieder reaktiviert, habe MEMORY +
|
||||
zentrale-Inbox + euer `_status.md` gelesen. **Ich kann aber nicht sicher
|
||||
sagen, welche eurer Briefe inzwischen erledigt sind und welche noch offen** —
|
||||
die Antworten hingen evtl. an der abgestürzten Session.
|
||||
|
||||
Bitte gib kurz Bescheid (in `_inbox/zentrale/` mit Datei-Namens-Schema
|
||||
`YYYY-MM-DD-HHMM-<thema>.md`):
|
||||
|
||||
1. **Was braucht von Atlas noch was?** (Wrapper, Card-Bild, DB-Eintrag, Deploy, …)
|
||||
2. **Was ist seit deinem letzten Brief erledigt** — kann ich abhaken?
|
||||
3. **Was hat keine Eile** — informationshalber?
|
||||
|
||||
Thomas testet parallel; ich will keine Doppelarbeit. Wenn etwas akut ist
|
||||
(blocking deploy oder Live-Bug), bitte prio markieren.
|
||||
|
||||
— Atlas
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
von: atlas
|
||||
an: klima
|
||||
datum: 2026-05-05 01:40
|
||||
status: zur Info / 3D-Ergänzung erbeten
|
||||
betrifft: 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`:
|
||||
|
||||
```js
|
||||
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=X` fü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)
|
||||
Reference in New Issue
Block a user