Tree("Root") { Composite(Sequence) { BTC.InitializeSpeechManager() BTC.SetSpeechRecognitionLanguage("it-IT") BTC.SetVoiceName("it-IT-FabiolaNeural") Composite(Race) { Composite(Sequence) { // Error in Speech Service: Cancel BTC Trees BTC.SpeechErrorOccured() BTC.SetBool("error") } Composite(Sequence) { RunTree("32_Grotto_Story_B_Grotto_Intro") //RunTree("32_Grotto_Kueche_Intro") //RunTree("32_Grotto_Kueche_Zwiebeln_schneiden") //RunTree("32_Grotto_Kueche_alles_gefunden") //RunTree("32_Grotto_Kueche_Kochen_Anzahl") //RunTree("32_Grotto_Kueche_Zusammen_Kochen") //RunTree("32_Grotto_Im_Grotto_Essen_Intro") } } Composite(Sequence) { BTC.CompareBool("error") // Error Handling BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() BTC.Set("TextMeshPro.GO.Option1Button", "text", "Restart") BTC.Show("GO.GO.Option1Button") BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") } } } Tree("32_Grotto_Story_B_Grotto_Intro") { Composite(Sequence) { BTC.Run("AudioSource.AUDIO.StoryBGrottoIntro1") BTC.Run("AudioSource.AUDIO.StoryBGrottoIntro2") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Intro.3") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Intro.4") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.Run("AudioSource.AUDIO.StoryBGrottoIntro6") // --- Story B Grotto - Telefonat --- BTC.Run("AudioSource.AUDIO.StoryBGrotto1Telef") BTC.SynthesizeText("Ciao Francesca. Sei già arrivata?") BTC.SpeechOutputEnded() BTC.Run("AudioSource.AUDIO.StoryBGrotto3Telef") BTC.SynthesizeText("Oh, che bello, e chi è?") BTC.SpeechOutputEnded() BTC.Run("AudioSource.AUDIO.StoryBGrotto5Telef") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Telefonat.6") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } // --- Story B Grotto - Begruessung --- BTC.SynthesizeText("Ciao, che bello che accompagni Francesca. Com'è andato il viaggio?") BTC.SpeechOutputEnded() // --- Story B Grotto - Antwort_Reise --- BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Reise.1") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.SynthesizeText("Ti piace la Mesolcina?") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Reise.5") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.SynthesizeText("Io non vorrei vivere in nessun altro posto al mondo! Purtroppo oggi non ci posso essere nel grotto. Aiuti tu Francesca in cucina o preferisci aspettarla nella sala del grotto?") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Reise.9") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Reise.11") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Sequence) { BTC.UserStartedSpeechInput() Composite(Selector) { // -- Selector 1: Intent erkannt Composite(Sequence) { BTC.SpeechIntentRecognized() // Intent erkannt Composite(Race) { Composite(Sequence) { BTC.CompareIntentID("Story_B_Grotto.Antwort_Reise.9") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Kueche") } Composite(Sequence) { BTC.CompareIntentID("Story_B_Grotto.Antwort_Reise.11") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Grotto") } } } // -- Selector 2: Intent nicht erkannt Composite(Sequence) { // --- Story B Grotto - Nachfrage Nonna Grotto --- // SpeechIntentRecognized Failed: kein Intent erkannt BTC.SynthesizeText("Che cosa volevi dire? Non ho capito. Preferisci aiutare o aspettare in giardino?") BTC.SpeechOutputEnded() BTC.StartSpeechIntentRecognition() Composite(Race) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() Composite(Race) { Composite(Sequence) { BTC.CompareIntentID("Story_B_Grotto.Antwort_Reise.9") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Kueche") } Composite(Sequence) { BTC.CompareIntentID("Story_B_Grotto.Antwort_Reise.11") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Grotto") } } } Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() BTC.CompareUserSpeechInputStarted(true) } } } // Selector 3: Fallback Button Composite(Sequence) { Composite(Marathon) { BTC.Set("TextMeshPro.GO.Option1Button", "text", "In der Küche helfen.") BTC.Show("GO.GO.Option1Button") BTC.Set("TextMeshPro.GO.Option2Button", "text", "Im Garten warten.") BTC.Show("GO.GO.Option2Button") } Composite(Race) { Composite(Sequence) { // Kueche BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option2Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Kueche") } Composite(Sequence) { // Garten BTC.Run("NamedEventTrigger.GO.Option2Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Grotto") } } } } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() // --- Bilder Bergell --- // TODO: Bergell //BTC.Run("LoadScene.NEXT.35Slideshow") } } } } Tree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Kueche") { // --- Story B Grotto - Antwort Nonna Kueche --- Composite(Sequence) { BTC.SynthesizeText("Oh, va benissimo! Più tardi, naturalmente, offro io la cena.") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Nonna_Kueche.2") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } // --- Story B Grotto - Outro --- BTC.SynthesizeText("Sai cosa fare, Francensca, vero? C'è da cucinare il risotto. La ricetta la conosci e la trovi comunque lì. Allora, vi lascio, forse ci vediamo più tardi. Quanto sono contenta che aiutiate in cucina! Ciao!") BTC.SpeechOutputEnded() BTC.SynthesizeText("Ciao Nonna.") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Outro.3") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } RunTree("32_Grotto_Kueche_Intro") } } Tree("32_Grotto_Story_B_Grotto_Antwort_Nonna_Grotto") { // --- Story B Grotto - Antwort Nonna Grotto --- Composite(Sequence) { BTC.SynthesizeText("Va bene. Forse puoi leggere qualcosa mentre aspetti Francesca nella sala del grotto. Hai portato qualche libro?") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Nonna_Grotto.2") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.SynthesizeText("Ottimo, divertitevi, e buon appetito!") BTC.SpeechOutputEnded() BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Nonna_Grotto.6") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.SynthesizeText("Mentre aspetti, se vuoi puoi dare un'occhiata alle foto che ho scattato di recente in Bregaglia. Puoi usare il visore che trovi sul tavolo.") BTC.SpeechOutputEnded() // TODO: Option VR Brille Bilder und Buch anschauen fehlt BTC.Wait(10) // TODO: Szenenuebergang fehlt BTC.Run("AudioSource.AUDIO.StoryBGrotto10Antw") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Nonna_Grotto.11") BTC.AddPossbileSpeechIntent("Story_B_Grotto.Antwort_Nonna_Grotto.12") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.Run("AudioSource.AUDIO.StoryBGrotto15Antw") RunTree("32_Grotto_Im_Grotto_Essen_Intro") } } Tree("32_Grotto_Kueche_Intro") { // --- Kueche - Intro --- Composite(Sequence) { // Initialization BTC.Run("StudioEventEmitter.STATIC.Ambi3D") BTC.Run("AudioSource.AUDIO.KuecheIntro1") // Schuerze greifen BTC.Run("GO/NamedGrabEvent.INTERACTABLES.Schuerze") BTC.Hide("GO/NamedGrabEvent.INTERACTABLES.Schuerze") BTC.Run("AudioSource.AUDIO.KuecheIntro2") BTC.AddPossbileSpeechIntent("Kueche.Intro.3") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { Decorator(Inverter) { BTC.CompareUserSpeechInputStarted(false) } BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.SynthesizeText("Di che cosa abbiamo bisogno? Leggi la ricetta, per favore!") BTC.SpeechOutputEnded() BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Selector) { Composite(Sequence) { BTC.UserStartedSpeechInput() BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } } } BTC.Run("AudioSource.AUDIO.KuecheIntro5") // Pilze leuchten // momentan nur 1 Pilz BTC.Enable("NamedOutline.INTERACTABLES.Pilz01") Composite(Race) { Composite(Sequence) { // Pilze ins Wasser Glas legen BTC.Set("Collider.INTERACTABLES.GlassWasserTrigger", "otherTag", "Steinpilze") BTC.Run("Collider.INTERACTABLES.GlassWasserTrigger") } Composite(Sequence) { // Keine Reaction BTC.Wait(5) // --- Kueche - Steinpilze Hilfe --- BTC.Run("AudioSource.AUDIO.Kueche1SteinpilzeH") // Pilze ins Wasser Glas legen BTC.Run("Collider.INTERACTABLES.GlassWasserTrigger") } } BTC.Disable("NamedOutline.INTERACTABLES.Pilz01") RunTree("32_Grotto_Kueche_Zwiebeln_schneiden") } } Tree("32_Grotto_Kueche_Zwiebeln_schneiden") { // --- Kueche - Zwiebeln schneiden --- Composite(Sequence) { BTC.Run("AudioSource.AUDIO.Kueche1Zwiebelnsch") // Zwiebeln schneiden BTC.Set("Collider.INTERACTABLES.ZwiebelTrigger", "otherTag", "Messer") BTC.Run("Collider.INTERACTABLES.ZwiebelTrigger") Composite(Marathon) { BTC.Run("StudioEventEmitter.INTERACTABLES.ZwiebelSchneiden") BTC.Hide("GO.INTERACTABLES.Zwiebel01") BTC.Show("GO.INTERACTABLES.GeschnitteneZwiebe") } BTC.Run("AudioSource.AUDIO.Kueche2Zwiebelnsch") // Zutaten leuchten Composite(Marathon) { BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") BTC.Show("GO/NamedSocketEvent.SOCKETS.BouillonSocket") BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") BTC.Show("GO/NamedSocketEvent.SOCKETS.WeissweinSocket") BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto") BTC.Show("GO/NamedSocketEvent.SOCKETS.RisottoSocket") BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel") BTC.Show("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket") BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer") BTC.Show("GO/NamedSocketEvent.SOCKETS.PfefferSocket") BTC.Enable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Salz") BTC.Show("GO/NamedSocketEvent.SOCKETS.SalzSocket") } // Zutaten auf die Arbeitsflaeche legen mithilfe Sockets Composite(Marathon) { // Risotto Composite(Sequence) { //BTC.GetKeyDown("Return") BTC.SetBool("RisottoIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.RisottoSocket") //BTC.GetKeyDown("Return") BTC.SetBool("RisottoIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto") } Decorator(Repeat) { Composite(Sequence) { // Fail //BTC.GetKeyDown("Space") BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto") BTC.Wait(1) BTC.CompareBool("RisottoIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Risotto", -6.824, 1.335, -18.8996) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence // Salz Composite(Sequence) { BTC.SetBool("SalzIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.SalzSocket") BTC.SetBool("SalzIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Salz") } Decorator(Repeat) { Composite(Sequence) { // Fail BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Salz") BTC.Wait(1) BTC.CompareBool("SalzIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Salz", -6.607, 1.321, -18.8996) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence // Pfeffer Composite(Sequence) { BTC.SetBool("PfefferIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.PfefferSocket") BTC.SetBool("PfefferIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer") } Decorator(Repeat) { Composite(Sequence) { // Fail BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer") BTC.Wait(1) BTC.CompareBool("PfefferIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Pfeffer", -6.686, 1.321, -18.8996) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence // Weisswein Composite(Sequence) { BTC.SetBool("WeissweinIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.WeissweinSocket") BTC.SetBool("WeissweinIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") } Decorator(Repeat) { Composite(Sequence) { // Fail BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") BTC.Wait(1) BTC.CompareBool("WeissweinIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein", -6.58, 1.451, -19.0233) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence // Bouillon Composite(Sequence) { BTC.SetBool("BouillonIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.BouillonSocket") BTC.SetBool("BouillonIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") } Decorator(Repeat) { Composite(Sequence) { // Fail BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") BTC.Wait(1) BTC.CompareBool("BouillonIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon", -6.947, 1.402, -18.995) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence // Olivenoel Composite(Sequence) { BTC.SetBool("OlivenoelIsSnapped", false) Composite(Race) { Composite(Sequence) { // Success BTC.Run("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket") BTC.SetBool("OlivenoelIsSnapped") BTC.Disable("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel") } Decorator(Repeat) { Composite(Sequence) { // Fail BTC.ListenToEvent("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel") BTC.Wait(1) BTC.CompareBool("OlivenoelIsSnapped", false) // Objekt geht zurueck BTC.SetPosition("GO/NamedGrabEvent/NamedOutline.INTERACTABLES.Olivenoel", -6.752, 1.449, -19.024) BTC.Run("AudioSource.AUDIO.Kueche5Zwiebelnsch") } } } } // Sequence } BTC.Wait(1) Composite(Marathon) { BTC.Hide("GO/NamedSocketEvent.SOCKETS.OlivenoelSocket") BTC.Hide("GO/NamedSocketEvent.SOCKETS.BouillonSocket") BTC.Hide("GO/NamedSocketEvent.SOCKETS.WeissweinSocket") BTC.Hide("GO/NamedSocketEvent.SOCKETS.PfefferSocket") BTC.Hide("GO/NamedSocketEvent.SOCKETS.SalzSocket") BTC.Hide("GO/NamedSocketEvent.SOCKETS.RisottoSocket") } RunTree("32_Grotto_Kueche_alles_gefunden") } } Tree("32_Grotto_Kueche_alles_gefunden") { // --- Kueche - alles gefunden --- Composite(Sequence) { BTC.SynthesizeText("Bene, hai trovato tutto. Ora versa un po' di olio d'oliva nella pentola.") BTC.SpeechOutputEnded() // Oel in Topf geben - ToDo: Particle Trigger BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Olivenoel") BTC.Run("Collider.INTERACTABLES.Topf") BTC.Run("AudioSource.AUDIO.Kueche2allesgefund") // Herd anstellen - ToDo: Handling in Story? BTC.Run("NamedGrabEvent.STATIC.Herdschalter") BTC.Run("StudioEventEmitter.STATIC.HerdplatteAnstelle") // Zwiebeln in Topf geben BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Zwiebeln") BTC.Run("Collider.INTERACTABLES.Topf") BTC.Run("StudioEventEmitter.INTERACTABLES.ZwiebelnInTopf") BTC.Run("AudioSource.AUDIO.Kueche3allesgefund") // Frage beantworten BTC.AddPossbileSpeechIntent("Kueche.alles_gefunden.4") BTC.AddPossbileSpeechIntent("Kueche.alles_gefunden.6") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Sequence) { BTC.UserStartedSpeechInput() Composite(Selector) { // -- Selector 1: Intent erkannt Composite(Sequence) { BTC.SpeechIntentRecognized() // Intent erkannt Composite(Race) { Composite(Sequence) { BTC.CompareIntentID("Kueche.alles_gefunden.4") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Kueche_Interesse_Kochen") } Composite(Sequence) { BTC.CompareIntentID("Kueche.alles_gefunden.6") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } // -- Selector 2: Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() // Fallback Button Composite(Marathon) { BTC.Set("TextMeshPro.GO.Option1Button", "text", "Ja") BTC.Show("GO.GO.Option1Button") BTC.Set("TextMeshPro.GO.Option2Button", "text", "Nein") BTC.Show("GO.GO.Option2Button") } Composite(Race) { Composite(Sequence) { // Ja BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option2Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Interesse_Kochen") } Composite(Sequence) { // Nein BTC.Run("NamedEventTrigger.GO.Option2Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() // Fallback Button Composite(Marathon) { BTC.Set("TextMeshPro.GO.Option1Button", "text", "Ja") BTC.Show("GO.GO.Option1Button") BTC.Set("TextMeshPro.GO.Option2Button", "text", "Nein") BTC.Show("GO.GO.Option2Button") } Composite(Race) { Composite(Sequence) { // Ja BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option2Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Interesse_Kochen") } Composite(Sequence) { // Nein BTC.Run("NamedEventTrigger.GO.Option2Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } } } } Tree("32_Grotto_Kueche_Interesse_Kochen") { // --- Kueche - Interesse Kochen --- Composite(Sequence) { BTC.Run("AudioSource.AUDIO.Kueche1InteresseKo") // ToDo: Freie Antwort als Speech Input BTC.Set("TextMeshPro.GO.Option1Button", "text", "Lasagne") BTC.Show("GO.GO.Option1Button") BTC.SetBool("32_Grotto_Kueche_Interesse_Kochen_Button_Clicked", false) Composite(Race) { Composite(Sequence) { // Lieblingsessen nennen BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.SetBool("32_Grotto_Kueche_Interesse_Kochen_Button_Clicked") BTC.Hide("GO.GO.Option1Button") RunTree("32_Grotto_Kueche_Kochen_Anzahl") } Composite(Sequence) { // keine Antwort BTC.Wait(5) BTC.CompareBool("32_Grotto_Kueche_Interesse_Kochen_Button_Clicked", false) BTC.AbortEventListener("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } } Tree("32_Grotto_Kueche_Kochen_Anzahl") { // --- Kueche - Kochen Anzahl --- Composite(Sequence) { BTC.Run("AudioSource.AUDIO.Kueche1KochenAnzah") // Frage beantworten BTC.AddPossbileSpeechIntent("Kueche.Kochen_Anzahl.2") BTC.AddPossbileSpeechIntent("Kueche.Kochen_Anzahl.4") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Sequence) { BTC.UserStartedSpeechInput() Composite(Selector) { // -- Selector 1: Intent erkannt Composite(Sequence) { BTC.SpeechIntentRecognized() // Intent erkannt Composite(Race) { Composite(Sequence) { BTC.CompareIntentID("Kueche.Kochen_Anzahl.2") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Kueche_Selbststaendig_Kochen") } Composite(Sequence) { BTC.CompareIntentID("Kueche.Kochen_Anzahl.4") BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } // -- Selector 2: Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() // Fallback Button Composite(Marathon) { BTC.Set("TextMeshPro.GO.Option1Button", "text", "sehr oft") BTC.Show("GO.GO.Option1Button") BTC.Set("TextMeshPro.GO.Option2Button", "text", "selten") BTC.Show("GO.GO.Option2Button") } Composite(Race) { Composite(Sequence) { // sehr oft BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option2Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Selbststaendig_Kochen") } Composite(Sequence) { // selten BTC.Run("NamedEventTrigger.GO.Option2Button") BTC.AbortEventListener("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") BTC.Hide("GO.GO.Option2Button") RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() RunTree("32_Grotto_Kueche_Zusammen_Kochen") } } } } Tree("32_Grotto_Kueche_Zusammen_Kochen") { // --- Kueche - Zusammen Kochen --- Composite(Sequence) { BTC.Run("AudioSource.AUDIO.Kueche1ZusammenKoc") // Risotto in Topf geben BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Risotto") BTC.Run("Collider.INTERACTABLES.Topf") // Ruehren BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Loeffel") BTC.Run("Collider.INTERACTABLES.Topf") BTC.Wait(2) // Wie lange ruehren? BTC.Run("AudioSource.AUDIO.Kueche2ZusammenKoc") // Wein leuchtet BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") // Wein greifen BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Weisswein") // Wein in Topf giessen - Todo: Particle Trigger BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Weisswein") BTC.Run("Collider.INTERACTABLES.Topf") BTC.StopSound("StudioEventEmitter.INTERACTABLES.ZwiebelnInTopf") BTC.Run("StudioEventEmitter.INTERACTABLES.Abloeschen") Composite(Marathon) { Composite(Sequence) { BTC.Wait(16) BTC.SetFloat("StudioEventEmitter.INTERACTABLES.Abloeschen", "blubbern.transition", 1) BTC.Show("GO.INTERACTABLES.ChangeSound") // Ruehren } Composite(Sequence) { BTC.Wait(5) BTC.Run("AudioSource.AUDIO.Kueche3ZusammenKoc") } } // Bouillon leuchtet BTC.Enable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") // Bouillon greifen BTC.Run("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") BTC.Disable("NamedGrabEvent/NamedOutline.INTERACTABLES.Bouillon") // Bouillon in Topf geben - Todo: Particle Trigger BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Bouillon") BTC.Run("Collider.INTERACTABLES.Topf") BTC.Run("AudioSource.AUDIO.Kueche4ZusammenKoc") // Glas Wasser mit Steinpilze in Topf geben BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Steinpilze") BTC.Run("Collider.INTERACTABLES.Topf") //RunTree("32_Grotto_Kueche_Parmigiano") RunTree("32_Grotto_Im_Grotto_Essen_Intro") } } Tree("32_Grotto_Kueche_Selbststaendig_Kochen") { // --- Kueche - Selbststaendig Kochen --- Composite(Sequence) { BTC.Run("AudioSource.AUDIO.Kueche1Selbststaen") // Selbstaendig kochen... // ... BTC.GetKeyDown("Return") RunTree("32_Grotto_Kueche_Parmigiano") } } Tree("32_Grotto_Kueche_Parmigiano") { // --- Kueche - Parmigiano --- Composite(Sequence) { BTC.SynthesizeText("Schau, ich habe dir den Parmigiano hingestellt. Du kannst ihn nun in den Topf geben.") BTC.SpeechOutputEnded() // Parmigiano in Topf geben BTC.Run("NamedGrabEvent.INTERACTABLES.Parmigiano") BTC.Set("Collider.INTERACTABLES.Topf", "otherTag", "Parmigiano") BTC.Run("Collider.INTERACTABLES.Topf") BTC.SynthesizeText("Bist du fertig?") BTC.SpeechOutputEnded() // Antwort User // ToDo: Sprache fehlt BTC.Set("TextMeshPro.GO.Option1Button", "text", "Ja") BTC.Show("GO.GO.Option1Button") Composite(Race) { BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.Wait(5) } BTC.Hide("GO.GO.Option1Button") BTC.SynthesizeText("Bitte stelle den Risotto hier hin.") BTC.SpeechOutputEnded() // Stelle für Pfanne leuchtet BTC.Enable("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer") // Pfanne rueber stellen BTC.Run("NamedGrabEvent.INTERACTABLES.Topf") BTC.Set("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer", "otherTag", "Topf") BTC.Run("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer") BTC.Disable("Collider/NamedOutline.INTERACTABLES.TopfUntersetzer") // ToDo: Fallback Keine Reaktion BTC.Run("AudioSource.AUDIO.Kueche5FZusammenKo") BTC.Run("AudioSource.AUDIO.Kueche6FZusammenKo") // --- Kueche - Outro --- BTC.Run("AudioSource.AUDIO.Kueche1GOutro") BTC.SynthesizeText("Ich bin Giuseppe, Francescas Grossonkel. Und wer bist du?") BTC.SpeechOutputEnded() // Name sagen BTC.AddPossbileSpeechIntent("Kueche.Outro.4") BTC.StartSpeechIntentRecognition() Composite(Race) { // -- Race 1: User sagt etwas Composite(Sequence) { BTC.UserStartedSpeechInput() Composite(Selector) { // -- Selector 1: Intent erkannt Composite(Sequence) { BTC.SpeechIntentRecognized() BTC.ClearPossbileSpeechIntents() } // -- Selector 2: Intent nicht erkannt Composite(Sequence) { BTC.ClearPossbileSpeechIntents() // Fallback Button BTC.Set("TextMeshPro.GO.Option1Button", "text", "Mein Name ist User.") BTC.Show("GO.GO.Option1Button") BTC.Run("NamedEventTrigger.GO.Option1Button") BTC.Hide("GO.GO.Option1Button") } } } // -- Race 2: User sagt nichts Composite(Sequence) { BTC.Wait(5) BTC.CompareUserSpeechInputStarted(false) BTC.AbortSpeechEventListener() BTC.StopSpeechIntentRecognition() BTC.ClearPossbileSpeechIntents() } } BTC.Run("AudioSource.AUDIO.Kueche3GOutro") BTC.Run("AudioSource.AUDIO.Kueche2GOutro") } } Tree("32_Grotto_Im_Grotto_Essen_Intro") { // --- Im Grotto Essen - Intro --- Composite(Sequence) { // Initialization Composite(Marathon) { BTC.SetPosition("GO.XRInteractionHandsSetup.XROrigin", -3.837, 0, -10.676) BTC.SetPosition("GO.HANDMENU", -3.837, 0, -10.676) BTC.Run("StudioEventEmitter.STATIC.KuechenAmbi") BTC.Run("StudioEventEmitter.AUDIO.Ambi2D") BTC.StopSound("StudioEventEmitter.STATIC.Ambi3D") BTC.StopSound("StudioEventEmitter.STATIC.HerdplatteAnstelle") BTC.StopSound("StudioEventEmitter.INTERACTABLES.Abloeschen") } BTC.GetKeyDown("Return") } } Tree("32_Grotto_Kueche_Hide") { Composite(Sequence) { // Go to scene 3.5 Slideshow BTC.GetKeyDown("Return") BTC.SetStoryBVisited() BTC.Run("LoadScene.NEXT.35Slideshow") } }