Exemplo n.º 1
0
        private IEnumerator PlayGame()
        {
            while (!partidaCompleta)
            {
                sco.StartSampling();

                if (ppasso)
                {
                    CleanScene();

                    while (!scp.IsConnected && !scm.IsConnected && !scc.IsConnected)
                    {
                        passo = -1;
                        TextPanel.SetActive(true);
                        displayHowTo.text = "Nenhum dispositivo de controle conectado! Conecte e volte ao menu principal.";
                        yield return(null);
                    }

                    // Se o PITACO estiver conectado
                    if (scp.IsConnected)
                    {
                        switch (passo)
                        {
                        case 1:
                            displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                            break;

                        case 2:

                            scp.StartSampling();
                            scp.Recalibrate();

                            displayHowTo.text = "";

                            TextPanel.SetActive(false);

                            while (player.sensorValuePitaco <= Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValuePitaco > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio, 1);
                                yield return(null);
                            }

                            scp.StopSampling();

                            //voltou pro 0
                            finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            break;

                        case 3:
                            FindObjectOfType <MinigameLogger>().WriteMinigameRound(1, finalScore[0], player.picoExpiratorio);
                            RestauraVariaveis();
                            displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                            break;

                        case 4:

                            scp.StartSampling();
                            scp.Recalibrate();

                            displayHowTo.text = "";
                            TextPanel.SetActive(false);
                            while (player.sensorValuePitaco <= Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValuePitaco > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio, 2);
                                yield return(null);
                            }

                            scp.StopSampling();

                            //voltou pro 0
                            finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            break;

                        case 5:
                            FindObjectOfType <MinigameLogger>().WriteMinigameRound(2, finalScore[1], player.picoExpiratorio);
                            RestauraVariaveis();
                            displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                            break;

                        case 6:

                            scp.StartSampling();
                            scp.Recalibrate();

                            displayHowTo.text = "";
                            TextPanel.SetActive(false);
                            while (player.sensorValuePitaco <= Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValuePitaco > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio, 3);
                                yield return(null);
                            }

                            scp.StopSampling();

                            //voltou pro 0
                            finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            player.picoExpiratorio = 0;
                            break;

                        case 7:
                            FindObjectOfType <MinigameLogger>().WriteMinigameRound(3, finalScore[2], player.picoExpiratorio);

                            TextPanel.SetActive(false);
                            finalScoreMenu.DisplayFinalScore(finalScore[0], finalScore[1], finalScore[2]);
                            finalScoreMenu.ToggleScoreMenu();

                            Debug.Log("Saving minigame data...");
                            GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                            FindObjectOfType <MinigameLogger>().Save(GameDevice.Pitaco, RespiratoryExercise.ExpiratoryPeak, Minigame.CakeGame);
                            GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                            Debug.Log("Minigame logs saved.");

                            player.picoExpiratorio = 0;

                            partidaCompleta = true;
                            break;
                        }
                        ppasso = false;
                    }

                    #region Other Controllers

                    else
                    {
                        // Se o MANO estiver conectado
                        if (scm.IsConnected)
                        {
                            switch (passo)
                            {
                            case 1:
                                displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                                break;

                            case 2:

                                scm.StartSampling();
                                scm.Recalibrate();

                                displayHowTo.text = "";

                                TextPanel.SetActive(false);

                                while (player.sensorValueMano <= Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValueMano > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio, 1);
                                    yield return(null);
                                }

                                scm.StopSampling();

                                //voltou pro 0
                                finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                break;

                            case 3:
                                FindObjectOfType <MinigameLogger>().WriteMinigameRound(1, finalScore[0], player.picoExpiratorio);
                                RestauraVariaveis();
                                displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                                break;

                            case 4:

                                scm.StartSampling();
                                scm.Recalibrate();

                                displayHowTo.text = "";
                                TextPanel.SetActive(false);
                                while (player.sensorValueMano <= Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValueMano > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio, 2);
                                    yield return(null);
                                }

                                scm.StopSampling();

                                //voltou pro 0
                                finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                break;

                            case 5:
                                FindObjectOfType <MinigameLogger>().WriteMinigameRound(2, finalScore[1], player.picoExpiratorio);
                                RestauraVariaveis();
                                displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                                break;

                            case 6:

                                scm.StartSampling();
                                scm.Recalibrate();

                                displayHowTo.text = "";
                                TextPanel.SetActive(false);
                                while (player.sensorValueMano <= Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValueMano > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio, 3);
                                    yield return(null);
                                }

                                scm.StopSampling();

                                //voltou pro 0
                                finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                player.picoExpiratorio = 0;
                                break;

                            case 7:
                                FindObjectOfType <MinigameLogger>().WriteMinigameRound(3, finalScore[2], player.picoExpiratorio);

                                TextPanel.SetActive(false);
                                finalScoreMenu.DisplayFinalScore(finalScore[0], finalScore[1], finalScore[2]);
                                finalScoreMenu.ToggleScoreMenu();

                                Debug.Log("Saving minigame data...");
                                GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                                FindObjectOfType <MinigameLogger>().Save(GameDevice.Mano, RespiratoryExercise.ExpiratoryPeak, Minigame.CakeGame);
                                GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                                Debug.Log("Minigame logs saved.");

                                player.picoExpiratorio = 0;

                                partidaCompleta = true;
                                break;
                            }
                            ppasso = false;
                        }
                        else
                        {
                            // Se o CINTA estiver conectado
                            if (scc.IsConnected)
                            {
                                switch (passo)
                                {
                                case 1:
                                    displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                                    break;

                                case 2:

                                    scc.StartSampling();
                                    scc.Recalibrate();

                                    displayHowTo.text = "";

                                    TextPanel.SetActive(false);

                                    while (player.sensorValueCinta <= Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValueCinta > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio, 1);
                                        yield return(null);
                                    }

                                    scc.StopSampling();

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    break;

                                case 3:
                                    FindObjectOfType <MinigameLogger>().WriteMinigameRound(1, finalScore[0], player.picoExpiratorio);
                                    RestauraVariaveis();
                                    displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                                    break;

                                case 4:

                                    scc.StartSampling();
                                    scc.Recalibrate();

                                    displayHowTo.text = "";
                                    TextPanel.SetActive(false);
                                    while (player.sensorValueCinta <= Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValueCinta > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio, 2);
                                        yield return(null);
                                    }

                                    scc.StopSampling();

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    break;

                                case 5:
                                    FindObjectOfType <MinigameLogger>().WriteMinigameRound(2, finalScore[1], player.picoExpiratorio);
                                    RestauraVariaveis();
                                    displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir";
                                    break;

                                case 6:

                                    scc.StartSampling();
                                    scc.Recalibrate();

                                    displayHowTo.text = "";
                                    TextPanel.SetActive(false);
                                    while (player.sensorValueCinta <= Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValueCinta > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio, 3);
                                        yield return(null);
                                    }

                                    scc.StopSampling();

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    player.picoExpiratorio = 0;
                                    break;

                                case 7:
                                    FindObjectOfType <MinigameLogger>().WriteMinigameRound(3, finalScore[2], player.picoExpiratorio);

                                    TextPanel.SetActive(false);
                                    finalScoreMenu.DisplayFinalScore(finalScore[0], finalScore[1], finalScore[2]);
                                    finalScoreMenu.ToggleScoreMenu();

                                    Debug.Log("Saving minigame data...");
                                    GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                                    FindObjectOfType <MinigameLogger>().Save(GameDevice.Cinta, RespiratoryExercise.ExpiratoryPeak, Minigame.CakeGame);
                                    GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                                    Debug.Log("Minigame logs saved.");

                                    player.picoExpiratorio = 0;

                                    partidaCompleta = true;
                                    break;
                                }
                                ppasso = false;
                            }
                        }
                    }

                    #endregion
                }
                yield return(null);
            }
            sco.StopSampling();
        }
