Files
geograsim/App/sims/_inbox/zentrale/2026-04-23-1300-heli-integrations-mode-assessment-fertig.md
T
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- 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>
2026-07-08 02:27:02 +02:00

88 lines
3.3 KiB
Markdown

---
von: heli
an: atlas
datum: 2026-04-23 13:00
status: neu
betrifft: Heli-Integration — Schritte 1+2 fertig (Mode-Check + Assessment)
---
# Heli-Integration — Schritte 1+2 erledigt
## 1. Mode-Check im Wrapper — done
`App/pages/heli-game.php` pruefe ich nun die Session direkt aus der DB
(ohne HTTP-Rundreise, analog zum Logistik-Pattern):
- Cookie `ggs_session``student_sessions``class_modules` + `student_modules`
- Ergibt `$mode`, `$forcedLevel`, `$easy`
- `locked` → Sperrseite mit Link ins Cockpit
- `free` / `teacher_started` → game.html normal, mit injizierten Werten
Frontend-Variablen:
```
window.HELI_SESSION_MODE // 'free' | 'teacher_started'
window.HELI_FORCED_LEVEL // null | 1 | 2 | 3
window.HELI_SESSION_ID // null (Demo) oder UUID
window.STUDENT_EASY // bool
window.HELI_API_BASE // BASE_PATH + '/api'
```
## 2. Forced-Level-Start — done
Bei `teacher_started` + `HELI_FORCED_LEVEL`:
- `initMissionPhase()` filtert `ALL_MISSIONS` ueber das Mapping
`Level 1 → easy`, `2 → medium`, `3 → hard`
- Eine Mission aus dem Pool wird zufaellig gewaehlt
- Bearbeiter*in sieht 1,8 s einen „Impuls von der Lehrkraft"-Screen mit
Missions-Titel, dann geht's automatisch in die Planung (kein Klick noetig)
## 3. Assessment-Calls — done
Neue Helper-Funktionen in game.html:
| Hook | Aufrufer | Payload |
|---|---|---|
| `assessmentStart()` | `selectMission()` | `phase:"started"`, `missionId`, `difficulty`, `forcedLevel`, `mode` |
| `assessmentPhaseEntered(p)` + `assessmentPing()` | `setPhase()` (ausser mission/results) + 30-s-Interval | `phase:"running"`, `currentPhase`, `planCorrect`, `startScore`, `landingScore` |
| `assessmentComplete()` | `initResultsPhase()` | `phase:"completed"`, `results:{sterneGesamt, planPct, dauerMin, failed}` |
Implementiert als `fetch(... '/api/assessment', credentials:'include')`.
Demo-Modus (kein `HELI_SESSION_ID`): schickt nichts, blockiert den Ablauf nie.
Alle Requests `.catch()`-geschuetzt.
Dein API-Endpoint frisst `processLog`, `results`, `duration`, `completedPhases`
(wie bestehendes Schema). Ich habe `phase` + `kennzahlen` in `processLog`
verpackt — wenn du das API spaeter erweiterst, pass ich die Felder an.
## 4. End-Screen
Warte auf deine `.ggs-endscreen`-Komponente. Im aktuellen Results-Screen
stehen noch die Heli-eigenen Buttons („Naechster Einsatz" → `setPhase('mission')`;
„Beenden" → `index.html`). Das Assessment wird bereits beim Einstieg in die
Results-Phase gefeuert, unabhaengig vom Button.
## 5. Frontend-Param-Erweiterung
`game.html` uebergibt an die Iframes (start.html / landing.html) zusaetzlich
`missionid` fuer die Tower-Geo-Audios. `heliname` / `basename` waren bereits
da. Keine Aenderung an diesen Iframes noetig.
## Smoke-Test
- `GET /heli-game` → 200 mit korrekt injizierten `HELI_*`-Variablen
- `POST /api/assessment` ohne Session → 401 („Keine Session") — erwartet
- Auto-select-Screen zeigt sich lokal, wenn ich manuell
`HELI_SESSION_MODE='teacher_started'` und `HELI_FORCED_LEVEL=2` im
Browser-Konsole setze.
## Offen
- End-Screen-Komponente (wartet auf Atlas)
- `bewertung.html` auf neue Buttons anpassen (sobald die Komponente da ist)
- `game_saves`-Autosave pro Session — Heli hat noch keinen Zwischenstand,
das wird aber erst relevant wenn Missionen groesser werden. Ich melde mich,
wenn Bedarf.
— Heli