Ejemplo n.º 1
0
        public void Write(CalibrationExerciseResultCinta result, CalibrationExerciseCinta exercise, float value)
        {
            switch (exercise)
            {
            case CalibrationExerciseCinta.ExpiratoryPeak:
            case CalibrationExerciseCinta.InspiratoryPeak:
                FlowDataDevice.FlowData.Add(new FlowData
                {
                    Date  = DateTime.Now,
                    Value = CintaFlowMath.ToLitresPerMinute(value)
                });
                break;

            case CalibrationExerciseCinta.RespiratoryFrequency:
                FlowDataDevice.FlowData.Add(new FlowData
                {
                    Date  = DateTime.Now,
                    Value = value * 60f
                });
                break;

            default:
                FlowDataDevice.FlowData.Add(new FlowData
                {
                    Date  = DateTime.Now,
                    Value = value / 1000f
                });
                break;
            }
        }
Ejemplo n.º 2
0
        //Stores the score of the round and change the stars sprites
        public void ReceivedStars(int roundScore, int roundNumber, float pikeValue)
        {
            totalScores[roundNumber] = roundScore;

            // Se o Pitaco estiver conectado
            if (scp.IsConnected)
            {
                FinalScore.pikeString[roundNumber].text += $"{PitacoFlowMath.ToLitresPerMinute(pikeValue)} L/min ({pikeValue} pa)";
            }
            else
            {
                // Se o Mano estiver conectado
                if (scm.IsConnected)
                {
                    FinalScore.pikeString[roundNumber].text += $"{ManoFlowMath.ToCentimetersofWater(pikeValue)} CmH2O ({pikeValue} pa)";
                }
                else
                {
                    // Se a Cinta de Pressão estiver conectada
                    if (scc.IsConnected)
                    {
                        FinalScore.pikeString[roundNumber].text += $"{CintaFlowMath.ToLitresPerMinute(pikeValue)} L/min ({pikeValue} pa)";
                    }
                }
            }   ////////////////////////////////////////


            WaterBehaviour(roundScore);

            for (int i = 0; i < roundScore; i++)
            {
                starsUI[i].sprite = starFilled;
            }
        }
Ejemplo n.º 3
0
        public void DisplayFinalScore(int score1, int score2, int score3)
        {
            scp = FindObjectOfType <SerialControllerPitaco>();
            scm = FindObjectOfType <SerialControllerMano>();
            scc = FindObjectOfType <SerialControllerCinta>();

            finalScore[0].FillStarsFinal(score1);
            finalScore[1].FillStarsFinal(score2);
            finalScore[2].FillStarsFinal(score3);

            // Se o Pitaco estiver conectado
            if (scp.IsConnected)
            {
                peakText[0].text = "   Pico: " + PitacoFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[0])) + " L/min";
                peakText[1].text = "   Pico: " + PitacoFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[1])) + " L/min";
                peakText[2].text = "   Pico: " + PitacoFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[2])) + " L/min";
            }
            else
            {
                // Se o Mano estiver conectado
                if (scm.IsConnected)
                {
                    peakText[0].text = "   Pico: " + ManoFlowMath.ToCentimetersofWater(Parsers.Float(pikeString[0])) + " CmH2O";
                    peakText[1].text = "   Pico: " + ManoFlowMath.ToCentimetersofWater(Parsers.Float(pikeString[1])) + " CmH2O";
                    peakText[2].text = "   Pico: " + ManoFlowMath.ToCentimetersofWater(Parsers.Float(pikeString[2])) + " CmH2O";
                }
                else
                {
                    // Se a Cinta Extensora estiver conectada
                    if (scc.IsConnected)
                    {
                        peakText[0].text = "   Pico: " + CintaFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[0])) + " L/min";
                        peakText[1].text = "   Pico: " + CintaFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[1])) + " L/min";
                        peakText[2].text = "   Pico: " + CintaFlowMath.ToLitresPerMinute(Parsers.Float(pikeString[2])) + " L/min";
                    }
                }
            }   ////////////////////////////////////////
        }