Exemplo n.º 2
0
        //Incremental states(put them into the correct order)
        private IEnumerator PlayGame()
        {
            while (!finished)
            {
                sco.StartSampling();

                while (!scp.IsConnected && !scm.IsConnected && !scc.IsConnected)
                {
                    state = -1;
                    TextPanel.SetActive(true);
                    displayHowTo.text = "Nenhum dispositivo de controle conectado! Conecte e volte ao menu principal.";
                    yield return(null);
                }

                // Se o PITACO estiver conectado
                if (scp.IsConnected)
                {
                    switch (state)
                    {
                    case 1:     //Introduction
                        displayHowTo.text = "Bem-Vindo ao jogo do copo d'agua![ENTER]";

                        while (playable)
                        {
                            yield return(null);
                        }

                        playable = true;
                        break;

                    case 2:
                    case 4:
                    case 6:     //Pre-flow
                        TextPanel.SetActive(true);
                        displayHowTo.text = "Pressione [Enter] e INSPIRE \n o mais forte que conseguir dentro do tempo.";
                        while (playable)
                        {
                            yield return(null);
                        }
                        CleanRound();
                        playable = true;
                        TextPanel.SetActive(false);
                        break;

                    case 3:
                    case 5:
                    case 7:     //Player's Flow
                        scp.StartSampling();
                        scp.Recalibrate();
                        displayHowTo.text = "";
                        EnablePlayerFlow(true, _roundNumber);
                        _roundNumber++;

                        while (playable)
                        {
                            StartCountdown();
                            yield return(null);
                        }
                        scp.StopSampling();
                        ResetCountDown();
                        playable = true;
                        break;

                    case 8:
                        TextPanel.SetActive(true);
                        displayHowTo.text = "Pressione [Enter] para visualizar sua pontuação.";
                        break;

                    case 9:
                        Debug.Log("Saving minigame data...");
                        GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                        FindObjectOfType <Core.MinigameLogger>().Save(GameDevice.Pitaco, RespiratoryExercise.InspiratoryPeak, Minigame.WaterGame);
                        GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                        Debug.Log("Minigame logs saved.");

                        NotPlayable();
                        break;

                    case 10:
                        TextPanel.SetActive(false);
                        ShowFinalScore();
                        break;

                    case 99:
                        TextPanel.SetActive(true);
                        while (playable)
                        {
                            yield return(null);
                        }
                        playable = true;
                        break;
                    }
                }
                else
                {
                    // Se o Mano estiver conectado
                    if (scm.IsConnected)
                    {
                        switch (state)
                        {
                        case 1:     //Introduction
                            displayHowTo.text = "Bem-Vindo ao jogo do copo d'agua![ENTER]";

                            while (playable)
                            {
                                yield return(null);
                            }

                            playable = true;
                            break;

                        case 2:
                        case 4:
                        case 6:     //Pre-flow
                            TextPanel.SetActive(true);
                            displayHowTo.text = "Pressione [Enter] e INSPIRE \n o mais forte que conseguir dentro do tempo.";
                            while (playable)
                            {
                                yield return(null);
                            }
                            CleanRound();
                            playable = true;
                            TextPanel.SetActive(false);
                            break;

                        case 3:
                        case 5:
                        case 7:     //Player's Flow
                            scm.StartSampling();
                            scm.Recalibrate();
                            displayHowTo.text = "";
                            EnablePlayerFlow(true, _roundNumber);
                            _roundNumber++;

                            while (playable)
                            {
                                StartCountdown();
                                yield return(null);
                            }
                            scm.StopSampling();
                            ResetCountDown();
                            playable = true;
                            break;

                        case 8:
                            TextPanel.SetActive(true);
                            displayHowTo.text = "Pressione [Enter] para visualizar sua pontuação.";
                            break;

                        case 9:
                            Debug.Log("Saving minigame data...");
                            GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                            FindObjectOfType <Core.MinigameLogger>().Save(GameDevice.Mano, RespiratoryExercise.InspiratoryPeak, Minigame.WaterGame);
                            GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                            Debug.Log("Minigame logs saved.");

                            NotPlayable();
                            break;

                        case 10:
                            TextPanel.SetActive(false);
                            ShowFinalScore();
                            break;

                        case 99:
                            TextPanel.SetActive(true);
                            while (playable)
                            {
                                yield return(null);
                            }
                            playable = true;
                            break;
                        }
                    }
                    else
                    {
                        // Se a CINTA estiver conectada
                        if (scc.IsConnected)
                        {
                            switch (state)
                            {
                            case 1:     //Introduction
                                displayHowTo.text = "Bem-Vindo ao jogo do copo d'agua![ENTER]";

                                while (playable)
                                {
                                    yield return(null);
                                }

                                playable = true;
                                break;

                            case 2:
                            case 4:
                            case 6:     //Pre-flow
                                TextPanel.SetActive(true);
                                displayHowTo.text = "Pressione [Enter] e INSPIRE \n o mais forte que conseguir dentro do tempo.";
                                while (playable)
                                {
                                    yield return(null);
                                }
                                CleanRound();
                                playable = true;
                                TextPanel.SetActive(false);
                                break;

                            case 3:
                            case 5:
                            case 7:     //Player's Flow
                                scc.StartSampling();
                                scc.Recalibrate();
                                displayHowTo.text = "";
                                EnablePlayerFlow(true, _roundNumber);
                                _roundNumber++;

                                while (playable)
                                {
                                    StartCountdown();
                                    yield return(null);
                                }
                                scc.StopSampling();
                                ResetCountDown();
                                playable = true;
                                break;

                            case 8:
                                TextPanel.SetActive(true);
                                displayHowTo.text = "Pressione [Enter] para visualizar sua pontuação.";
                                break;

                            case 9:
                                Debug.Log("Saving minigame data...");
                                GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(true);
                                FindObjectOfType <Core.MinigameLogger>().Save(GameDevice.Cinta, RespiratoryExercise.InspiratoryPeak, Minigame.WaterGame);
                                GameObject.Find("Canvas").transform.Find("SavingBgPanel").gameObject.SetActive(false);
                                Debug.Log("Minigame logs saved.");

                                NotPlayable();
                                break;

                            case 10:
                                TextPanel.SetActive(false);
                                ShowFinalScore();
                                break;

                            case 99:
                                TextPanel.SetActive(true);
                                while (playable)
                                {
                                    yield return(null);
                                }
                                playable = true;
                                break;
                            }
                        }
                    }
                }

                yield return(null);
            }
            sco.StopSampling();
        }
