471 lines
21 KiB
Plaintext
471 lines
21 KiB
Plaintext
Tree("Root") {
|
|
Composite(Sequence) {
|
|
BTC.InitializeSpeechManager()
|
|
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
// Error in Speech Service: Cancel BTC Trees
|
|
BTC.SpeechErrorOccured()
|
|
BTC.SetBool("error")
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
BTC.SetVoiceName("de-DE-SeraphinaMultilingualNeural")
|
|
RunTree("10_SBB_Zugabteil_Intro")
|
|
}
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
BTC.CompareBool("error")
|
|
// Error Handling
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "Restart")
|
|
BTC.Show("GO.HANDMENU.Option1Button")
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
}
|
|
}
|
|
}
|
|
|
|
Tree("10_SBB_Zugabteil_Intro") {
|
|
// --- Zugabteil - Intro ---
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
BTC.NoStoriesVisited()
|
|
|
|
BTC.SynthesizeText("Wir begrüssen dich auf unserer Reise in die Sprache und Kultur der italienischsprachigen Schweiz.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SynthesizeText("Bitte bleib während des ganzen Ausflugs sitzen. Die Steuerung erfolgt über die Sprache und über das Smartphone, das du in der rechten Hand hältst.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SynthesizeText("Solltest du dich unwohl fühlen, dann schliesse die Augen, lege die Controller auf den Boden und lege dann die VR-Brille ab.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SynthesizeText("Francesca begleitet dich bei deinen Abenteuern in die italienischsprachige Schweiz. Dabei bestimmst du, wohin deine Reise geht, indem du auf Italienisch antwortest, selbst Fragen stellst oder Entscheide triffst. Wenn Du nicht weiterweisst, dann schau auf dein Smartphone. Damit kannst Du an manchen Orten übrigens auch fotografieren.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SetVoiceName("de-DE-KatjaNeural")
|
|
BTC.Run("StudioEventEmitter.STATIC.SBBAlert")
|
|
BTC.SynthesizeText("Nächster Halt Bellinzona, Richtung Biasca, Gleis 2, Locarno, Gleis 3, Mendrisio, Gleis 4. Gute Reise!")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SetVoiceName("de-DE-SeraphinaMultilingualNeural")
|
|
BTC.SynthesizeText("In wenigen Minuten treffen wir in Bellinzona ein.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.SetSpeechRecognitionLanguage("it-IT")
|
|
BTC.SynthesizeText("Tra pochi minuti arriveremo a Bellinzona. Il treno per Biasca è in partenza dal binario 2, quello per Locarno dal binario 3 e per Mendrisio dal binario 4. Buon viaggio!")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
// --- Zugabteil - Exposition ---
|
|
BTC.Run("AudioSource.AUDIO.Exposition1Zugabte")
|
|
BTC.Run("AudioSource.AUDIO.Exposition2Zugabte")
|
|
BTC.Run("AudioSource.AUDIO.Exposition3Zugabte")
|
|
BTC.Run("AudioSource.AUDIO.Exposition4Zugabte")
|
|
BTC.Run("AudioSource.AUDIO.Exposition5Zugabte")
|
|
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl_Selection")
|
|
}
|
|
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl_Selection")
|
|
}
|
|
|
|
}
|
|
|
|
Tree("10_SBB_Zugabteil_Szenenwahl_Selection") {
|
|
// --- Zugabteil - Szenenwahl Selection ---
|
|
Composite(Sequence) {
|
|
BTC.SetBool("handmenu_active", false)
|
|
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
// Story A besucht
|
|
BTC.StoryAVisited()
|
|
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
// Story A + B besucht
|
|
BTC.StoryBVisited()
|
|
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
// Story A + B + C besucht
|
|
BTC.StoryCVisited()
|
|
// --- Zugabteil - Story Ende ---
|
|
BTC.SynthesizeText("Abbiamo viaggiato tre giorni! Abbiamo visitato il grotto di mia nonna, fatto un picnic al Castello Montebello e fatto un'escursione in Valposchiavo. Spero di essere riuscita a farti affezionare alla mia terra. Abbiamo anche dei bei ricordi con le foto che hai scattato. Vieni a trovarmi di nuovo, dai, ne sarei felice! Buon viaggio di ritorno!")
|
|
BTC.SpeechOutputEnded()
|
|
// --- ENDE ---
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story A + B besucht
|
|
// Story C nicht besucht
|
|
// --- Zugabteil - Repetition Intro C ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroC1Z")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
}
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story A besucht
|
|
// Story B nicht besucht
|
|
BTC.StoryCVisited()
|
|
|
|
// Story A + C besucht
|
|
// Story B nicht besucht
|
|
// --- Zugabteil - Repetition Intro B ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroB1Z")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story A besucht
|
|
// Story B + C nicht besucht
|
|
// --- Zugabteil - Repetition Intro BC ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroBC1")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
}
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story A nicht besucht
|
|
BTC.StoryBVisited()
|
|
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
// Story B besucht
|
|
// Story A nicht besucht
|
|
BTC.StoryCVisited()
|
|
|
|
// Story B + C besucht
|
|
// Story A nicht besucht
|
|
// --- Zugabteil - Repetition Intro A ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroA1Z")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story B besucht
|
|
// Story A + C nicht besucht
|
|
// --- Zugabteil - Repetition Intro AC ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroAC1")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
}
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Story A + B nicht besucht
|
|
BTC.StoryCVisited()
|
|
|
|
// Story C besucht
|
|
// Story A + B nicht besucht
|
|
// --- Zugabteil - Repetition Intro AB ---
|
|
BTC.Run("AudioSource.AUDIO.RepetitionIntroAB1")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Nichts besucht
|
|
Composite(Selector) {
|
|
Composite(Sequence) {
|
|
BTC.CompareRepetitionVisitedCounter(0)
|
|
// --- Zugabteil - Intro ABC erste ---
|
|
BTC.Run("AudioSource.AUDIO.IntroABCerste1Zuga")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
Composite(Sequence) {
|
|
// Erste Wiederholung
|
|
BTC.CompareRepetitionVisitedCounter(1)
|
|
// --- Zugabteil - Intro ABC zweite ---
|
|
BTC.Run("AudioSource.AUDIO.IntroABCzweite1Zug")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
Composite(Sequence) {
|
|
// Zweite Wiederholung
|
|
BTC.CompareRepetitionVisitedCounter(2)
|
|
// --- Zugabteil - Intro ABC dritte ---
|
|
BTC.Run("AudioSource.AUDIO.IntroABCdritte1Zug")
|
|
BTC.SetBool("handmenu_active")
|
|
RunTree("10_SBB_Zugabteil_Szenenwahl")
|
|
}
|
|
}
|
|
}
|
|
} // First Selector
|
|
} // Sequence
|
|
}
|
|
|
|
Tree("10_SBB_Zugabteil_Szenenwahl") {
|
|
// --- Zugabteil - Szenenwahl ---
|
|
Composite(Sequence) {
|
|
BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.3")
|
|
BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.5")
|
|
BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.7")
|
|
BTC.StartSpeechIntentRecognition()
|
|
|
|
Composite(Race) {
|
|
// -- Race 1: User sagt etwas
|
|
Composite(Sequence) {
|
|
BTC.UserStartedSpeechInput()
|
|
|
|
Composite(Selector) {
|
|
// -- Selector 1: Intent erkannt
|
|
Composite(Sequence) {
|
|
BTC.SpeechIntentRecognized()
|
|
BTC.AbortEventListener("NamedGrabEvent.INTERACTABLES.VRBrille")
|
|
|
|
// Intent erkannt
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.3")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story A Picknicken
|
|
// ...
|
|
BTC.SetStoryAVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.5")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story B Grotto
|
|
BTC.Run("LoadScene.NEXT.30SBB")
|
|
//BTC.SetStoryBVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.7")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story C Wandern
|
|
// ...
|
|
BTC.SetStoryCVisited()
|
|
}
|
|
}
|
|
}
|
|
|
|
// -- Selector 2: Intent nicht erkannt
|
|
Composite(Sequence) {
|
|
BTC.AbortEventListener("NamedGrabEvent.INTERACTABLES.VRBrille")
|
|
// Fallback: nicht verstanden, wiederholen
|
|
// ...
|
|
BTC.SynthesizeText("Temo di non averla capita. Può ripetere, per favore? In alternativa, può usare l'aiuto sul cellulare che tiene nella mano sinistra.")
|
|
BTC.SpeechOutputEnded()
|
|
|
|
BTC.StartSpeechIntentRecognition()
|
|
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
// Option 1: Spracheingabe
|
|
BTC.UserStartedSpeechInput()
|
|
BTC.SpeechIntentRecognized()
|
|
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.3")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story A Picknicken
|
|
// ...
|
|
BTC.SetStoryAVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.5")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story B Grotto
|
|
// ...
|
|
BTC.SetStoryBVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
BTC.CompareIntentID("Zugabteil.Szenenwahl.7")
|
|
BTC.ClearPossbileSpeechIntents()
|
|
// Load Scene: Story C Wandern
|
|
// ...
|
|
BTC.SetStoryCVisited()
|
|
}
|
|
}
|
|
}
|
|
|
|
Composite(Sequence) {
|
|
// Option 2: Handmenu
|
|
Composite(Marathon) {
|
|
BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "picnic")
|
|
BTC.Show("GO.HANDMENU.Option1Button")
|
|
BTC.Set("TextMeshPro.HANDMENU.Option2Button", "text", "grotto")
|
|
BTC.Show("GO.HANDMENU.Option2Button")
|
|
BTC.Set("TextMeshPro.HANDMENU.Option3Button", "text", "escursione")
|
|
BTC.Show("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
// picnic
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story A Picknicken
|
|
// ...
|
|
BTC.SetStoryAVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
// grotto
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option2Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story B Grotto
|
|
// ...
|
|
BTC.SetStoryBVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
// escursione
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option3Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story C Wandern
|
|
// ...
|
|
BTC.SetStoryCVisited()
|
|
}
|
|
} // Ende Race Buttons
|
|
} // Ende Option 2 Handmenu
|
|
} // Ende Race Optionen
|
|
|
|
} // Ende Sequence
|
|
} // Ende Selector
|
|
} // Ende Sequence 1
|
|
|
|
// -- Race 2: User sagt nichts
|
|
Composite(Sequence) {
|
|
BTC.Wait(20)
|
|
BTC.CompareUserSpeechInputStarted(false)
|
|
Decorator(Inverter) {
|
|
BTC.CompareBool("handmenu_active")
|
|
}
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
BTC.AbortEventListener("NamedGrabEvent.INTERACTABLES.VRBrille")
|
|
BTC.IncrementRepetitionVisitedCounter()
|
|
}
|
|
|
|
// -- Race 3: VR Brille in die Hand nehmen
|
|
Composite(Sequence) {
|
|
BTC.Run("NamedGrabEvent.INTERACTABLES.VRBrille")
|
|
Decorator(Inverter) {
|
|
BTC.CompareBool("handmenu_active")
|
|
}
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
BTC.IncrementRepetitionVisitedCounter()
|
|
|
|
// --- Bilder Bergell ---
|
|
//BTC.Run("LoadScene.NEXT.35Slideshow")
|
|
}
|
|
|
|
// -- Race 4: Hand Menu
|
|
Composite(Sequence) {
|
|
BTC.CompareBool("handmenu_active")
|
|
Composite(Marathon) {
|
|
BTC.Set("TextMeshPro.HANDMENU.Option1Button", "text", "picnic")
|
|
BTC.Show("GO.HANDMENU.Option1Button")
|
|
BTC.Set("TextMeshPro.HANDMENU.Option2Button", "text", "grotto")
|
|
BTC.Show("GO.HANDMENU.Option2Button")
|
|
BTC.Set("TextMeshPro.HANDMENU.Option3Button", "text", "escursione")
|
|
BTC.Show("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
Composite(Race) {
|
|
Composite(Sequence) {
|
|
// picnic
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option1Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option2Button")
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option3Button")
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story A Picknicken
|
|
// ...
|
|
BTC.SetStoryAVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
// grotto
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option2Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option1Button")
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option3Button")
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story B Grotto
|
|
// ...
|
|
BTC.SetStoryBVisited()
|
|
}
|
|
Composite(Sequence) {
|
|
// escursione
|
|
BTC.Run("NamedEventTrigger.HANDMENU.Option3Button")
|
|
|
|
Composite(Marathon) {
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option1Button")
|
|
BTC.AbortEventListener("NamedEventTrigger.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option1Button")
|
|
BTC.Hide("GO.HANDMENU.Option2Button")
|
|
BTC.Hide("GO.HANDMENU.Option3Button")
|
|
}
|
|
|
|
BTC.AbortSpeechEventListener()
|
|
BTC.StopSpeechIntentRecognition()
|
|
BTC.ClearPossbileSpeechIntents()
|
|
|
|
// Load Scene: Story C Wandern
|
|
// ...
|
|
BTC.SetStoryCVisited()
|
|
}
|
|
}
|
|
}
|
|
} // Ende Race
|
|
}
|
|
}
|