mirror of
https://github.com/OpenSquawk/OpenSquawk
synced 2026-08-05 00:46:00 +08:00
refactor(flightlab): rewrite takeoff texts for simulator context and auto-stop sounds on phase change
Rewrote all takeoff scenario texts from passive fear-of-flying coaching to active simulator operation instructions (thrust levers, sidestick, rudder pedals, gear lever, instrument readings). Stop looping ambient sounds automatically when transitioning to phases that don't reference them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -615,9 +615,7 @@ watch(() => engine.currentPhaseId.value, async (newId, oldId) => {
|
||||
if (!newId || newId === oldId) return
|
||||
const phase = engine.currentPhase.value
|
||||
if (!phase) return
|
||||
if (phase.sounds && phase.sounds.length > 0) {
|
||||
audio.handlePhaseSounds(phase.sounds)
|
||||
}
|
||||
audio.handlePhaseSounds(phase.sounds ?? [])
|
||||
if (phase.atcMessage) {
|
||||
await audio.speakAtcMessage(phase.atcMessage, { speed: 0.9, readability: 5 })
|
||||
}
|
||||
|
||||
@@ -98,6 +98,16 @@ export function useFlightLabAudio() {
|
||||
}
|
||||
|
||||
function handlePhaseSounds(sounds: FlightLabSound[]) {
|
||||
// Collect sound IDs that the new phase explicitly manages
|
||||
const managedIds = new Set(sounds.map((s) => s.id))
|
||||
|
||||
// Stop any active looping sounds that aren't referenced by the new phase
|
||||
for (const [id, entry] of activeSounds.value) {
|
||||
if (!managedIds.has(id) && entry.source.loop) {
|
||||
stopAmbientSound(id)
|
||||
}
|
||||
}
|
||||
|
||||
for (const s of sounds) {
|
||||
switch (s.action) {
|
||||
case 'play':
|
||||
|
||||
@@ -14,50 +14,52 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 0: Welcome ---
|
||||
{
|
||||
id: 'welcome',
|
||||
atcMessage: 'Hey! Willkommen im Cockpit. Ich bin dein Begleiter heute, du kannst mich jederzeit alles fragen. Erstmal, sitz bequem? Kopfhörer passen gut? Schau dich ruhig mal um. Sieht wild aus mit den ganzen Knöpfen, oder? Keine Sorge, wir brauchen heute fast nichts davon. Ich sag dir genau was du anfassen musst.',
|
||||
explanation: 'Du sitzt im Cockpit eines Airbus A320 am Flughafen Frankfurt. Nimm dir Zeit, dich umzuschauen.',
|
||||
instructorNote: 'Teilnehmer ist gerade angekommen. Körpersprache beobachten. Bei sichtbarer Anspannung ggf. eingreifen.',
|
||||
atcMessage: 'Hey! Willkommen im Cockpit. Ich bin dein Co-Pilot heute und führe dich durch deinen ersten Start. Schau dich ruhig erstmal um. Sieht nach vielen Knöpfen aus, oder? Keine Sorge, ich sag dir genau welche du wann anfassen musst. Den Rest ignorieren wir einfach.',
|
||||
explanation: 'Du sitzt auf dem linken Sitz - dem Captain-Sitz. Rechts neben dir wäre normalerweise der Co-Pilot.',
|
||||
instructorNote: 'Teilnehmer ist gerade angekommen. Kurz orientieren lassen.',
|
||||
buttons: [
|
||||
{ id: 'ready', label: 'Ja, bin bereit!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'nervous', label: 'Mir ist etwas mulmig', icon: 'mdi-emoticon-neutral', next: 'welcome_comfort', type: 'comfort', instructorAlert: 'Teilnehmer ist nervös' },
|
||||
{ id: 'tellmore', label: 'Erzähl mir erstmal mehr', icon: 'mdi-information', next: 'welcome_detail', type: 'info' },
|
||||
{ id: 'ready', label: 'Bin bereit, los gehts!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'nervous', label: 'Erstmal orientieren', icon: 'mdi-emoticon-neutral', next: 'welcome_comfort', type: 'comfort', instructorAlert: 'Teilnehmer möchte sich erstmal orientieren' },
|
||||
{ id: 'tellmore', label: 'Was ist das hier alles?', icon: 'mdi-information', next: 'welcome_detail', type: 'info' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'welcome_comfort',
|
||||
atcMessage: 'Das ist völlig okay, und total normal! Jeder der hier zum ersten Mal sitzt, dem gehts genauso. Weißt du was, lass uns kurz zusammen durchatmen. Einmal tief einatmen... und langsam wieder aus. Nochmal. Gut so. Wir machen hier alles in deinem Tempo. Du bestimmst wann es weitergeht, okay?',
|
||||
explanation: 'Atme ruhig ein und aus. Es gibt keinen Zeitdruck.',
|
||||
instructorNote: 'Teilnehmer hat Nervosität signalisiert. Aufmerksam bleiben.',
|
||||
atcMessage: 'Klar, nimm dir einen Moment. Direkt vor dir hast du zwei große Bildschirme. Der linke zeigt Geschwindigkeit und Höhe, der rechte zeigt die Navigation. In der Mitte zwischen den Sitzen sind die Schubhebel, mit denen steuerst du die Triebwerke. Und links neben deinem Sitz ist der Sidestick, das ist quasi das Lenkrad. Wenn du soweit bist, gehts los.',
|
||||
explanation: 'PFD links, ND rechts, Schubhebel in der Mitte, Sidestick links.',
|
||||
instructorNote: 'Teilnehmer orientiert sich. Zeit lassen.',
|
||||
buttons: [
|
||||
{ id: 'ready_after_comfort', label: 'Okay, ich bin bereit', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'still_nervous', label: 'Noch einen Moment', icon: 'mdi-timer-sand', next: 'welcome_comfort_2', type: 'comfort' },
|
||||
{ id: 'ready_after_comfort', label: 'Okay, hab den Überblick', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'still_nervous', label: 'Was ist der Sidestick?', icon: 'mdi-timer-sand', next: 'welcome_comfort_2', type: 'comfort' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'welcome_comfort_2',
|
||||
atcMessage: 'Kein Problem, nimm dir alle Zeit die du brauchst. Wusstest du, dass dieser Flieger hier einer der sichersten der Welt ist? Der A320 fliegt seit über 35 Jahren und Millionen Menschen fliegen jeden Tag damit. Und heute sitzt du vorne drin, das ist doch was, oder?',
|
||||
instructorNote: 'Zweite Nervositäts-Runde. Bei Bedarf mündlich im Raum eingreifen.',
|
||||
atcMessage: 'Der Sidestick ist der kleine Steuerknüppel links neben deinem Sitz. Damit steuerst du das Flugzeug - nach hinten ziehen heißt Nase hoch, nach vorne drücken Nase runter, und seitlich für Kurven. Im Gegensatz zu Boeing hat Airbus kein großes Steuerhorn vor dir, sondern diesen kompakten Stick. Fass ihn ruhig mal an, du merkst dass er sich in alle Richtungen bewegen lässt.',
|
||||
explanation: 'Sidestick = Steuerknüppel links. Hinten = Nase hoch, vorne = Nase runter.',
|
||||
instructorNote: 'Sidestick-Erklärung. Teilnehmer soll ihn mal anfassen.',
|
||||
buttons: [
|
||||
{ id: 'ready_after_comfort_2', label: 'Okay, starten wir!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'ready_after_comfort_2', label: 'Verstanden, weiter!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'welcome_detail',
|
||||
atcMessage: 'Klar! Also, wir sitzen hier in einem echten Airbus A320 Cockpit. Das ist der Flugzeugtyp, mit dem du wahrscheinlich schon mal als Passagier geflogen bist. All die Knöpfe und Schalter, die sehen erst überwältigend aus, aber die meisten brauchen wir heute gar nicht. Wir machen heute einen Start, von hier auf der Startbahn bis auf 3 Kilometer Höhe. Ich erklär dir alles Schritt für Schritt.',
|
||||
atcMessage: 'Ganz kurz von links nach rechts: Links die großen Displays sind deine Fluginstrumente - Geschwindigkeit, Höhe, Lage. In der Mitte oben das ist das Overhead Panel mit Schaltern für Systeme wie Klimaanlage und Hydraulik, das lassen wir heute in Ruhe. Zwischen den Sitzen die zwei Hebel sind die Schubhebel für die Triebwerke. Und das Pedestal darunter hat Funk und Transponder. Für den Start brauchst du eigentlich nur Schubhebel, Sidestick und den Fahrwerk-Hebel.',
|
||||
explanation: 'Für den Start relevant: Schubhebel, Sidestick, Fahrwerk-Hebel.',
|
||||
buttons: [
|
||||
{ id: 'ready_after_detail', label: 'Alles klar, weiter!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'questions', label: 'Ich hab noch Fragen', icon: 'mdi-help-circle', next: 'welcome_questions', type: 'info' },
|
||||
{ id: 'questions', label: 'Wo ist der Fahrwerk-Hebel?', icon: 'mdi-help-circle', next: 'welcome_questions', type: 'info' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'welcome_questions',
|
||||
atcMessage: 'Frag ruhig! Wenn du was über einen bestimmten Knopf wissen willst, zeig einfach drauf, oder frag mich einfach. Wir haben alle Zeit der Welt.',
|
||||
atcMessage: 'Der Fahrwerk-Hebel ist rechts vorne, direkt neben dem unteren Bildschirm in der Mitte. Der sieht aus wie ein kleines Rad. Den brauchst du nachher erst wenn wir in der Luft sind. Aber keine Sorge, ich sag dir genau wann.',
|
||||
buttons: [
|
||||
{ id: 'ready_after_questions', label: 'Okay, bin bereit!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
{ id: 'ready_after_questions', label: 'Okay, starten wir!', icon: 'mdi-check-circle', next: 'briefing', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -65,19 +67,19 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 1: Briefing ---
|
||||
{
|
||||
id: 'briefing',
|
||||
atcMessage: 'Okay, ich erklär dir kurz was wir heute machen. Wir stehen hier auf der Startbahn 25 Center in Frankfurt. Das ist eine der längsten Startbahnen in Europa, über 4 Kilometer lang. Wir werden gemeinsam starten und ganz gemütlich auf 10.000 Fuß steigen, das sind ungefähr 3 Kilometer Höhe. Ich sag dir jeden einzelnen Schritt vorher an. Du musst nichts wissen und nichts auswendig können. Ich bin die ganze Zeit da.',
|
||||
atcMessage: 'Okay, kurzes Briefing. Wir stehen auf der Startbahn 25 Center in Frankfurt, einer der längsten Bahnen Europas. Unser Plan: Du schiebst die Schubhebel nach vorne, wir beschleunigen, bei 140 Knoten ziehst du den Sidestick nach hinten und wir heben ab. Dann Fahrwerk einfahren und auf 10.000 Fuß steigen. Ich sag dir jeden Handgriff vorher an, du musst dir nichts merken.',
|
||||
explanation: 'Startbahn 25C, Frankfurt. Ziel: 10.000 Fuß (ca. 3 km Höhe).',
|
||||
instructorNote: 'Briefing Phase. Teilnehmer sollte aufmerksam zuhören.',
|
||||
instructorNote: 'Briefing Phase. Zusammenfassung der Schritte.',
|
||||
buttons: [
|
||||
{ id: 'lets_go', label: 'Okay, los gehts!', icon: 'mdi-play-circle', next: 'runway', type: 'primary' },
|
||||
{ id: 'lets_go', label: 'Verstanden, los gehts!', icon: 'mdi-play-circle', next: 'runway', type: 'primary' },
|
||||
{ id: 'how_long', label: 'Wie lange dauert das?', icon: 'mdi-clock', next: 'briefing_duration', type: 'info' },
|
||||
{ id: 'what_if', label: 'Was wenn was schiefgeht?', icon: 'mdi-shield-check', next: 'briefing_safety', type: 'info' },
|
||||
{ id: 'what_if', label: 'Was ist wenn ich was falsch mache?', icon: 'mdi-shield-check', next: 'briefing_safety', type: 'info' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'briefing_duration',
|
||||
atcMessage: 'Das Ganze dauert ungefähr 10 bis 15 Minuten, aber wie gesagt, wir gehen in deinem Tempo. Wenn du irgendwo eine Pause brauchst, sag einfach Bescheid.',
|
||||
atcMessage: 'Der Start selbst dauert nur ein paar Minuten. Mit Erklärungen rechne so mit 10 bis 15 Minuten insgesamt. Wir gehen in deinem Tempo, kein Stress.',
|
||||
buttons: [
|
||||
{ id: 'go_after_duration', label: 'Gut, los gehts!', icon: 'mdi-play-circle', next: 'runway', type: 'primary' },
|
||||
],
|
||||
@@ -85,7 +87,7 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'briefing_safety',
|
||||
atcMessage: 'Gute Frage! Erstens: Wir sind hier in einem Simulator, es kann wirklich überhaupt nichts passieren. Zweitens: Im echten Flugzeug gibt es für alles doppelte und dreifache Sicherheitssysteme. Die Piloten trainieren genau solche Situationen regelmäßig. Aber heute hier ist alles sicher, versprochen.',
|
||||
atcMessage: 'Gar kein Problem! Wir sind im Simulator, hier kann nichts kaputtgehen. Wenn du was falsch machst, korrigieren wir es einfach. Im schlimmsten Fall starten wir die Situation nochmal. Das ist ja genau der Sinn vom Simulator, üben ohne Risiko.',
|
||||
buttons: [
|
||||
{ id: 'go_after_safety', label: 'Okay, dann los!', icon: 'mdi-play-circle', next: 'runway', type: 'primary' },
|
||||
],
|
||||
@@ -95,12 +97,12 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 2: On the Runway ---
|
||||
{
|
||||
id: 'runway',
|
||||
atcMessage: 'So, wir stehen jetzt auf der Startbahn. Schau mal nach vorne durch die Scheibe. Siehst du die Lichter auf der Bahn? Die grünen und die weißen? Da entlang gehts gleich. Links und rechts ist Gras, vor uns die lange Bahn. Die Bahn ist fast so breit wie eine Autobahn. Alles ganz sicher hier.',
|
||||
explanation: 'Schau nach vorne - die Lichter zeigen die Startbahn.',
|
||||
instructorNote: 'Teilnehmer orientiert sich auf der Bahn. Sicherstellen dass er/sie nach vorne schaut.',
|
||||
atcMessage: 'So, wir stehen auf der Startbahn. Schau mal auf den linken Bildschirm vor dir, das ist dein Primary Flight Display. Die gelbe Bandanzeige links zeigt die Geschwindigkeit in Knoten, rechts die Höhe in Fuß. In der Mitte siehst du den künstlichen Horizont, der zeigt dir die Fluglage. Gerade steht alles auf Null, logisch, wir stehen ja noch. Jetzt leg mal deine linke Hand auf die Schubhebel in der Mitte.',
|
||||
explanation: 'PFD: Speed-Tape links, Altitude rechts, Fluglage in der Mitte. Hand an die Schubhebel.',
|
||||
instructorNote: 'Teilnehmer soll die Instrumente lesen und die Schubhebel finden.',
|
||||
buttons: [
|
||||
{ id: 'see_runway', label: 'Ja, ich seh die Bahn!', icon: 'mdi-eye', next: 'engines_pre', type: 'primary' },
|
||||
{ id: 'where_look', label: 'Wo genau soll ich hinschauen?', icon: 'mdi-help-circle', next: 'runway_help', type: 'info' },
|
||||
{ id: 'see_runway', label: 'Hand liegt auf den Hebeln', icon: 'mdi-hand-pointing-right', next: 'engines_pre', type: 'primary' },
|
||||
{ id: 'where_look', label: 'Wo sind die Schubhebel?', icon: 'mdi-help-circle', next: 'runway_help', type: 'info' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'engine-idle', action: 'play', volume: 0.15, loop: true },
|
||||
@@ -108,9 +110,9 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'runway_help',
|
||||
atcMessage: 'Schau geradeaus durch die große Scheibe vor dir. Du siehst einen langen grauen Streifen, das ist die Startbahn. Darauf sind weiße Striche und am Rand grüne Lichter. Ganz am Ende siehst du vielleicht Bäume oder Gebäude, da ist das Ende der Bahn.',
|
||||
atcMessage: 'Die Schubhebel sind die zwei Hebel zwischen den Sitzen, auf dem Mittelpedestal. Sie stehen gerade auf Leerlauf, also ganz hinten. Gleich schiebst du sie nach vorne. Leg mal eine Hand drauf, damit du weißt wie sie sich anfühlen.',
|
||||
buttons: [
|
||||
{ id: 'see_now', label: 'Ah ja, jetzt seh ichs!', icon: 'mdi-eye', next: 'engines_pre', type: 'primary' },
|
||||
{ id: 'see_now', label: 'Hab sie, weiter!', icon: 'mdi-hand-pointing-right', next: 'engines_pre', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -118,32 +120,32 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 3: Engine Spool Up ---
|
||||
{
|
||||
id: 'engines_pre',
|
||||
atcMessage: 'Okay, jetzt kommt der spannende Teil! Gleich werden die Triebwerke hochgefahren. Das wird lauter, aber das ist völlig normal. Die Triebwerke sind die zwei großen runden Düsen unter den Flügeln. Das Geräusch kennst du vom Fliegen als Passagier, nur hörst du es jetzt von vorne. Bist du bereit?',
|
||||
explanation: 'Gleich wird es lauter - die Triebwerke werden hochgefahren.',
|
||||
instructorNote: 'Vor Schub-Erhöhung. Auf Anspannung achten.',
|
||||
atcMessage: 'Gut. Jetzt zum Schub setzen. Du schiebst gleich die Schubhebel zügig nach vorne bis etwa zur Hälfte des Wegs. Schau dabei auf den Bildschirm oben in der Mitte, da siehst du die N1-Anzeige. Das ist die Drehzahl der Triebwerke in Prozent. Wir brauchen ungefähr 85 Prozent für den Start. Bereit?',
|
||||
explanation: 'Schubhebel nach vorne schieben. Ziel: N1 ca. 85%.',
|
||||
instructorNote: 'Vor Schub-Erhöhung. Erklären wo N1 abzulesen ist.',
|
||||
buttons: [
|
||||
{ id: 'engines_ready', label: 'Ja, Triebwerke an!', icon: 'mdi-engine', next: 'engines_spool', type: 'primary' },
|
||||
{ id: 'engines_nervous', label: 'Wird das sehr laut?', icon: 'mdi-volume-high', next: 'engines_loud_info', type: 'info' },
|
||||
{ id: 'engines_ready', label: 'Bereit, Schub setzen!', icon: 'mdi-engine', next: 'engines_spool', type: 'primary' },
|
||||
{ id: 'engines_nervous', label: 'Was ist N1?', icon: 'mdi-help-circle', next: 'engines_loud_info', type: 'info' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'engines_loud_info',
|
||||
atcMessage: 'Es wird deutlich lauter, ja. Ungefähr so wie wenn du auf der Autobahn das Fenster aufmachst. Deine Kopfhörer dämpfen das etwas. Und du wirst merken, nach ein paar Sekunden gewöhnt man sich daran. Das Geräusch ist Power, die Triebwerke arbeiten für uns.',
|
||||
atcMessage: 'N1 ist die Drehzahl des vorderen Fans im Triebwerk, angegeben in Prozent der maximalen Drehzahl. Bei 85 Prozent haben wir genug Schub für den Start. Du siehst die Anzeige auf dem oberen mittleren Display, zwei runde Anzeigen für das linke und rechte Triebwerk. Wenn du die Hebel nach vorne schiebst, steigen die Werte.',
|
||||
buttons: [
|
||||
{ id: 'engines_ok', label: 'Okay, mach die Triebwerke an', icon: 'mdi-engine', next: 'engines_spool', type: 'primary' },
|
||||
{ id: 'engines_ok', label: 'Verstanden, Schub setzen!', icon: 'mdi-engine', next: 'engines_spool', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'engines_spool',
|
||||
atcMessage: 'Schub wird gesetzt! Hörst du wie es lauter wird? Das Pfeifen und Brummen, das sind die Triebwerke die auf volle Leistung gehen. Spürst du wie es dich ganz leicht in den Sitz drückt? Das ist die Kraft der Triebwerke. Alles völlig normal.',
|
||||
explanation: 'Die Triebwerke laufen auf voller Leistung. Du spürst den Schub.',
|
||||
instructorNote: 'Schub gesetzt. Engine Sound läuft. Auf Reaktion achten.',
|
||||
atcMessage: 'Los, schieb die Hebel jetzt nach vorne! Schön zügig. Schau auf die N1-Anzeige oben... die Werte steigen. Wir wollen so auf 85 Prozent kommen. Wenn der Schub steht, lösen wir die Parkbremse. Die Parkbremse ist der Hebel mit dem P unten am Pedestal, den ziehst du raus.',
|
||||
explanation: 'Schubhebel nach vorne auf 85% N1. Dann Parkbremse lösen.',
|
||||
instructorNote: 'Schub wird gesetzt. Teilnehmer bedient die Hebel selbst.',
|
||||
buttons: [
|
||||
{ id: 'engines_continue', label: 'Okay, weiter!', icon: 'mdi-arrow-right-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
{ id: 'engines_loud', label: 'Das ist ganz schön laut!', icon: 'mdi-volume-high', next: 'engines_loud_comfort', type: 'comfort' },
|
||||
{ id: 'engines_pause', label: 'Kurz pausieren', icon: 'mdi-pause-circle', next: 'engines_pause_phase', type: 'comfort', instructorAlert: 'Teilnehmer braucht Pause bei Triebwerk-Phase' },
|
||||
{ id: 'engines_continue', label: 'Schub steht, Bremse gelöst!', icon: 'mdi-arrow-right-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
{ id: 'engines_loud', label: 'Wo ist die Parkbremse?', icon: 'mdi-help-circle', next: 'engines_loud_comfort', type: 'comfort' },
|
||||
{ id: 'engines_pause', label: 'Moment, ich komm nicht mit', icon: 'mdi-pause-circle', next: 'engines_pause_phase', type: 'comfort', instructorAlert: 'Teilnehmer braucht Unterstützung beim Schub setzen' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'engine-idle', action: 'stop' },
|
||||
@@ -164,18 +166,18 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'engines_loud_comfort',
|
||||
atcMessage: 'Ja, das ist ordentlich Power! Aber weißt du was cool ist? Das Geräusch bedeutet dass alles perfekt läuft. Wenn die Triebwerke leise wären, dann würde was fehlen. Laut heißt hier: alles gut, wir haben Schub. Du machst das super!',
|
||||
atcMessage: 'Die Parkbremse ist unten am Pedestal, zwischen den Sitzen, etwas weiter vorne. Ein kleiner Hebel mit einem P drauf. Den ziehst du einfach raus oder drückst ihn, je nach Sim-Modell. Sobald die Bremse gelöst ist, rollt das Flugzeug los.',
|
||||
buttons: [
|
||||
{ id: 'continue_after_loud', label: 'Stimmt, weiter gehts!', icon: 'mdi-arrow-right-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
{ id: 'continue_after_loud', label: 'Gefunden, Bremse gelöst!', icon: 'mdi-arrow-right-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'engines_pause_phase',
|
||||
atcMessage: 'Kein Problem! Wir machen eine kurze Pause. Atme ein paar Mal tief durch. Wir rollen hier nicht weg, versprochen. Wenn du bereit bist, gehts weiter.',
|
||||
instructorNote: 'Pause angefordert. Ggf. mündlich nachfragen ob alles okay ist.',
|
||||
atcMessage: 'Kein Stress, machen wir Schritt für Schritt. Erstens: Schubhebel nach vorne bis die N1 auf etwa 85 steht. Zweitens: Parkbremse lösen. Mehr ist es nicht. Probier es in Ruhe.',
|
||||
instructorNote: 'Teilnehmer braucht Hilfe. Ggf. mündlich die Hebel zeigen.',
|
||||
buttons: [
|
||||
{ id: 'resume_after_pause', label: 'Okay, weiter', icon: 'mdi-play-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
{ id: 'resume_after_pause', label: 'Okay, hab es', icon: 'mdi-play-circle', next: 'takeoff_roll', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -183,13 +185,13 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 4: Takeoff Roll ---
|
||||
{
|
||||
id: 'takeoff_roll',
|
||||
atcMessage: 'Wir rollen jetzt los! Du spürst wie es dich stärker in den Sitz drückt. Das ist nur die Beschleunigung, wie bei einem richtig schnellen Auto. Die Bahn rumpelt ein bisschen unter uns, das sind die Fugen im Beton. Wir werden jetzt schnell schneller. Schau nach vorne auf die Bahn!',
|
||||
explanation: 'Der Startlauf beginnt. Das Rumpeln sind die Fugen in der Startbahn.',
|
||||
instructorNote: 'Startlauf beginnt. Kritische Phase für Angstpatienten. Aufmerksam bleiben.',
|
||||
atcMessage: 'Wir rollen! Das Flugzeug beschleunigt jetzt auf der Bahn. Schau auf das Speed-Tape links auf deinem Display, die Geschwindigkeit steigt. Halte das Flugzeug mit den Ruderpedalen auf der Mittellinie. Die Pedale unten an deinen Füßen, links und rechts. Leichte Korrekturen reichen. Bei 140 Knoten sage ich dir Bescheid, dann ziehst du den Sidestick.',
|
||||
explanation: 'Ruderpedal für Richtung halten. Bei 140 Knoten rotieren.',
|
||||
instructorNote: 'Startlauf. Teilnehmer hält Richtung mit Pedalen. Speed-Tape beobachten.',
|
||||
buttons: [
|
||||
{ id: 'roll_continue', label: 'Weiter!', icon: 'mdi-arrow-right-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'roll_rumble', label: 'Es rumpelt so!', icon: 'mdi-vibrate', next: 'roll_rumble_explain', type: 'info' },
|
||||
{ id: 'roll_afraid', label: 'Ich hab Angst', icon: 'mdi-emoticon-sad', next: 'roll_afraid_comfort', type: 'comfort', instructorAlert: 'ANGST - Teilnehmer hat Angst beim Startlauf' },
|
||||
{ id: 'roll_continue', label: 'Speed steigt!', icon: 'mdi-arrow-right-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'roll_rumble', label: 'Welche Pedale?', icon: 'mdi-help-circle', next: 'roll_rumble_explain', type: 'info' },
|
||||
{ id: 'roll_afraid', label: 'Es zieht nach links/rechts!', icon: 'mdi-swap-horizontal', next: 'roll_afraid_comfort', type: 'comfort', instructorAlert: 'Teilnehmer hat Probleme mit Richtungskontrolle' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'runway-rumble', action: 'play', volume: 0.5, loop: true },
|
||||
@@ -208,27 +210,27 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'roll_rumble_explain',
|
||||
atcMessage: 'Das Rumpeln kommt von den Rädern auf der Betonbahn. Die Bahn ist aus einzelnen Betonplatten und dazwischen sind kleine Fugen. Genau wie wenn du mit dem Auto über Kopfsteinpflaster fährst. Das hört sofort auf wenn wir in der Luft sind, versprochen!',
|
||||
atcMessage: 'Die Ruderpedal sind die zwei Pedale unten am Boden bei deinen Füßen. Die funktionieren wie beim Auto-Lenken, nur mit den Füßen. Linkes Pedal drücken lenkt nach links, rechtes nach rechts. Beim Rollen auf der Bahn halten die das Bugrad gerade. Nur sanfte Korrekturen, nicht treten!',
|
||||
buttons: [
|
||||
{ id: 'rumble_ok', label: 'Alles klar, weiter!', icon: 'mdi-arrow-right-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'rumble_ok', label: 'Verstanden, ich halte die Richtung', icon: 'mdi-arrow-right-circle', next: 'rotation', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'roll_afraid_comfort',
|
||||
atcMessage: 'Hey, das ist völlig okay. Du bist absolut sicher hier. Das Rumpeln hört gleich auf, sobald wir in der Luft sind. Atme einmal tief ein... und langsam wieder aus. Gut so. Du machst das großartig. Das was du gerade spürst, das ist Adrenalin. Das ist dein Körper der sagt hey, das ist aufregend. Wollen wir weitermachen?',
|
||||
instructorNote: 'ANGST-Reaktion beim Startlauf. Mündlich unterstützen falls nötig.',
|
||||
atcMessage: 'Das ist normal am Anfang. Nur ganz leicht gegentreten, kleine Bewegungen reichen. Nicht ruckartig, sondern sanft. Das Flugzeug reagiert mit etwas Verzögerung. Schau geradeaus auf die Mittellinie der Bahn und halte die Pedale ruhig. Überkorrekturen sind der typische Anfängerfehler.',
|
||||
instructorNote: 'Richtungsprobleme beim Startlauf. Ggf. mündlich korrigieren.',
|
||||
buttons: [
|
||||
{ id: 'afraid_continue', label: 'Ja, weiter', icon: 'mdi-check-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'afraid_stop', label: 'Ich brauch noch einen Moment', icon: 'mdi-pause-circle', next: 'roll_pause', type: 'comfort' },
|
||||
{ id: 'afraid_continue', label: 'Passt jetzt besser', icon: 'mdi-check-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'afraid_stop', label: 'Nochmal erklären', icon: 'mdi-pause-circle', next: 'roll_pause', type: 'comfort' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'roll_pause',
|
||||
atcMessage: 'Nimm dir alle Zeit. Du bestimmst das Tempo. Und denk dran: Es ist alles nur Simulation, du bist hier sicher. Wenn du soweit bist, gehts weiter.',
|
||||
atcMessage: 'Okay, ganz einfach: Füße locker auf die Pedale, Blick geradeaus auf die Mittelmarkierung der Bahn. Wenn die Nase nach links zieht, rechtes Pedal ein klein bisschen drücken. Und umgekehrt. So hältst du die Richtung auf der Bahn.',
|
||||
buttons: [
|
||||
{ id: 'pause_continue', label: 'Okay, ich bin bereit', icon: 'mdi-play-circle', next: 'rotation', type: 'primary' },
|
||||
{ id: 'pause_continue', label: 'Verstanden, weiter', icon: 'mdi-play-circle', next: 'rotation', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -236,12 +238,12 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 5: Rotation ---
|
||||
{
|
||||
id: 'rotation',
|
||||
atcMessage: 'Und jetzt... wir heben ab! Spürst du das? Das Rumpeln hört auf! Wir sind in der Luft! Das leichte Kribbeln im Bauch, das kennt jeder, das ist wie bei einer Achterbahn. Schau mal nach rechts oder links raus wenn du magst, du siehst wie der Boden kleiner wird. Frankfurt von oben!',
|
||||
explanation: 'Wir haben abgehoben! Das Kribbeln im Bauch ist völlig normal.',
|
||||
instructorNote: 'Abheben. Oft emotionaler Moment. Positiv verstärken.',
|
||||
atcMessage: 'Rotate! Jetzt den Sidestick sanft nach hinten ziehen! Nicht ruckartig, sondern gleichmäßig. Schau auf den Horizont auf deinem Display, die Nase geht hoch. Wir wollen etwa 15 Grad Pitch, das siehst du an der gelben Markierung über dem Horizont. Gut so, wir heben ab!',
|
||||
explanation: 'Sidestick nach hinten ziehen. Ziel: ca. 15° Pitch (Nase hoch).',
|
||||
instructorNote: 'Rotation. Teilnehmer zieht Sidestick. Pitch-Guidance beachten.',
|
||||
buttons: [
|
||||
{ id: 'rotation_wow', label: 'Wow!', icon: 'mdi-star', next: 'gear_retract', type: 'primary' },
|
||||
{ id: 'rotation_belly', label: 'Das Kribbeln im Bauch...', icon: 'mdi-emoticon-neutral', next: 'rotation_belly_explain', type: 'info' },
|
||||
{ id: 'rotation_wow', label: 'Wir fliegen!', icon: 'mdi-star', next: 'gear_retract', type: 'primary' },
|
||||
{ id: 'rotation_belly', label: 'Wie viel Pitch?', icon: 'mdi-angle-acute', next: 'rotation_belly_explain', type: 'info' },
|
||||
{ id: 'rotation_continue', label: 'Weiter', icon: 'mdi-arrow-right-circle', next: 'gear_retract', type: 'primary' },
|
||||
],
|
||||
sounds: [
|
||||
@@ -262,9 +264,9 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'rotation_belly_explain',
|
||||
atcMessage: 'Das Kribbeln kommt daher, dass sich der Winkel ändert. Die Nase geht hoch und du spürst kurz so eine Leichtigkeit, wie in einem Aufzug der schnell anfährt. Das dauert nur ein paar Sekunden und hört dann auf. Jeder hat das, sogar die Piloten spüren das noch.',
|
||||
atcMessage: 'Auf deinem PFD siehst du den künstlichen Horizont in der Mitte. Da sind Linien mit Zahlen dran, die zeigen den Pitch-Winkel. 15 Grad heißt die Flugzeugmarkierung steht zwei Striche über dem Horizont. Zu viel Pitch und wir werden zu langsam, zu wenig und wir steigen kaum. 15 Grad ist der Sweet Spot für den A320.',
|
||||
buttons: [
|
||||
{ id: 'belly_ok', label: 'Okay, weiter!', icon: 'mdi-arrow-right-circle', next: 'gear_retract', type: 'primary' },
|
||||
{ id: 'belly_ok', label: 'Verstanden, weiter!', icon: 'mdi-arrow-right-circle', next: 'gear_retract', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -272,13 +274,13 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 6: Gear Retraction ---
|
||||
{
|
||||
id: 'gear_retract',
|
||||
atcMessage: 'Jetzt fahren wir die Räder ein. Gleich hörst du ein Geräusch unter dir. Ein Rumpeln, ein Klacken und dann ein Bumm wenn die Klappen zugehen. Das sind die Räder die in den Bauch vom Flugzeug hochfahren. Genau das Geräusch was du als Passagier auch immer hörst, kurz nach dem Start. Jetzt weißt du was es ist!',
|
||||
explanation: 'Die Räder werden eingefahren. Das Geräusch ist das Fahrwerk.',
|
||||
instructorNote: 'Fahrwerk wird eingefahren. Geräusch kann überraschen.',
|
||||
atcMessage: 'Sehr gut, wir sind in der Luft! Jetzt brauchen wir die Räder nicht mehr. Siehst du den Fahrwerk-Hebel rechts neben dem unteren Display in der Mitte? Der mit dem kleinen Rad-Symbol? Den schiebst du jetzt nach oben auf UP. Damit fahren die Räder in den Rumpf ein und wir haben weniger Luftwiderstand.',
|
||||
explanation: 'Fahrwerk-Hebel auf UP. Reduziert Luftwiderstand im Steigflug.',
|
||||
instructorNote: 'Fahrwerk einfahren. Teilnehmer betätigt Gear-Lever.',
|
||||
buttons: [
|
||||
{ id: 'gear_know', label: 'Ah, das kenne ich!', icon: 'mdi-lightbulb', next: 'climb', type: 'primary' },
|
||||
{ id: 'gear_what', label: 'Was war das?!', icon: 'mdi-alert-circle', next: 'gear_explain', type: 'comfort', instructorAlert: 'Teilnehmer erschrocken bei Fahrwerk' },
|
||||
{ id: 'gear_continue', label: 'Weiter', icon: 'mdi-arrow-right-circle', next: 'climb', type: 'primary' },
|
||||
{ id: 'gear_know', label: 'Fahrwerk ist oben!', icon: 'mdi-check-circle', next: 'climb', type: 'primary' },
|
||||
{ id: 'gear_what', label: 'Welchen Hebel genau?', icon: 'mdi-help-circle', next: 'gear_explain', type: 'comfort', instructorAlert: 'Teilnehmer findet Gear-Lever nicht' },
|
||||
{ id: 'gear_continue', label: 'Erledigt', icon: 'mdi-arrow-right-circle', next: 'climb', type: 'primary' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'gear-retract', action: 'play', volume: 0.6, loop: false },
|
||||
@@ -295,9 +297,9 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'gear_explain',
|
||||
atcMessage: 'Keine Sorge! Das waren nur die Räder. Die werden nach dem Start eingeklappt damit das Flugzeug schneller fliegen kann. Stell dir vor du fährst Fahrrad und klappst die Stützräder hoch. Genau das Gleiche, nur größer. Das Geräusch kommt von der Hydraulik und den Klappen die sich schließen.',
|
||||
atcMessage: 'Der Fahrwerk-Hebel ist am Instrumentenpanel in der Mitte, rechts neben dem unteren Bildschirm. Sieht aus wie ein kleines Rad an einem Hebel. Drei Positionen: DOWN unten, OFF Mitte, UP oben. Schieb ihn ganz nach oben auf UP. Du hörst dann ein Rumpeln, das sind die Räder die einfahren und die Klappen die sich schließen.',
|
||||
buttons: [
|
||||
{ id: 'gear_explained', label: 'Okay, verstanden!', icon: 'mdi-check-circle', next: 'climb', type: 'primary' },
|
||||
{ id: 'gear_explained', label: 'Hab ihn, Fahrwerk oben!', icon: 'mdi-check-circle', next: 'climb', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
@@ -305,13 +307,13 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 7: Climb ---
|
||||
{
|
||||
id: 'climb',
|
||||
atcMessage: 'Wir steigen jetzt ganz gemütlich weiter hoch. Alles läuft perfekt. Hörst du wie die Triebwerke etwas leiser werden? Das ist normal, wir brauchen jetzt weniger Schub als beim Start. Wie ein Auto das vom ersten in den dritten Gang schaltet. Wir sind jetzt schon auf über 3.000 Fuß.',
|
||||
explanation: 'Steigflug läuft. Die Triebwerke werden leiser - das ist normal.',
|
||||
instructorNote: 'Steigflug. Teilnehmer sollte sich jetzt etwas entspannen.',
|
||||
atcMessage: 'Perfekt, Fahrwerk ist drin. Jetzt steigen wir weiter. Halte den Sidestick so, dass der Pitch bei etwa 15 Grad bleibt. Schau auf dein Speed-Tape links, wir wollen die Geschwindigkeit bei etwa 200 Knoten halten. Wenn die Speed zu hoch wird, Nase etwas höher. Wenn sie zu niedrig wird, Nase etwas senken. Das ist das Grundprinzip vom Fliegen: Pitch kontrolliert die Geschwindigkeit.',
|
||||
explanation: 'Pitch halten für ca. 200 Knoten. Pitch hoch = langsamer, Pitch runter = schneller.',
|
||||
instructorNote: 'Steigflug. Teilnehmer lernt Pitch-Speed-Zusammenhang.',
|
||||
buttons: [
|
||||
{ id: 'climb_height', label: 'Wie hoch sind wir?', icon: 'mdi-altimeter', next: 'climb_height_info', type: 'info' },
|
||||
{ id: 'climb_continue', label: 'Weiter steigen', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'climb_queasy', label: 'Mir wird etwas komisch', icon: 'mdi-emoticon-sad', next: 'climb_queasy_comfort', type: 'comfort', instructorAlert: 'Unwohlsein beim Steigflug' },
|
||||
{ id: 'climb_continue', label: 'Passt, weiter steigen', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'climb_queasy', label: 'Die Speed schwankt stark', icon: 'mdi-swap-vertical', next: 'climb_queasy_comfort', type: 'comfort', instructorAlert: 'Teilnehmer hat Probleme mit Speed-Kontrolle' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'engine-cruise', action: 'crossfade', volume: 0.3 },
|
||||
@@ -330,37 +332,37 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'climb_height_info',
|
||||
atcMessage: 'Wir sind gerade auf ungefähr 5.000 Fuß, das sind 1.500 Meter. Noch die Hälfte bis zu unserem Ziel. Wenn du nach unten schaust, siehst du die Autobahnen und Häuser ganz klein werden. Ziemlich cool, oder?',
|
||||
atcMessage: 'Schau auf das Altitude-Tape rechts auf deinem PFD. Da siehst du die aktuelle Höhe in Fuß. Wir wollen auf 10.000 Fuß, also noch ein Stück. Oben rechts siehst du auch den vorgewählten Zielwert. Einfach weiter steigen!',
|
||||
buttons: [
|
||||
{ id: 'height_continue', label: 'Weiter hoch!', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'height_continue', label: 'Weiter steigen!', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'climb_queasy_comfort',
|
||||
atcMessage: 'Das kann passieren. Schau am besten geradeaus nach vorne, nicht nach unten. Atme langsam und gleichmäßig. Das leichte Schaukeln kommt von den Luftströmungen, das ist wie Wellen auf einem See. Ganz normal. Es wird gleich ruhiger wenn wir höher sind.',
|
||||
instructorNote: 'Unwohlsein. Ggf. mündlich eingreifen oder Pause anbieten.',
|
||||
atcMessage: 'Das ist völlig normal am Anfang. Der Trick ist: Nicht ständig am Sidestick korrigieren. Stell den Pitch ein und lass ihn stehen. Kleine Schwankungen gleicht das Flugzeug selbst aus. Wenn die Speed 10 Knoten daneben liegt, dann eine kleine Korrektur. Weniger ist mehr beim Fliegen.',
|
||||
instructorNote: 'Speed-Kontrolle Probleme. Auf Over-Controlling hinweisen.',
|
||||
buttons: [
|
||||
{ id: 'queasy_continue', label: 'Geht schon, weiter', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'queasy_pause', label: 'Kurze Pause bitte', icon: 'mdi-pause-circle', next: 'climb_pause', type: 'comfort' },
|
||||
{ id: 'queasy_continue', label: 'Okay, weniger korrigieren', icon: 'mdi-arrow-up-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'queasy_pause', label: 'Nochmal den Zusammenhang erklären', icon: 'mdi-help-circle', next: 'climb_pause', type: 'comfort' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'climb_pause',
|
||||
atcMessage: 'Klar, machen wir Pause. Alles fliegt von alleine weiter, keine Sorge. Atme ruhig und wenn du bereit bist, gehts weiter.',
|
||||
atcMessage: 'Also, das Grundprinzip: Der Schub ist fest eingestellt und bleibt wo er ist. Mit dem Sidestick steuerst du den Pitch, also wie steil die Nase nach oben zeigt. Mehr Pitch bedeutet mehr Steigrate, aber die Geschwindigkeit sinkt. Weniger Pitch bedeutet weniger Steigrate, dafür wird die Geschwindigkeit höher. Deine Aufgabe ist den Pitch so zu halten, dass die Speed bei ungefähr 200 Knoten bleibt.',
|
||||
buttons: [
|
||||
{ id: 'pause_done', label: 'Weiter gehts', icon: 'mdi-play-circle', next: 'climb_high', type: 'primary' },
|
||||
{ id: 'pause_done', label: 'Verstanden, weiter', icon: 'mdi-play-circle', next: 'climb_high', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'climb_high',
|
||||
atcMessage: 'Wir kommen unserem Ziel näher! 8.000 Fuß... 9.000 Fuß... Gleich sind wir da. Du machst das wirklich super. Noch ein kleines Stück...',
|
||||
explanation: 'Fast da! Noch etwas steigen bis 10.000 Fuß.',
|
||||
instructorNote: 'Kurz vor Level-off. Positiv verstärken.',
|
||||
atcMessage: 'Sehr gut, wir kommen unserem Ziel näher! Schau auf den Höhenmesser rechts. Noch ein paar Tausend Fuß. Halte den Pitch stabil, die Speed passt. Gleich bei 10.000 Fuß drückst du die Nase langsam nach vorne in den Geradeausflug.',
|
||||
explanation: 'Weiter steigen bis 10.000 Fuß. Dann Nase senken für Reiseflug.',
|
||||
instructorNote: 'Kurz vor Level-off. Nächste Aktion ankündigen.',
|
||||
buttons: [
|
||||
{ id: 'almost_there', label: 'Fast geschafft!', icon: 'mdi-flag-checkered', next: 'leveloff', type: 'primary' },
|
||||
{ id: 'almost_there', label: 'Fast auf 10.000!', icon: 'mdi-flag-checkered', next: 'leveloff', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
simConditions: {
|
||||
@@ -377,14 +379,14 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- Phase 8: Level-off & Debrief ---
|
||||
{
|
||||
id: 'leveloff',
|
||||
atcMessage: '10.000 Fuß! Wir sind da! Ich nehme die Nase jetzt etwas runter und wir fliegen geradeaus. Spürst du wie es ruhiger wird? Kein Steigen mehr, einfach geradeaus gleiten. Du hast gerade einen kompletten Start hingelegt. Von der Startbahn bis hier hoch. Wie fühlst du dich?',
|
||||
explanation: 'Geschafft! 10.000 Fuß erreicht. Wir fliegen jetzt geradeaus.',
|
||||
instructorNote: 'Level-off erreicht! Emotionaler Moment. Abwarten was kommt.',
|
||||
atcMessage: '10.000 Fuß! Jetzt drückst du den Sidestick langsam nach vorne bis die Steigrate auf dem Variometer auf Null steht. Das Variometer ist die vertikale Geschwindigkeitsanzeige rechts neben dem Altitude-Tape. Wir wollen jetzt geradeaus fliegen, nicht mehr steigen. Gut so! Du fliegst jetzt einen Airbus A320 auf 10.000 Fuß!',
|
||||
explanation: 'Level-off: Sidestick nach vorne bis Vertical Speed nahe Null.',
|
||||
instructorNote: 'Level-off erreicht. Teilnehmer bringt V/S auf Null.',
|
||||
buttons: [
|
||||
{ id: 'debrief_cool', label: 'Das war cool!', icon: 'mdi-party-popper', next: 'debrief', type: 'primary' },
|
||||
{ id: 'debrief_relief', label: 'Ich bin erleichtert', icon: 'mdi-emoticon-happy', next: 'debrief', type: 'primary' },
|
||||
{ id: 'debrief_cool', label: 'Das war genial!', icon: 'mdi-party-popper', next: 'debrief', type: 'primary' },
|
||||
{ id: 'debrief_relief', label: 'Geschafft!', icon: 'mdi-emoticon-happy', next: 'debrief', type: 'primary' },
|
||||
{ id: 'debrief_again', label: 'Nochmal!', icon: 'mdi-refresh', next: 'debrief_restart', type: 'info' },
|
||||
{ id: 'debrief_pause', label: 'Ich brauch eine Pause', icon: 'mdi-pause-circle', next: 'debrief_pause', type: 'comfort' },
|
||||
{ id: 'debrief_pause', label: 'Kurz durchatmen', icon: 'mdi-pause-circle', next: 'debrief_pause', type: 'comfort' },
|
||||
],
|
||||
sounds: [
|
||||
{ id: 'engine-cruise', action: 'crossfade', volume: 0.2 },
|
||||
@@ -405,9 +407,9 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'debrief',
|
||||
atcMessage: 'Du hast heute was richtig Tolles gemacht. All die Geräusche die dich als Passagier vielleicht verunsichert haben, jetzt weißt du was sie bedeuten. Das Rumpeln auf der Bahn, das Kribbeln beim Abheben, das Klacken vom Fahrwerk, die Triebwerke die lauter und leiser werden. Alles ganz normal und alles ganz sicher. Du kannst stolz auf dich sein!',
|
||||
explanation: 'Du hast es geschafft! Alle Geräusche haben eine normale Erklärung.',
|
||||
instructorNote: 'Debriefing. Ggf. im Raum nachbesprechen. Emotionen zulassen.',
|
||||
atcMessage: 'Stark! Du hast gerade einen kompletten Takeoff im A320 geflogen. Schub gesetzt, beschleunigt, rotiert, abgehoben, Fahrwerk eingefahren und auf 10.000 Fuß gestiegen. Das ist genau die Prozedur die echte Piloten bei jedem Start durchführen. Jetzt weißt du was vorne im Cockpit passiert wenn du als Passagier einsteigst.',
|
||||
explanation: 'Takeoff-Prozedur abgeschlossen. Schub, Rotation, Gear, Climb, Level-off.',
|
||||
instructorNote: 'Debriefing. Zusammenfassung der Schritte. Nachbesprechung im Raum.',
|
||||
buttons: [
|
||||
{ id: 'restart', label: 'Nochmal von vorne', icon: 'mdi-refresh', next: 'welcome', type: 'info' },
|
||||
{ id: 'finish', label: 'Fertig - danke!', icon: 'mdi-check-circle', next: 'end', type: 'primary' },
|
||||
@@ -416,16 +418,16 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
},
|
||||
{
|
||||
id: 'debrief_restart',
|
||||
atcMessage: 'Ha, das hör ich gern! Wollen wir nochmal von vorne anfangen? Beim zweiten Mal ist es meistens schon viel entspannter!',
|
||||
atcMessage: 'Sehr gerne! Beim zweiten Mal achtest du schon viel mehr auf die Details. Viele Profis sagen: Beim ersten Mal verstehst du was du tust, beim zweiten Mal lernst du es richtig.',
|
||||
buttons: [
|
||||
{ id: 'yes_restart', label: 'Ja, nochmal!', icon: 'mdi-refresh', next: 'welcome', type: 'primary' },
|
||||
{ id: 'no_finish', label: 'Nee, reicht für heute', icon: 'mdi-check-circle', next: 'debrief', type: 'primary' },
|
||||
{ id: 'no_finish', label: 'Reicht für heute', icon: 'mdi-check-circle', next: 'debrief', type: 'primary' },
|
||||
],
|
||||
sounds: [],
|
||||
},
|
||||
{
|
||||
id: 'debrief_pause',
|
||||
atcMessage: 'Natürlich. Nimm dir alle Zeit. Das war viel für einen Tag. Wenn du magst, können wir später nochmal.',
|
||||
atcMessage: 'Klar, gönn dir ne Minute. War viel auf einmal. Das Flugzeug fliegt jetzt von alleine geradeaus, du kannst loslassen.',
|
||||
buttons: [
|
||||
{ id: 'end_after_pause', label: 'Danke, das reicht', icon: 'mdi-check-circle', next: 'end', type: 'primary' },
|
||||
{ id: 'continue_after_pause', label: 'Nochmal starten', icon: 'mdi-refresh', next: 'welcome', type: 'info' },
|
||||
@@ -436,8 +438,8 @@ export const takeoffEddf: FlightLabScenario = {
|
||||
// --- End ---
|
||||
{
|
||||
id: 'end',
|
||||
atcMessage: 'Danke, dass du heute mitgemacht hast. Du hast einen echten Start erlebt und weißt jetzt was all die Geräusche und Gefühle bedeuten. Das nächste Mal wenn du als Passagier im Flieger sitzt, wirst du vieles wiedererkennen. Machs gut!',
|
||||
explanation: 'Das Szenario ist beendet. Du kannst jederzeit nochmal starten.',
|
||||
atcMessage: 'Super Session! Du hast heute gelernt wie ein Startvorgang im A320 funktioniert: Schub setzen, auf der Bahn halten, bei 140 Knoten rotieren, Fahrwerk einfahren, steigen, und auf Reiseflughöhe leveln. Genau so machen es die Profis. Bis zum nächsten Mal!',
|
||||
explanation: 'Szenario beendet. Du kannst jederzeit nochmal üben.',
|
||||
instructorNote: 'Szenario beendet. Nachbesprechung im Raum.',
|
||||
buttons: [
|
||||
{ id: 'restart_final', label: 'Nochmal starten', icon: 'mdi-refresh', next: 'welcome', type: 'info' },
|
||||
|
||||
Reference in New Issue
Block a user