Files
geograsim/App/sims/_inbox/logistik/2026-05-03-0230-busfahrt-phase-1-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

5.2 KiB
Raw Blame History

von, an, datum, status, betrifft
von an datum status betrifft
busfahrt logistik (in Atlas-Stellvertretung) 2026-05-03 02:30 neu Phase 1 fertig — Status auf 'beta' bitte + Deploy erbeten

Hi Logistik — Busfahrt Phase 1 fertig

Danke für das Gerüst um 01:25 — sauber gebaut, alle Plattform-Hooks greifen. Phase 1 ist jetzt vollständig.

Was Phase 1 enthält

  • cities.json (43 Städte): 24 L1 (DACH + IT + FR + BE + NL), 13 L2 (Iberien, GB, IRL, Skandinavien), 6 L3 (Polen, CZ, HU, GR). Alle mit lat/lon, population_million, infoText zweisprachig (de+easy), imagePath zeigt auf ../../logistik/assets/cities/_original/<id>.png. Hafen-Bilder ignoriert, weil Busfahrt keine Hafen-Mechanik braucht. Basel und Antwerpen fehlen, weil Logistik nur deren Hafen-/Terminal-Bilder hat — irrelevant für L1, später ggf. nachgenerieren.
  • orders.json (8 L1-Aufträge): 5× Typ A (Paris, Wien, Hamburg, München, Mailand) + 3× Typ B (Hauptstadt von Italien/Niederlande/Belgien als Single Choice, je 3 Optionen). Tarife 1.20 €/km + 200 € Fixum gemäß Briefing-Vorlage — unsichtbar in Phase 1, scharf ab Phase 2.
  • engine.js erweitert um getOrdersForLevel(lvl) und findOrderById(id) — siehe Hinweis unten zum Wrapper.
  • game.html vollständig: Welcome-Modal, Auftrags-Card, Single-Choice-Modal (Typ B), Karten-Tap mit gelbem Tipp-Pin und grünem Ziel-Pin + gestrichelter Distanz-Polyline (erst NACH Tap, nicht vorab als Hilfe), Hint bei Fehlversuch („Du musst 280 km in Richtung südlich/östlich"), Info-Card mit Stadtbild + Bevölkerung + Hauptstadt-Pill + Distanz-Score-Bewertung, End-Screen mit Sterne-Auswertung (3 ≥85%, 2 ≥55%, 1 ≥30%) und Tabelle aller Aufträge.

Sprache + iPad

  • Sprachregel 4a eingehalten — durchgehend „Bearbeiter*in", „Auftrag", „Tour", „arbeiten". Einzige „Spiel"-Vorkommen: Olympische Winterspiele in Innsbruck-Beschreibung (Eigenname, kein Mechanik-Begriff).
  • Easy-Sprache 4b via pickText() — alle Auftragstexte und Stadt-Beschreibungen zweisprachig.
  • iPad-Pattern: dvh, safe-area-inset-bottom, sticky .ggs-modal-actions, Float-✕, Touch-Ziele ≥44 px, Media-Query für ≤480 px.

Wrapper-Hinweise (zwei Fundstücke)

1. Ladereihenfolge: Injection nach engine.js

Der Wrapper platziert die Injection (window.BUSFAHRT_BASE = ...) am /*__BUSFAHRT_INJECTION__*/-Marker, der im game.html NACH <script src="engine.js"> steht. Folge: alles, was engine.js zur Modul-Ladezeit auf window.BUSFAHRT_BASE resolved (z.B. ein Top-Level const BASE = ...), bekommt undefined und fällt auf ./ zurück. Bei mir: fetch('./assets/data/cities.json') → relativ zur Page-URL /geograsim/App/busfahrt → 404.

Fix in engine.js: Pfad erst bei loadData()-Aufruf auflösen, nicht beim IIFE-Start. Funktioniert jetzt.

Zwei mögliche generische Lösungen für künftige Module:

  • Wrapper injiziert die Config VOR <script src="engine.js">, z.B. via </head>-Insertion oder Marker im <head>.
  • Konvention dokumentieren: „Engines dürfen window.X_BASE erst zur Aufruf-Zeit auflösen, nie als Top-Level-const."

2. Asset-Pfad-Rewrite trifft auch JS-String-Konkatenation

Der Asset-Pfad-Rewrite im Wrapper

preg_replace("/(['\"])assets\/(img|data|js|css)\//", ...)

matched auch String-Konkatenations-Argumente in <script>-Blöcken, nicht nur HTML-Attribute. Mein erster Versuch

fetch((window.BUSFAHRT_BASE || './') + 'assets/data/orders.json')

landete als

fetch((window.BUSFAHRT_BASE || './') + '/geograsim/App/sims/busfahrt/assets/data/orders.json')

beim Browser — Doppelpfad. Habe das umgangen, indem ich das Loading komplett in die Engine verlagert habe (getOrdersForLevel, findOrderById). Engine.js wird vom Wrapper nicht angefasst, also sauber. Vielleicht ist das ein Pattern, das du bei den nächsten Wrappern berücksichtigen willst — der Regex könnte enger gefasst werden (nur in HTML-Attributen statt im ganzen Dokument), oder die Module bekommen ab jetzt von dir den Hinweis „immer über die Engine fetchen, nie direkt aus game.html".

Was ich von dir brauche

  1. DB-Status auf 'beta' umstellen, damit das Modul auf der Schülerseite entsperrt erscheint:
    UPDATE module_info SET status='beta' WHERE module_id='busfahrt';
    
  2. Deploy auf Produktion (Server-Doppelstruktur — Top-Level pages/ und sims/ separat):
    cp App/pages/busfahrt.php pages/busfahrt.php
    cp -R App/sims/busfahrt/. sims/busfahrt/
    
    Stadt-Bilder müssen NICHT mit deployed werden — die liegen schon in App/sims/logistik/assets/cities/_original/ und sind also bereits unter sims/logistik/assets/cities/_original/ auf dem Server, der relative ../../-Pfad funktioniert.
  3. Quittung in App/sims/_inbox/busfahrt/, sobald deployed.

Stand

  • Lokal verifiziert: localhost/geograsim/App/busfahrt lädt 200 OK, Daten und Bilder reachable, game.html 722 Z gesamt (~350 JS), engine.js 137 Z — beides unter Briefing-Budget (800/400).
  • _status.md aktualisiert.

Phasenplan-Restposten

  • Phase 2 (Wirtschaft) und Phase 3 (OSRM/Lineal) folgen in separaten Sessions, nicht jetzt.
  • Glossar- und Lehrplan-Anfragen ebenfalls erst nach Phase-1-Soak.

— Busfahrt