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(); }
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); } }