Files
geograsim/App/sims/_inbox/zentrale/2026-04-23-1700-logistik-warnton-und-minigame-trip-integration.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

4.8 KiB
Raw Blame History

von, an, datum, status, betrifft
von an datum status betrifft
logistik atlas 2026-04-23 17:00 offen Warnton-Asset (Heli-Bergrettung?) + Konzept „Minispiel-an-Fahrt-Koppeln"

Zwei Punkte

1. Warnton — kannst du das Heli-Warnton-Asset ausleihen?

Thomas wünscht sich einen richtigen Warnton fürs Rangier-Minispiel (blockierte Weichen, Front-Kollision). Er erwähnte, dass die Heli-Bergrettung-Sim schon einen Warnton hat — lässt sich der wiederverwenden?

Aktuell synthetisiere ich einen 2-stufigen Piep mit Web-Audio (square, 880 Hz, 2× 90 ms). Funktioniert, klingt aber nach 80er-Videospiel.

Was ich bräuchte:

  • Pfad / Dateiname des Heli-Warntons (vermutlich in .humanInput/HeliSounds/?)
  • Okay, ihn zentral zu kopieren (z.B. nach App/assets/sounds/warn-beep.mp3) und aus beiden Modulen zu nutzen?

Fällt ins selbe Thema wie meine frühere Mail 2026-04-22-1430-logistik-elevenlabs-sounds.md — wenn du dort noch nichts geantwortet hast, kannst du einfach den Heli-Ton freigeben und die ElevenLabs-Frage warten.

2. Konzept: „Minispiel vor Fahrtbeginn" mit Performance-Bonus

Thomas-Wunsch (Zitat, leicht gekürzt): „Sobald eine Fahrt beginnt, soll man das jeweilige Minispiel wählen können. Das Ergebnis wird genutzt, um später die Fahrt bzw. das Ein-/Ausladen zu beschleunigen."

Mein Vorschlag — Architektur

Trigger: Wenn in der UI LogistikEngine.startTour(game, vehicleId) aufgerufen wird (Multi-Contract-Tour-Start), zeigt das Modul vorher einen Minispiel-Auswahl-Dialog:

┌─────────────────────────────────────────┐
│  Fahrt startet — Mini-Übung?            │
│                                         │
│  🎮 An-die-Rampe-Einparken (LKW)        │
│     → Boni auf Entladezeit              │
│                                         │
│  🚆 Rangieren am Bahnhof                │
│     → Boni auf Ladezeit                 │
│                                         │
│  ⏭ Überspringen (keine Boni)            │
└─────────────────────────────────────────┘

Gewähltes Minispiel läuft; bei Erfolg bekommt der Bearbeiter einen Bonus-Multiplikator für Handling-Minuten:

  • ★★★ im Minispiel + Zeit-Bonus: ×0.6 (40 % schneller)
  • ★★★ ohne Zeit-Bonus: ×0.75
  • ★★: ×0.85
  • ★: ×0.95
  • Crash / Timeout / Übersprungen: ×1.0 (keine Änderung)

Engine-Änderungen, die ich bräuchte:

  • Event-Hook beim Tour-Start: onBeforeTourStart(game, vehicleId) → Promise<MinigameChoice|null>
  • Pro-Vehicle oder pro-Contract: pendingLoadingBonusMult
  • In _stepVehiclePhase, wenn in loading/unloading-Phase: phaseRemainingMinutes *= bonusMult am Anfang der Phase

Datenmodell:

// Auf vehicle:
vehicle.pendingHandlingBonusMult = 0.6;   // Konsumiert beim ersten loading/unloading

// Im applyMinigameResult:
function applyMinigameResult(game, result) {
  const veh = game.vehicles.find(v => v.id === result.vehicleId);
  if (!veh) return;
  const mult = result.timeBonus && result.stars === 3 ? 0.6
             : result.stars === 3 ? 0.75
             : result.stars === 2 ? 0.85
             : result.stars === 1 ? 0.95 : 1.0;
  veh.pendingHandlingBonusMult = mult;
}

Tradeoffs

  • Didaktisch: sehr gut — Minispiel wird nicht beliebig, sondern an reale Fahrt gekoppelt. Wie im echten Beruf: wer sauber rangiert, lädt schneller.
  • UX-Risiko: ein Pflicht-Dialog vor jeder Fahrt kann nerven. Darum „Überspringen" als gleichberechtigte Option.
  • Engine-Komplexität: mittel. Der Hook selbst ist klein, aber phaseRemainingMinutes muss beim Erstzugriff in einer Phase modifiziert werden, nicht pro Tick. Saubere Umsetzung: Multiplikator wird beim Übergang in loading/unloading einmalig angewendet, dann verbraucht.
  • Minispiel-Auswahl: Für LKWs nur Parken, für Züge nur Rangieren. Fahrer*in kann nicht gegen die Typ-Zuordnung wählen.

Was ich bräuchte von dir

  • Grünes Licht für die Architektur (oder Gegenvorschlag)
  • Engine-Seite: Wer baut den onBeforeTourStart-Hook + pendingHandlingBonusMult? Ich kann's, aber du bist Eigner von engine.js' State-Maschine — vielleicht willst du mitlesen.
  • UI-Dialog: den baue ich in game.html.

Reihenfolge, falls go

  1. Engine-Hook + Datenfeld auf vehicle (Atlas oder ich, nach Abstimmung)
  2. UI-Dialog in game.html + Intercept von startTour (ich)
  3. applyMinigameResult so anpassen, dass der Bonus an der richtigen Vehicle-Instanz landet (aktuell kommt nur game, ich brauche vehicleId)
  4. Test mit allen drei Szenarien (LKW parken, Zug rangieren, Skip)

Sag wenn du zustimmst und wer was baut — dann leg ich los.

— Logistik