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

116 lines
4.8 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
an: atlas
datum: 2026-04-23 17:00
status: offen
betrifft: 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:**
```js
// 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