IEnumerator FeedbackWaitTimer(BrainPart part, ButtonPointerHandler handler) { handler.OnAnswerFeedbackStart(current.CorrectAnswer == part); sfx.clip = current.CorrectAnswer == part ? correct : incorrect; sfx.Play(); //vänta 1 sekund medans feedback animeras yield return(new WaitForSeconds(1f)); //ta bort frågan ur frågepoolen ifall svaret var korrekt if (current.CorrectAnswer == part) { available.Remove(current); } //om det fortfarande finns frågor if (available.Count > 0) { //om svaret var korrekt, visa belöningsfaktoid if (current.CorrectAnswer == part) { PopupController.GetInstance.Open( "Du hade rätt!\n\n" + "Som belöning får du en faktoid om hjärnan! :)\n\n" + "<i><color=orange>\"" + factoids[UnityEngine.Random.Range(0, factoids.Length)] + "\"</color></i>", "Okej!", () => SetupNewQuestion(), "Coolt!", () => SetupNewQuestion()); } else { SetupNewQuestion(); } } else { //vi ska ha olika popupsettings beroende på vilket spel vi är i. if (SceneManager.GetActiveScene().name == "Spel1") { PopupController.GetInstance.Open( "Wow! Du svarade rätt på alla delar!\n\n" + "Du kan mycket om hjärnans delar nu, men kan du verkligen allt om hjärnan?\n\n" + "Vill du testa dina kunskaper ytterligare eller starta om det förra spelet?", "Testa mer!", () => SceneManager.LoadScene("Spel2"), "Starta om!", () => SceneManager.LoadScene("Spel1")); } else { PopupController.GetInstance.Open( "Wow, nu kan du allt om hjärnan!\n\n" + "Spela hela spelet igen?", "Starta om från början!", () => SceneManager.LoadScene("Spel1"), "", null); } } }
void UpdateUI() { //ta bort gamla frågor, svar och modeller for (int i = 0; i < answerList.childCount; i++) { Destroy(answerList.GetChild(i).gameObject); } for (int i = 0; i < brainRoot.childCount; i++) { Destroy(brainRoot.GetChild(i).gameObject); } //spawna modeller ifall vi är i spel 1 if (SceneManager.GetActiveScene().name == "Spel1") { for (int i = 0; i < available.Count; i++) { DialogueOption option = available[i]; //skapa knapp och modell i scenen GameObject g = Instantiate(buttonPrefab, answerList); GameObject p = Instantiate(option.CorrectBrainPart, brainRoot); MeshPointerHandler mph = p.GetComponentInChildren <MeshPointerHandler>(); ButtonPointerHandler bph = g.transform.GetComponentInChildren <ButtonPointerHandler>(); //sätt knapptexten till svaret g.transform.Find("Text").GetComponentInChildren <Text>().text = available[i].name; //registrera event för ljudeffekt + highlight + klick bph.OnEnter += (ButtonPointerHandler h) => { sfx.PlayOneShot(tick); mph.OnEnter(); }; bph.OnClick += (ButtonPointerHandler h) => { mph.OnExit(); OnClick(option, bph); }; bph.OnExit += (ButtonPointerHandler h) => mph.OnExit(); } } else { //i spel 2 använder vi ett enum då vi ej använder modeller, fungerar i övrigt likadant for (int i = 0; i < Enum.GetNames(typeof(BrainPart)).Length; i++) { BrainPart bp = (BrainPart)i; GameObject g = Instantiate(buttonPrefab, answerList); ButtonPointerHandler bph = g.transform.GetComponentInChildren <ButtonPointerHandler>(); //lägg till ett tomrum mellan varje stor bokstav i enumet och casta till sträng för att det ska se bättre ut i svaren "TheFrontalLobe" >> "The Frontal Lobe" g.transform.Find("Text").GetComponentInChildren <Text>().text = Regex.Replace(bp.ToString(), "[A-Z]", " $0"); bph.OnEnter += (ButtonPointerHandler h) => sfx.PlayOneShot(tick); bph.OnClick += (ButtonPointerHandler h) => OnClick(bp, bph); } } //sätt blurbtext blurb.text = "<size=24><color=orange>Which part of the brain is this?</color></size>\n\n" + current.Description; //stäng av modellen ifall vi är i spel 2 if (SceneManager.GetActiveScene().name == "Spel2") { brainRoot.gameObject.SetActive(false); } }
void OnClick(BrainPart part, ButtonPointerHandler handler) => this.StartCoroutine(FeedbackWaitTimer(part, handler));