Tree("Root") { Composite(Sequence) { BTC.InitializeSpeechManager() RunTree("10_SBB_Zugabteil_Szenenwahl_Selection") } } Tree("10_SBB_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("Hey, jetzt waren wir drei Tage unterwegs, wir haben das Grotto meiner Nonna besucht, waren beim Castello die Montebello picknicken und im Puschlav wandern. Ich hoffe, ich konnte dir meine Heimat etwas näherbringen. Mit den Fotos, die du gemacht hast, haben wir auch tolle Erinnerungen. Besuche mich doch wieder einmal, das würde mich freuen! Gute Heimreise!", "de-DE", "") BTC.SpeechOutputEnded() // --- ENDE --- } Composite(Sequence) { // Story A + B besucht // Story C nicht besucht // --- Zugabteil - Repetition Intro C --- BTC.SynthesizeText("Nun haben wir schon zwei tolle Ausflüge gemacht. Wie wärs heute mit einer Wanderung im Puschlav?", "de-DE", "") BTC.SpeechOutputEnded() 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.SynthesizeText("Nun haben wir schon zwei tolle Ausflüge gemacht. Wie wärs heute mit einem feinen Risotto im Grotto meiner Nonna im Misox?", "de-DE", "") BTC.SpeechOutputEnded() RunTree("10_SBB_Zugabteil_Szenenwahl") } Composite(Sequence) { // Story A besucht // Story B + C nicht besucht // --- Zugabteil - Repetition Intro BC --- BTC.SynthesizeText("Heute ist ein neuer Tag für einen Ausflug. Was möchtest du unternehmen? Wie wärs mit einem feinen Risotto im Grotto meiner Nonna im Misox? Oder einer Wanderung im Puschlav?", "de-DE", "") BTC.SpeechOutputEnded() 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.SynthesizeText("Nun haben wir schon zwei tolle Ausflüge gemacht. Wie wärs heute mit einem chilligen Picknick oben bei den Castelli?", "de-DE", "") BTC.SpeechOutputEnded() RunTree("10_SBB_Zugabteil_Szenenwahl") } Composite(Sequence) { // Story B besucht // Story A + C nicht besucht // --- Zugabteil - Repetition Intro AC --- BTC.SynthesizeText("Heute ist ein neuer Tag für einen Ausflug. Was möchtest du unternehmen? Wie wärs mit einem chilligen Picknick oben bei den Castelli? Oder einer Wanderung im Puschlav?", "de-DE", "") BTC.SpeechOutputEnded() 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.SynthesizeText("Heute ist ein neuer Tag für einen Ausflug. Was möchtest du unternehmen? Wie wärs mit einem chilligen Picknick oben beim Castello di Montebello? Oder hast du Lust auf einen feinen Risotto im Grotto meiner Nonna im Misox?", "de-DE", "") BTC.SpeechOutputEnded() RunTree("10_SBB_Zugabteil_Szenenwahl") } Composite(Sequence) { // Nichts besucht Composite(Selector) { Composite(Sequence) { BTC.CompareRepetitionVisitedCounter(0) // --- Zugabteil - Intro ABC erste --- BTC.SynthesizeText("Worauf hast du denn heute Lust? A) Picknick in Bellinzona, B) Grotto im Misox oder C) Wanderung im Puschlav?", "de-DE", "") BTC.SpeechOutputEnded() RunTree("10_SBB_Zugabteil_Szenenwahl") } Composite(Sequence) { // Erste Wiederholung BTC.CompareRepetitionVisitedCounter(1) // --- Zugabteil - Intro ABC zweite --- BTC.SynthesizeText("Wir kommen bald an. Welchen Ausflug möchtest du machen? A) Picknicken, B) im Grotto was Feines essen oder C) Wandern", "de-DE", "") BTC.SpeechOutputEnded() RunTree("10_SBB_Zugabteil_Szenenwahl") } Composite(Sequence) { // Zweite Wiederholung BTC.CompareRepetitionVisitedCounter(2) // --- Zugabteil - Intro ABC dritte --- BTC.SynthesizeText("Jetzt musst du dich entscheiden: A) Picknicken, B) im Grotto was Feines essen oder C) Wandern. Du kannst auch die Hilfe auf dem Handy in deiner linken Hand verwenden.", "de-DE", "") BTC.SpeechOutputEnded() BTC.SetBool("handmenu_active") RunTree("10_SBB_Zugabteil_Szenenwahl") } } } } // First Selector } // Sequence } Tree("10_SBB_Zugabteil_Szenenwahl") { Composite(Sequence) { BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.3", "A (oder Picknick)") BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.5", "B (oder Grotto)") BTC.AddPossbileSpeechIntent("Zugabteil.Szenenwahl.7", "C (oder Wandern)") 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.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("Ich habe dich leider nicht verstanden. Kannst du das bitte wiederholen? Alternativ kannst du auch die Hilfe auf dem Handy in deiner linken Hand verwenden.", "de-DE", "") 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 } }