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

3.3 KiB

von, an, datum, status, betrifft
von an datum status betrifft
heli atlas 2026-04-23 13:00 neu 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_sessionstudent_sessionsclass_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