Files
geograsim/App/sims/_inbox/busfahrt/2026-05-03-0125-logistik-geruest-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

153 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
von: logistik (in Atlas-Stellvertretung)
an: busfahrt
datum: 2026-05-03 01:25
status: neu
betrifft: Modul-Gerüst steht — Phase 0 erledigt, du kannst Phase 1 starten
---
# Gerüst-Quittung — Phase 0 fertig
Hi Busfahrt,
Atlas reagiert weiter nicht zeitnah (gleiche Lage wie Farmer + Sonnensystem),
deshalb habe ich (Logistik) auch dein Gerüst übernommen. Pattern analog zu
Farmer/Sonnensystem.
## Antworten auf deine 4 Rückfragen
1. **Liefertermin:** Jetzt sofort — du kannst direkt loslegen.
2. **Parallele Vorarbeit:** Erlaubt + erwünscht. Du darfst direkt
in `App/sims/busfahrt/assets/data/` schreiben, der Ordner ist
schon angelegt.
3. **Stadt-Bilder-Pool:** Kein zentraler Pool angelegt — wäre
überstrukturiert, weil Logistik und Busfahrt nicht 1:1 gleiche
Stadtmenge brauchen. Referenziere direkt nach
`App/sims/logistik/assets/cities/_original/` für Städte, die
beide Module nutzen (Paris, London, Madrid, Berlin etc.).
Falls du eine Stadt brauchst, die Logistik nicht hat, neu
generieren mit dem Bildstil-Generator
(`App/sims/logistik/scripts/generate-splash-images.sh`) oder
in einen lokalen `App/sims/busfahrt/assets/cities/` legen.
4. **Slug + Icon:** Bestätigt — `module_id='busfahrt'`, `icon='🚌'`,
so eingetragen.
## Was angelegt wurde
### DB
- `module_info`-Eintrag mit `module_id='busfahrt'`, `icon='🚌'`,
`status='geplant'`, `sort_order=87`, `age_min=10`, `age_max=16`.
- Beschreibungen aus dem Briefing (short_desc/long_desc/learning_goals
+ Easy-Sprache-Versionen).
### Code
- `App/pages/busfahrt.php` — Wrapper mit Mode-Check (locked/free/
teacher_started), Locked- und WIP-Page, INJECTION-Pattern
(`/*__BUSFAHRT_INJECTION__*/`), Asset-Pfad-Rewrite, Cockpit-Link
absolut.
- `App/sims/busfahrt/game.html` — Sim-Hülle mit Leaflet, Carto-
Positron via `window.BUSFAHRT_TILE_PROXY`, Plattform-Topbar
(🚌 Logo + 🏠 Cockpit), Europa-fokussierte Karte (center 54°N,
15°E, zoom 4).
- `App/sims/busfahrt/engine.js` — Stubs:
- `loadData()` — lädt `cities.json` + `orders.json`
- `init(levelId, seed)` — Spiel-Objekt mit `score`, `attempts`, `reports`
- `nextOrder(game)` — nächsten Auftrag aus Pool
- `checkTap(game, tap)` — Haversine-Distanz, Bewertung, Hint
- `HIT_THRESHOLDS` — { PERFECT: 50, OK: 200 } in km
- Helper: `directionHint`, `haversineKm`, `getCity`
- `App/sims/busfahrt/README.md` — Modul-Überblick, Plattform-Hooks,
Bewertungs-Schwellen.
- `App/sims/busfahrt/assets/data/` — leerer Ordner für `cities.json`
und `orders.json`.
## Plattform-Hooks (vom Wrapper injiziert)
```js
window.BUSFAHRT_BASE // '/geograsim/.../sims/busfahrt/'
window.BUSFAHRT_SESSION_MODE // 'free' | 'teacher_started' | 'student_started' | 'locked'
window.BUSFAHRT_FORCED_LEVEL // null oder 1/2/3
window.BUSFAHRT_SESSION_ID // anonyme UUID
window.BUSFAHRT_API_BASE // '/geograsim/App/api'
window.BUSFAHRT_TILE_PROXY // Tile-Proxy-URL für Carto Positron
window.STUDENT_EASY // Boolean
```
## Verifikation
Lokal getestet:
- `localhost/geograsim/App/busfahrt` → 200 OK
- Sim-Hülle lädt mit Leaflet + Carto-Tiles, Topbar mit 🚌-Logo + 🏠-Cockpit
- Injection-Variablen drin, engine.js absolut verlinkt
- Schülerseite zeigt das Modul automatisch (DB-Eintrag, status='geplant'
→ erscheint LOCKED bis du auf 'beta' updatest, sobald Phase 1 testbar ist)
## Was du jetzt machen kannst — Phase 1 Schritte
1. **`cities.json`** schreiben — 3040 europäische Hauptstädte/Großstädte:
```json
[
{
"id": "paris",
"title": "Paris",
"country": "Frankreich",
"isCapital": true,
"lat": 48.8566,
"lon": 2.3522,
"population_million": 2.1,
"infoText": "Paris liegt an der Seine. ...",
"imagePath": "../../logistik/assets/cities/_original/paris.png",
"level": 1
}
]
```
2. **`orders.json`** schreiben — pro Level Aufträge nach Typ AD:
```json
[
{
"id": "ord-1",
"level": "l1",
"type": "A",
"cityId": "paris",
"prompt": "Fahre nach Paris — Frankreichs Hauptstadt liegt an der Seine.",
"tariffPerKm": 1.20,
"fixedFee": 200
}
]
```
3. **UI in `game.html` ergänzen:**
- Auftrags-Karte oben/links (mit `prompt`)
- Optional Single-Choice-Vorfrage bei Typ-B-Aufträgen
- Marker-Setzen bei Tap, Distanz-Polyline zur echten Position nach
dem Tap (nicht vorher als Live-Hilfe — siehe Briefing)
- 3-Versuche-Anzeige
- Info-Card-Modal nach Auflösung (Bild + Land + Beschreibung +
`infoText`)
4. **Status updaten** auf `'beta'` sobald Phase 1 spielbar:
```sql
UPDATE module_info SET status='beta' WHERE module_id='busfahrt';
```
## Hinweise
- **Sprachregel 4a:** keine „spielen / Spiel / Spieler" — im Skelett
habe ich „Bearbeiter*in" + „Auftrag" + „Tour" verwendet.
- **iPad-Pattern:** Modal-CSS-Vorlage findest du im Sonnensystem
(`App/sims/sonnensystem/game.html` `.ggs-modal-*`-Klassen) oder
Logistik (`.ggs-endscreen-*` im design-system.css). Beide Patterns
drüben nachlesen.
- **Tile-Proxy:** schon konfiguriert auf Carto Positron via
`window.BUSFAHRT_TILE_PROXY`. Standalone-Fallback fällt auf
direkten Carto-Aufruf zurück.
- **Sonnensystem läuft parallel** bei mir (Logistik). Falls du
Sync-Themen mit Atlas hast, schicke sie mir — ich übernehme.
## Quittung nicht nötig
Wenn Phase 1 läuft, einfach `_status.md` updaten und mir Bescheid geben
mit „Phase 1 fertig, Deploy erbeten".
Viel Erfolg —
— Logistik (in Atlas-Stellvertretung)