Exemplo n.º 3
0
        private IEnumerator PlayGame()
        {
            while (!partidaCompleta)
            {
                if (ppasso)
                {
                    CleanScene();

                    while (!scp.IsConnected && !scm.IsConnected && !scc.IsConnected)
                    {
                        passo = -1;
                        TextPanel.SetActive(true);
                        displayHowTo.text = "Nenhum dispositivo de controle conectado! Conecte e volte ao menu principal.";
                        yield return(null);
                    }

                    // Se o Pitaco estiver conectado
                    if (scp.IsConnected)
                    {
                        switch (passo)
                        {
                        case 1:
                            displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                            break;

                        case 2:

                            scp.StartSampling();
                            scp.Recalibrate();


                            displayHowTo.text = "";

                            TextPanel.SetActive(false);

                            while (player.sensorValue <= Pacient.Loaded.PitacoThreshold * 2 && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValue > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio);
                                yield return(null);
                            }

                            //voltou pro 0
                            finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            player.picoExpiratorio = 0;
                            break;

                        case 3:
                            RestauraVariaveis();
                            break;

                        case 4:
                            displayHowTo.text = "";
                            TextPanel.SetActive(false);
                            while (player.sensorValue <= Pacient.Loaded.PitacoThreshold * 2 && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValue > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio);
                                yield return(null);
                            }

                            //voltou pro 0
                            finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            player.picoExpiratorio = 0;
                            break;

                        case 5:
                            RestauraVariaveis();
                            break;

                        case 6:
                            displayHowTo.text = "";
                            TextPanel.SetActive(false);
                            while (player.sensorValue <= Pacient.Loaded.PitacoThreshold * 2 && jogou)
                            {
                                yield return(null);
                            }

                            StopCountdown();
                            paraTempo = true;

                            //saiu do 0
                            while (player.sensorValue > Pacient.Loaded.PitacoThreshold && jogou)
                            {
                                FlowAction(player.picoExpiratorio);
                                yield return(null);
                            }

                            //voltou pro 0
                            finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                            TextPanel.SetActive(true);

                            if (jogou)
                            {
                                displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                SoundManager.Instance.PlaySound("Success");
                            }

                            player.picoExpiratorio = 0;
                            scp.StopSampling();
                            FindObjectOfType <PitacoLogger>().StopLogging();

                            break;
                        }
                        ppasso = false;
                    }
                    else     ////////////////////
                    // Se o Mano estiver conectado
                    {
                        if (scm.IsConnected)
                        {
                            switch (passo)
                            {
                            case 1:
                                displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                                break;

                            case 2:

                                scm.StartSampling();
                                scm.Recalibrate();

                                displayHowTo.text = "";

                                TextPanel.SetActive(false);

                                while (player.sensorValue <= Pacient.Loaded.ManoThreshold * 2 && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValue > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio);
                                    yield return(null);
                                }

                                //voltou pro 0
                                finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                player.picoExpiratorio = 0;
                                break;

                            case 3:
                                RestauraVariaveis();
                                break;

                            case 4:
                                displayHowTo.text = "";
                                TextPanel.SetActive(false);
                                while (player.sensorValue <= Pacient.Loaded.ManoThreshold * 2 && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValue > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio);
                                    yield return(null);
                                }

                                //voltou pro 0
                                finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                player.picoExpiratorio = 0;
                                break;

                            case 5:
                                RestauraVariaveis();
                                break;

                            case 6:
                                displayHowTo.text = "";
                                TextPanel.SetActive(false);
                                while (player.sensorValue <= Pacient.Loaded.ManoThreshold * 2 && jogou)
                                {
                                    yield return(null);
                                }

                                StopCountdown();
                                paraTempo = true;

                                //saiu do 0
                                while (player.sensorValue > Pacient.Loaded.ManoThreshold && jogou)
                                {
                                    FlowAction(player.picoExpiratorio);
                                    yield return(null);
                                }

                                //voltou pro 0
                                finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                                TextPanel.SetActive(true);

                                if (jogou)
                                {
                                    displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                    SoundManager.Instance.PlaySound("Success");
                                }

                                player.picoExpiratorio = 0;
                                scm.StopSampling();
                                FindObjectOfType <ManoLogger>().StopLogging();

                                break;
                            }
                            ppasso = false;
                        }
                        else
                        {
                            // Se a Cinta Extensora estiver conectada
                            if (scc.IsConnected)
                            {
                                switch (passo)
                                {
                                case 1:
                                    displayHowTo.text = "Pressione [Enter] e assopre o mais forte que conseguir dentro do tempo.";
                                    break;

                                case 2:

                                    scc.StartSampling();
                                    scc.Recalibrate();


                                    displayHowTo.text = "";

                                    TextPanel.SetActive(false);

                                    while (player.sensorValue <= Pacient.Loaded.CintaThreshold * 2 && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValue > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio);
                                        yield return(null);
                                    }

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[0] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    player.picoExpiratorio = 0;
                                    break;

                                case 3:
                                    RestauraVariaveis();
                                    break;

                                case 4:
                                    displayHowTo.text = "";
                                    TextPanel.SetActive(false);
                                    while (player.sensorValue <= Pacient.Loaded.CintaThreshold * 2 && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValue > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio);
                                        yield return(null);
                                    }

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[1] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ir para a proxima rodada.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    player.picoExpiratorio = 0;
                                    break;

                                case 5:
                                    RestauraVariaveis();
                                    break;

                                case 6:
                                    displayHowTo.text = "";
                                    TextPanel.SetActive(false);
                                    while (player.sensorValue <= Pacient.Loaded.CintaThreshold * 2 && jogou)
                                    {
                                        yield return(null);
                                    }

                                    StopCountdown();
                                    paraTempo = true;

                                    //saiu do 0
                                    while (player.sensorValue > Pacient.Loaded.CintaThreshold && jogou)
                                    {
                                        FlowAction(player.picoExpiratorio);
                                        yield return(null);
                                    }

                                    //voltou pro 0
                                    finalScoreMenu.pikeString[2] = player.picoExpiratorio.ToString();
                                    TextPanel.SetActive(true);

                                    if (jogou)
                                    {
                                        displayHowTo.text = "Parabéns!\nPressione [Enter] para ver a sua pontuação.";
                                        SoundManager.Instance.PlaySound("Success");
                                    }

                                    player.picoExpiratorio = 0;
                                    scc.StopSampling();
                                    FindObjectOfType <CintaLogger>().StopLogging();

                                    break;
                                }
                                ppasso = false;
                            }
                        }
                    }   ////////////////////////////////////////
                }
                yield return(null);
            }
        }
