Exemplo n.º 1
0
 private void PlayerWakeUp()
 {
     Debug.Log(PitacoFlowMath.RespiratoryRate(Player.playerRespiratoryInfo, (int)countdownTime) + " bps");
     displayHowTo.text = "Acabou o tempo![Enter] para continuar.";
     //Se não jogou mandar sinal false para a permissão do jogador.
     EnablePlayerFlow(false);
     ResetCountDown();
     NotPlayedState();
 }
Exemplo n.º 2
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 CalibrationExercisePitaco.RespiratoryFrequency:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Você deve respirar somente pela boca. Não precisa morder o PITACO. Mantenha o PITACO 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 = PitacoFlowMath.RespiratoryRate(_capturedSamples, TimerRespFreq);

                            if (_flowMeter > RespiratoryFrequencyThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.Success, _currentExercise, _flowMeter);
                                _tmpCapacities.RespiratoryRate = _flowMeter;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.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.CapacitiesPitaco.RespiratoryRate = _tmpCapacities.RawRespRate;
                            SaveAndQuit();
                            break;

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

                    case CalibrationExercisePitaco.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.PitacoThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.Success, _currentExercise, insCheck);
                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.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($"Seu pico inspiratório é de {PitacoFlowMath.ToLitresPerMinute(_tmpCapacities.RawInsPeakFlow):F} L/min." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

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

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

                        break;

                    case CalibrationExercisePitaco.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.PitacoThreshold;
                            Pacient.Loaded.PitacoThreshold = tmpThreshold * 0.25f;

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

                            _flowWatch.Restart();

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

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

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

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

                                _currentExerciseCount++;

                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.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.CapacitiesPitaco.InsFlowDuration = _tmpCapacities.RawInsFlowDuration;
                            SaveAndQuit();
                            break;

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

                        break;

                    case CalibrationExercisePitaco.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.PitacoThreshold)
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.Success, _currentExercise, expCheck);
                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.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($"Seu pico expiratório é de {PitacoFlowMath.ToLitresPerMinute(_tmpCapacities.RawExpPeakFlow):F} L/min." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");
                            SetupNextStep();
                            break;

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

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

                        break;

                    case CalibrationExercisePitaco.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.PitacoThreshold;
                            Pacient.Loaded.PitacoThreshold = tmpThreshold * 0.25f;         //this helps the player expel all his air

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

                            _flowWatch.Restart();

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

                            AirFlowDisable();
                            ResetFlowMeter();

                            Pacient.Loaded.PitacoThreshold = tmpThreshold;

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

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

                                _currentExerciseCount++;
                                SetupNextStep(true);
                                continue;
                            }
                            else
                            {
                                _calibrationLogger.Write(CalibrationExerciseResultPitaco.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.CapacitiesPitaco.ExpFlowDuration = _tmpCapacities.RawExpFlowDuration;
                            SaveAndQuit();
                            break;

                        default:
                            ReturnToMainMenu();
                            break;
                        }

                        break;
                    }

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

                yield return(null);
            }
        }