Ejemplo n.º 4
0
        public void ShowPlayerInfo()
        {
            //////////// Tradução da condição respiratória para português ////////////////
            var obstructiveTranslation = "Obstrutivo";
            var restrictiveTranslation = "Restritivo";
            var healthyTranslation     = "Saudável";

            var disfunction = Pacient.Loaded.Condition == ConditionType.Healthy ? healthyTranslation :
                              (Pacient.Loaded.Condition == ConditionType.Obstructive ? obstructiveTranslation : restrictiveTranslation);

            //////////////////////////////////////////////////////////////////////////////

            SysMessage.Info($"Jogador: {Pacient.Loaded.Name}\n" +
                            $"Condição: {disfunction}\n" +
                            $"Partidas Jogadas: {Pacient.Loaded.PlaySessionsDone}\n" +
                            $"\n-------------- Pitaco --------------\n" +
                            $"Pico Exp.: {PitacoFlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesPitaco.RawExpPeakFlow)} L/min ({Pacient.Loaded.CapacitiesPitaco.RawExpPeakFlow} Pa)\n" +
                            $"Pico Ins.: {PitacoFlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesPitaco.RawInsPeakFlow)} L/min ({Pacient.Loaded.CapacitiesPitaco.RawInsPeakFlow} Pa)\n" +
                            $"Tempo Ins.: {Pacient.Loaded.CapacitiesPitaco.RawInsFlowDuration / 1000f:F1} s\n" +
                            $"Tempo Exp.: {Pacient.Loaded.CapacitiesPitaco.RawExpFlowDuration / 1000f:F1} s\n" +
                            $"Tins/Texp: {((Pacient.Loaded.CapacitiesPitaco.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesPitaco.RawExpFlowDuration / 1000f)):F1}\n" +
                            $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesPitaco.RawRespRate * 60f:F1} rpm\n" +
                            $"\n-------------- Mano --------------\n" +
                            $"Pico Exp.: {ManoFlowMath.ToCentimetersofWater(Pacient.Loaded.CapacitiesMano.RawExpPeakFlow)} cmH2O ({Pacient.Loaded.CapacitiesMano.RawExpPeakFlow} Pa)\n" +
                            $"Pico Ins.: {ManoFlowMath.ToCentimetersofWater(Pacient.Loaded.CapacitiesMano.RawInsPeakFlow)} cmH2O ({Pacient.Loaded.CapacitiesMano.RawInsPeakFlow} Pa)\n" +
                            $"Tempo Ins.: {Pacient.Loaded.CapacitiesMano.RawInsFlowDuration / 1000f:F1} s\n" +
                            $"Tempo Exp.: {Pacient.Loaded.CapacitiesMano.RawExpFlowDuration / 1000f:F1} s\n" +
                            $"Tins/Texp: {((Pacient.Loaded.CapacitiesMano.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesMano.RawExpFlowDuration / 1000f)):F1}\n" +
                            // $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesMano.RawRespRate * 60f:F1} rpm\n" +
                            $"\n-------- Cinta Extensora --------\n" +
                            $"Pico Exp.: {CintaFlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesCinta.RawExpPeakFlow)} L/min ({Pacient.Loaded.CapacitiesCinta.RawExpPeakFlow} Pa)\n" +
                            $"Pico Ins.: {CintaFlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesCinta.RawInsPeakFlow)} L/min ({Pacient.Loaded.CapacitiesCinta.RawInsPeakFlow} Pa)\n" +
                            $"Tempo Ins.: {Pacient.Loaded.CapacitiesCinta.RawInsFlowDuration / 1000f:F1} s\n" +
                            $"Tempo Exp.: {Pacient.Loaded.CapacitiesCinta.RawExpFlowDuration / 1000f:F1} s\n" +
                            $"Tins/Texp: {((Pacient.Loaded.CapacitiesCinta.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesCinta.RawExpFlowDuration / 1000f)):F1}\n" +
                            $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesCinta.RawRespRate * 60f:F1} rpm");


            // SysMessage.Info ($"Jogador: {Pacient.Loaded.Name}\n" +
            // $"Condição: {Pacient.Loaded.Condition}\n" +
            // $"Partidas Jogadas: {Pacient.Loaded.PlaySessionsDone}\n" +
            // $"\nPitaco\n" +
            // $"-----------------------------\n" +
            // $"Pico Exp.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesPitaco.RawExpPeakFlow)} L/min ({Pacient.Loaded.CapacitiesPitaco.RawExpPeakFlow} Pa)\n" +
            // $"Pico Ins.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesPitaco.RawInsPeakFlow)} L/min ({Pacient.Loaded.CapacitiesPitaco.RawInsPeakFlow} Pa)\n" +
            // $"Tempo Ins.: {Pacient.Loaded.CapacitiesPitaco.RawInsFlowDuration / 1000f:F1} s\n" +
            // $"Tempo Exp.: {Pacient.Loaded.CapacitiesPitaco.RawExpFlowDuration / 1000f:F1} s\n" +
            // $"Tins/Texp: {((Pacient.Loaded.CapacitiesPitaco.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesPitaco.RawExpFlowDuration / 1000f)):F1}\n" +
            // $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesPitaco.RawRespRate * 60f:F1} rpm\n" +
            // $"\nManovacuômetro\n" +
            // $"-----------------------------\n" +
            // $"Pico Exp.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesMano.RawExpPeakFlow)} L/min ({Pacient.Loaded.CapacitiesMano.RawExpPeakFlow} Pa)\n" +
            // $"Pico Ins.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesMano.RawInsPeakFlow)} L/min ({Pacient.Loaded.CapacitiesMano.RawInsPeakFlow} Pa)\n" +
            // $"Tempo Ins.: {Pacient.Loaded.CapacitiesMano.RawInsFlowDuration / 1000f:F1} s\n" +
            // $"Tempo Exp.: {Pacient.Loaded.CapacitiesMano.RawExpFlowDuration / 1000f:F1} s\n" +
            // $"Tins/Texp: {((Pacient.Loaded.CapacitiesMano.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesMano.RawExpFlowDuration / 1000f)):F1}\n" +
            // // $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesMano.RawRespRate * 60f:F1} rpm\n" +
            // $"\nCinta Extensora\n" +
            // $"-----------------------------\n" +
            // $"Pico Exp.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesCinta.RawExpPeakFlow)} L/min ({Pacient.Loaded.CapacitiesCinta.RawExpPeakFlow} Pa)\n" +
            // $"Pico Ins.: {FlowMath.ToLitresPerMinute(Pacient.Loaded.CapacitiesCinta.RawInsPeakFlow)} L/min ({Pacient.Loaded.CapacitiesCinta.RawInsPeakFlow} Pa)\n" +
            // $"Tempo Ins.: {Pacient.Loaded.CapacitiesCinta.RawInsFlowDuration / 1000f:F1} s\n" +
            // $"Tempo Exp.: {Pacient.Loaded.CapacitiesCinta.RawExpFlowDuration / 1000f:F1} s\n" +
            // $"Tins/Texp: {((Pacient.Loaded.CapacitiesCinta.RawInsFlowDuration / 1000f) / (Pacient.Loaded.CapacitiesCinta.RawExpFlowDuration / 1000f)):F1}\n" +
            // $"Freq. Resp. Média: {Pacient.Loaded.CapacitiesCinta.RawRespRate * 60f:F1} rpm");
        }