Exemplo n.º 4
0
        private IEnumerator Start()
        {
            _runStep = true;

            while (!_calibrationDone)
            {
                if (_runStep)
                {
                    // Clear screen
                    _enterButton.SetActive(false);
                    DudeClearMessage();

                    // Wait to show next step
                    yield return(new WaitForSeconds(0.7f));

                    switch (_currentExercise)
                    {
                    // case CalibrationExerciseMano.RespiratoryFrequency:

                    //     switch (_currentStep)
                    //     {
                    //         case 1:
                    //             DudeTalk("Você deve respirar somente pela boca. Não precisa morder o MANO. Mantenha o MANO sempre para baixo. Pressione (Enter) para continuar.");
                    //             SetupNextStep();
                    //             break;

                    //         case 2:
                    //             DudeTalk($"Neste exercício, você deve RESPIRAR NORMALMENTE por {TimerRespFreq} segundos. Ao apertar (Enter), o relógio ficará verde para você começar o exercício.");
                    //             SetupNextStep();
                    //             break;

                    //         case 3:
                    //             if (!_serialController.IsConnected)
                    //             {
                    //                 SerialDisconnectedWarning();
                    //                 continue;
                    //             }

                    //             _capturedSamples.Clear();
                    //             _serialController.StartSampling();

                    //             yield return new WaitForSeconds(1f);
                    //             _dialogText.text = "(relaxe e RESPIRE NORMALMENTE)";

                    //             AirFlowEnable();

                    //             StartCoroutine(DisplayCountdown(TimerRespFreq));
                    //             while (_flowWatch.ElapsedMilliseconds < TimerRespFreq * 1000)
                    //                 yield return null;

                    //             AirFlowDisable();

                    //             _flowMeter = FlowMath.RespiratoryRate(_capturedSamples, TimerRespFreq);

                    //             if (_flowMeter > RespiratoryFrequencyThreshold)
                    //             {
                    //                 _calibrationLogger.Write(CalibrationExerciseResultMano.Success, _currentExercise, _flowMeter);
                    //                 _tmpCapacities.RespiratoryRate = _flowMeter;
                    //                 SetupNextStep(true);
                    //                 continue;
                    //             }
                    //             else
                    //             {
                    //                 _calibrationLogger.Write(CalibrationExerciseResultMano.Failure, _currentExercise, _flowMeter);
                    //                 DudeWarnUnknownFlow();
                    //                 SetupStep(_currentStep);
                    //                 break;
                    //             }

                    //         case 4:
                    //             SoundManager.Instance.PlaySound("Success");
                    //             DudeTalk($"Sua média de frequência respiratória é de {(_tmpCapacities.RawRespRate * 60f):F} resp/min." +
                    //                 " Pressione (Enter) para continuar com os outros exercícios.");
                    //             SetupNextStep();
                    //             break;

                    //         case 5:
                    //             _calibrationOverviewSendDto.CalibrationValue = _tmpCapacities.RawRespRate;
                    //             _calibrationOverviewSendDto.Exercise = RespiratoryExercise.RespiratoryFrequency.GetDescription();
                    //             Pacient.Loaded.CapacitiesMano.RespiratoryRate = _tmpCapacities.RawRespRate;
                    //             SaveAndQuit();
                    //             break;

                    //         default:
                    //             FindObjectOfType<SceneLoader>().LoadScene(0);
                    //             break;
                    //     }
                    //     break;

                    case CalibrationExerciseMano.InspiratoryPeak:
                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, você deve PUXAR O AR COM FORÇA. Serão 3 tentativas. Ao apertar (Enter), o relógio ficará verde para você começar o exercício.");
                            SetupNextStep();
                            break;

                        case 2:
                            if (!_serialController.IsConnected)
                            {
                                SerialDisconnectedWarning();
                                continue;
                            }

                            _serialController.StartSampling();

                            _exerciseCountText.text = $"Exercício: {_currentExerciseCount + 1}/3";
                            yield return(new WaitForSeconds(1f));

                            AirFlowEnable();
                            StartCoroutine(DisplayCountdown(TimerPeakExercise));
                            _dialogText.text = "(PUXE O AR COM FORÇA 1 vez! E aguarde o próximo passo...)";

                            yield return(new WaitForSeconds(TimerPeakExercise));

                            AirFlowDisable();

                            var insCheck = _flowMeter;
                            ResetFlowMeter();

                            if (insCheck < -Pacient.Loaded.ManoThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Success, _currentExercise, insCheck);
                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Failure, _currentExercise, insCheck);
                                DudeWarnUnknownFlow();
                                SetupStep(_currentStep);
                                break;
                            }

                        case 3:
                            DudeCongratulate();
                            SetupStep(_currentExerciseCount == 3 ? _currentStep + 1 : _currentStep - 1);
                            break;

                        case 4:
                            SoundManager.Instance.PlaySound("Success");
                            DudeTalk($"Sua pressão inspiratória é de {ManoFlowMath.ToCentimetersofWater(_tmpCapacities.RawInsPeakFlow):F} cmH2O." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue = _tmpCapacities.RawInsPeakFlow;
                            _calibrationOverviewSendDto.Exercise         = RespiratoryExercise.InspiratoryPeak.GetDescription();
                            Pacient.Loaded.CapacitiesMano.InsPeakFlow    = _tmpCapacities.RawInsPeakFlow;
                            SaveAndQuit();
                            break;

                        default:
                            FindObjectOfType <SceneLoader>().LoadScene(0);
                            break;
                        }

                        break;

                    case CalibrationExerciseMano.InspiratoryDuration:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, MANTENHA o ponteiro GIRANDO, PUXANDO O AR! Serão 3 tentativas. Ao apertar (Enter), o relógio ficará verde para você começar o exercício.");
                            SetupNextStep();
                            break;

                        case 2:
                            if (!_serialController.IsConnected)
                            {
                                SerialDisconnectedWarning();
                                continue;
                            }

                            _serialController.StartSampling();

                            _exerciseCountText.text = $"Exercício: {_currentExerciseCount + 1}/3";
                            yield return(new WaitForSeconds(1));

                            AirFlowEnable(false);
                            _dialogText.text = "(MANTENHA o ponteiro GIRANDO, PUXANDO O AR!)";

                            var tmpThreshold = Pacient.Loaded.ManoThreshold;
                            Pacient.Loaded.ManoThreshold = tmpThreshold * 0.25f;

                            while (_flowMeter >= -Pacient.Loaded.ManoThreshold)
                            {
                                yield return(null);
                            }

                            _flowWatch.Restart();

                            while (_flowMeter < -Pacient.Loaded.ManoThreshold)
                            {
                                yield return(null);
                            }

                            AirFlowDisable();
                            ResetFlowMeter();
                            Pacient.Loaded.ManoThreshold = tmpThreshold;

                            // Validate for player input
                            if (_flowWatch.ElapsedMilliseconds > FlowTimeThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Success, _currentExercise, _flowWatch.ElapsedMilliseconds);

                                if (_flowWatch.ElapsedMilliseconds > _tmpCapacities.InsFlowDuration)
                                {
                                    _tmpCapacities.InsFlowDuration = _flowWatch.ElapsedMilliseconds;
                                }

                                _currentExerciseCount++;

                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Failure, _currentExercise, _flowWatch.ElapsedMilliseconds);
                                DudeWarnUnknownFlow();
                                SetupStep(_currentStep);
                                break;
                            }

                        case 3:
                            DudeCongratulate();
                            SetupStep(_currentExerciseCount == 3 ? _currentStep + 1 : _currentStep - 1);
                            break;

                        case 4:
                            SoundManager.Instance.PlaySound("Success");
                            DudeTalk($"Seu tempo de inspiração máximo é de {(_tmpCapacities.RawInsFlowDuration / 1000f):F} segundos." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue  = _tmpCapacities.RawInsFlowDuration;
                            _calibrationOverviewSendDto.Exercise          = RespiratoryExercise.InspiratoryDuration.GetDescription();
                            Pacient.Loaded.CapacitiesMano.InsFlowDuration = _tmpCapacities.RawInsFlowDuration;
                            SaveAndQuit();
                            break;

                        default:
                            FindObjectOfType <SceneLoader>().LoadScene(0);
                            break;
                        }

                        break;

                    case CalibrationExerciseMano.ExpiratoryPeak:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, você deve ASSOPRAR FORTE. Serão 3 tentativas. Ao apertar (Enter), o relógio ficará verde para você começar o exercício.");
                            SetupNextStep();
                            break;

                        case 2:
                            if (!_serialController.IsConnected)
                            {
                                SerialDisconnectedWarning();
                                continue;
                            }

                            _serialController.StartSampling();

                            _exerciseCountText.text = $"Exercício: {_currentExerciseCount + 1}/3";
                            yield return(new WaitForSeconds(1));

                            AirFlowEnable();
                            StartCoroutine(DisplayCountdown(TimerPeakExercise));
                            _dialogText.text = "(ASSOPRE FORTE 1 vez! E aguarde o próximo passo...)";

                            // Wait for player input
                            yield return(new WaitForSeconds(TimerPeakExercise));

                            AirFlowDisable();

                            var expCheck = _flowMeter;
                            ResetFlowMeter();

                            if (expCheck > Pacient.Loaded.ManoThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Success, _currentExercise, expCheck);
                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Failure, _currentExercise, expCheck);
                                DudeWarnUnknownFlow();
                                SetupStep(_currentStep);
                                break;
                            }

                        case 3:
                            DudeCongratulate();
                            SetupStep(_currentExerciseCount == 3 ? _currentStep + 1 : _currentStep - 1);
                            break;

                        case 4:
                            SoundManager.Instance.PlaySound("Success");
                            DudeTalk($"Sua pressão expiratório é de {ManoFlowMath.ToCentimetersofWater(_tmpCapacities.RawExpPeakFlow):F} cmH2O." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue = _tmpCapacities.RawExpPeakFlow;
                            _calibrationOverviewSendDto.Exercise         = RespiratoryExercise.ExpiratoryPeak.GetDescription();
                            Pacient.Loaded.CapacitiesMano.ExpPeakFlow    = _tmpCapacities.RawExpPeakFlow;
                            SaveAndQuit();
                            break;

                        default:
                            FindObjectOfType <SceneLoader>().LoadScene(0);
                            break;
                        }

                        break;

                    case CalibrationExerciseMano.ExpiratoryDuration:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, MANTENHA o ponteiro GIRANDO, ASSOPRANDO! Serão 3 tentativas. Ao apertar (Enter), o relógio ficará verde para você começar o exercício.");
                            SetupNextStep();
                            break;

                        case 2:
                            if (!_serialController.IsConnected)
                            {
                                SerialDisconnectedWarning();
                                continue;
                            }

                            _serialController.StartSampling();

                            _exerciseCountText.text = $"Exercício: {_currentExerciseCount + 1}/3";
                            yield return(new WaitForSeconds(1));

                            AirFlowEnable(false);
                            _dialogText.text = "(MANTENHA o ponteiro GIRANDO, ASSOPRANDO!)";

                            var tmpThreshold = Pacient.Loaded.ManoThreshold;
                            Pacient.Loaded.ManoThreshold = tmpThreshold * 0.25f;         //this helps the player expel all his air

                            // Wait for player input to be greather than threshold
                            while (_flowMeter <= Pacient.Loaded.ManoThreshold)
                            {
                                yield return(null);
                            }

                            _flowWatch.Restart();

                            while (_flowMeter > Pacient.Loaded.ManoThreshold)
                            {
                                yield return(null);
                            }

                            AirFlowDisable();
                            ResetFlowMeter();

                            Pacient.Loaded.ManoThreshold = tmpThreshold;

                            // Validate for player input
                            if (_flowWatch.ElapsedMilliseconds > FlowTimeThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Success, _currentExercise, _flowWatch.ElapsedMilliseconds);

                                if (_flowWatch.ElapsedMilliseconds > _tmpCapacities.ExpFlowDuration)
                                {
                                    _tmpCapacities.ExpFlowDuration = _flowWatch.ElapsedMilliseconds;
                                }

                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultMano.Failure, _currentExercise, _flowWatch.ElapsedMilliseconds);
                                DudeWarnUnknownFlow();
                                SetupStep(_currentStep);
                                break;
                            }

                        case 3:
                            DudeCongratulate();
                            SetupStep(_currentExerciseCount == 3 ? _currentStep + 1 : _currentStep - 1);
                            break;

                        case 4:
                            SoundManager.Instance.PlaySound("Success");
                            DudeTalk($"Seu tempo de fluxo expiratório máximo é de {(_tmpCapacities.RawExpFlowDuration / 1000f):F} segundos." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue  = _tmpCapacities.RawExpFlowDuration;
                            _calibrationOverviewSendDto.Exercise          = RespiratoryExercise.ExpiratoryDuration.GetDescription();
                            Pacient.Loaded.CapacitiesMano.ExpFlowDuration = _tmpCapacities.RawExpFlowDuration;
                            SaveAndQuit();
                            break;

                        default:
                            ReturnToMainMenu();
                            break;
                        }

                        break;
                    }

                    _enterButton.SetActive(true);
                    _runStep = false;
                }

                yield return(null);
            }
        }