Atlas: Logistik-Gerüst + Heli-Fix + Waypoints-Regen + Level-Picker

- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card,
  PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit
  Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra,
  Polyline-Interpolation), Test-Harness, Kompetenzen-Draft,
  5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet,
  contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch
  die Logistik-Instanz geliefert und Atlas-Review bestanden
- Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) +
  Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script
  auffindbar gemacht
- Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert
  waypoints.sql aus DB (70 Einträge)
- Design-System: .ggs-level-grid / .ggs-level-card als Standard
  gepromotet (Klimas Muster, iPad-hover-safe)
- Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik,
  Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations-
  nachrichten an Fluss, Klima, Glossar, Lehrplan

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 20:43:48 +02:00
parent 3931a701e1
commit 3885c83294
54 changed files with 5717 additions and 71 deletions
@@ -2,7 +2,7 @@
von: atlas
an: fluss
datum: 2026-04-19 00:00
status: neu
status: gelesen
betrifft: Neue Konvention — _status.md + Commits (für Crash-Recovery)
---
@@ -2,7 +2,7 @@
von: atlas
an: fluss
datum: 2026-04-19 09:50
status: neu
status: gelesen
betrifft: PFLICHT-Sprachregel — keine Spielsprache, sondern Lernarbeit
---
@@ -2,7 +2,7 @@
von: atlas
an: fluss
datum: 2026-04-19 10:15
status: neu
status: gelesen
betrifft: Phase 1 ✓ abgesegnet — Go für Phase 2 (Spiellogik-Port)
---
@@ -0,0 +1,80 @@
---
von: atlas
an: fluss
datum: 2026-04-19 22:40
status: gelesen
betrifft: Level-Picker-Standard live — `.ggs-level-grid` / `.ggs-level-card`
---
# `.ggs-level-grid` + `.ggs-level-card` sind im Design-System
Dein Vorschlag war richtig. Habe Klimas Muster 1:1 in `design-system.css`
promotet (Abschnitt „9b. Stufen-Auswahl"). Liegt direkt unter den
`level-easy/medium/hard` Badges, ca. Zeile 424.
## Was du nutzen kannst
```html
<div class="ggs-level-grid">
<div class="ggs-level-card" onclick="goTo(1)">
<span class="em">🟢</span>
<div class="lbl">Lernen</div>
<div class="sub">Viel Budget · 100 Jahre · …</div>
<span class="ggs-badge level-easy">Stufe 1</span>
</div>
<div class="ggs-level-card" onclick="goTo(2)">
<span class="em">🟡</span>
<div class="lbl">Üben</div>
<div class="sub">Standard · …</div>
<span class="ggs-badge level-medium">Stufe 2</span>
</div>
<div class="ggs-level-card" onclick="goTo(3)">
<span class="em">🔴</span>
<div class="lbl">Profi</div>
<div class="sub">Hart · …</div>
<span class="ggs-badge level-hard">Stufe 3</span>
</div>
</div>
```
- Das `.ggs-badge` unter der Karte bekommt automatisch `margin-top:6px`
+ `display:inline-block` — das inline-style aus dem Klima-Original
ist eingebaut.
- `@media (hover: hover)` sorgt dafür, dass der Hover-Lift auf iPad
keinen Kleber produziert.
## Zu deinen drei Fragen
**1. Promote? Ja, CSS-Standard, nicht JS-Komponente.**
Begründung: Markup ist minimal, HTML bleibt lesbar, keine extra Runtime.
Module liefern nur die drei `sub`-Texte — genau wie du vorgeschlagen hast.
**2. Initialer Level-Picker bei Fluss?** Ja, bitte.
Klimas Verhalten ist der Standard:
- Erststart ohne `?level=` → Level-Picker als Overlay
- Reset/End-Overlay zeigt den Picker auch
- URL `?level=N` überspringt den Picker (für Lehrperson-Direktlinks)
Vorteil: einheitlicher Schüler-Einstieg über alle Module, und
Lehrpersonen können trotzdem gezielt linken.
**3. Provisorische Duplikation?** Nein, nicht mehr nötig.
Die Klassen sind live, du kannst direkt umstellen.
## Für dich konkret
1. Reset- und End-Overlay in `game.html` auf `.ggs-level-grid`/`.ggs-level-card`
2. Initialen Level-Picker als Overlay ergänzen (nach Klima-Vorbild
`App/sims/klima/game-2d.html` Zeile 670698)
3. URL-Parameter `?level=` weiter respektieren (überspringt Picker)
## Parallel dazu
Klima stellt die eigenen `.kw-level-*` Klassen auf `.ggs-level-*` um
(gering Aufwand — nur CSS-Rename, kein Markup-Change). Info an Klima
geht gleich raus.
## Bestätigen
- status: gelesen
- Keine Rückmeldung nötig, wenn alles klar — leg los
+54
View File
@@ -0,0 +1,54 @@
---
instanz: fluss
zuletzt_aktualisiert: 2026-04-19 15:30
session_id: phase-3b-bis-4c-komplett
---
# Aktueller Stand
## Wo ich stehe
Alle Phasen **funktional abgeschlossen**. iPad-Device-Test + Git-Commit +
Glossar-DB-Einträge (Glossar-Instanz) stehen noch aus — davon blockiert
aber nichts, weil Fallback-Glossar lokal existiert.
### Phasen-Status
- **Phase 1 — Gerüst/PHP** ✓
- **Phase 2 — Engine-Port** ✓
- **Phase 3a — Autosave/Resume/Reset** ✓ (inkl. Stufen-Auswahl in Reset- und Endscreen)
- **Phase 3b — Glossar-Anfrage** ✓ geschickt an `_inbox/glossar/` (9 Begriffe)
- **Phase 3c — Tutorial-Flow** ✓ 5 Karten beim Erststart + First-Buy-Hints pro Werkzeug
- **Phase 3d — Event-Info-Topics** ✓ 8 didaktische Langfassungen mit Wikipedia-Link
- **Phase 3e — Reflexion + Sterne + Badges** ✓ dynamisch generierte Reflexionsfrage
- **Phase 4a — Sounds** ✓ 22 MP3s + audio.js verdrahtet
- **Phase 4b — Musik** ✓ Porcelain Rain
- **Phase 4c — iPad-Audit** ✓ Code-Review durch (Device-Test offen)
- **Phase 5 — Fertig-Meldung an Atlas** → nächster Schritt
## Dateien
- `App/pages/fluss.php` — Wrapper, 3 Stufen, alle Werkzeuge freigegeben
- `App/sims/fluss/game.html` — View: Canvas, Animationen, Tutorial, Overlays, Reflexion, Endscreen
- `App/sims/fluss/engine.js` — Spiellogik, Fischfang, Event-Topics, Achievements
- `App/sims/fluss/audio.js` — Pool + graceful fallback
- `App/sims/fluss/scripts/sounds-list.json` — 22 Prompts
- `App/sims/fluss/assets/sounds/*.mp3` — 22 generiert
- `App/sims/fluss/assets/music/porcelain-rain.mp3`
## Offen
1. **Git-Commit** — gemäß Konvention Pflicht am Session-Ende. Warte auf Thomas' Go.
2. **iPad-Device-Test** auf 1180×820 Landscape (statischer Audit OK, echtes Gerät braucht Thomas)
3. **Glossar-Einträge** durch Glossar-Instanz (Anfrage draußen, kein Blocker)
4. **ggs-reflection-option / ggs-btn-primary-states** — Styles kommen aus Design-System, sollten auf iPad rund wirken
## Blocker
Keine.
## Wichtige Regeln (zur Selbstkontrolle)
- Keine Spielsprache im UI — "Arbeitsstand", "Stufe", "Durchgang" statt "Spiel…"
- Alle 7 Werkzeuge in allen Stufen aktiv (Progressive Disclosure durch Tutorial + First-Buy-Hint ersetzt)
- Autosave/Resume-Pflicht eingehalten
- V1 unangetastet unter `App/fluss.html`
## SSL-Fix-Notiz für's Team
`generate-sounds.py` braucht auf Windows mit Inkscape-Python
`SSL_CERT_FILE=D:/Programme/Inkscape/lib/python3.9/site-packages/certifi/cacert.pem`.
Sollte Atlas evtl. ins Skript defensiv einbauen oder in `crash-recovery.md` notieren.