Ejemplo n.º 5
0
        private IEnumerator Start()
        {
            _runStep = true;
            _serialController.Recalibrate();
            UnityEngine.Debug.Log("recalibrando...");

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

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

                    switch (_currentExercise)
                    {
                    case CalibrationExerciseCinta.RespiratoryFrequency:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Manipule a Cinta Extensora através da respiração. 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 = CintaFlowMath.RespiratoryRate(_capturedSamples, TimerRespFreq);

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

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

                    case CalibrationExerciseCinta.InspiratoryPeak:
                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, você deve PUXAR O AR COM FORÇA dilatando peito e abdome. 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;
                            _maxFlowINS = insCheck;

                            ResetFlowMeter();

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

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

                        case 4:
                            SoundManager.Instance.PlaySound("Success");

                            _tmpCapacities.InsPeakFlow = _tmpCapacities.RawInsPeakFlow / 2;

                            DudeTalk($"Seu pico inspiratório é de {CintaFlowMath.ToLitresPerMinute(_tmpCapacities.RawInsPeakFlow/2):F} L/min." +
                                     " Pressione (Enter) para continuar com os outros exercícios.");

                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue = _tmpCapacities.RawInsPeakFlow / 2;
                            _calibrationOverviewSendDto.Exercise         = RespiratoryExercise.InspiratoryPeak.GetDescription();
                            Pacient.Loaded.CapacitiesCinta.InsPeakFlow   = _tmpCapacities.RawInsPeakFlow / 2;
                            SaveAndQuit();
                            RecentlyCalibrated_InsPeak = true;
                            break;

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

                        break;

                    case CalibrationExerciseCinta.ExpiratoryPeak:

                        switch (_currentStep)
                        {
                        case 1:
                            DudeTalk("Neste exercício, você deve ASSOPRAR FORTE contraindo peito e abdome. 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;         //_tmpCapacities.RawInsPeakFlow-_flowMeter

                            ResetFlowMeter();

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

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

                        case 4:
                            SoundManager.Instance.PlaySound("Success");

                            _tmpCapacities.ExpPeakFlow = _tmpCapacities.RawExpPeakFlow / 2;

                            DudeTalk($"Seu pico expiratório é de {CintaFlowMath.ToLitresPerMinute(_tmpCapacities.RawExpPeakFlow/2):F} L/min." +
                                     " Pressione (Enter) para continuar.");

                            SetupNextStep();
                            break;

                        case 5:
                            _calibrationOverviewSendDto.CalibrationValue = _tmpCapacities.RawExpPeakFlow / 2;
                            _calibrationOverviewSendDto.Exercise         = RespiratoryExercise.ExpiratoryPeak.GetDescription();
                            Pacient.Loaded.CapacitiesCinta.ExpPeakFlow   = _tmpCapacities.RawExpPeakFlow / 2;
                            SaveAndQuit();
                            RecentlyCalibrated_ExpPeak = true;
                            break;

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

                        break;

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

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

                            _flowWatch.Restart();

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

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

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

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

                                _currentExerciseCount++;

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

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

                        break;

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

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

                            _flowWatch.Restart();

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

                            AirFlowDisable();
                            ResetFlowMeter();

                            Pacient.Loaded.CintaThreshold = tmpThreshold;

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

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

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

                        default:
                            ReturnToMainMenu();
                            break;
                        }

                        break;
                    }

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

                yield return(null);
            }
        }
Ejemplo n.º 6
0
    public void TestEquationsCinta()
    {
        var diffpress = 1100f;

        Debug.Log("Volumetric Flow Rate: " + CintaFlowMath.ToLitresPerMinute(diffpress) + " L/min");
    }