Esempio n. 1
0
    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);
            }
        }
    }
Esempio n. 2
0
    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);
        }
    }
Esempio n. 3
0
 void OnClick(BrainPart part, ButtonPointerHandler handler) => this.StartCoroutine(FeedbackWaitTimer(part, handler));