public static string Performance(double reactionTime, int numberOfTasks)
        {
            string performance;

            if (reactionTime < 300)
            {
                performance = "You did great!";
            }
            else if (reactionTime < 600)
            {
                performance = "You did O.K.";
            }
            else if (reactionTime < double.MaxValue)
            {
                performance = "You did rather poorly.";
            }
            else
            {
                performance = "You did nothing!";
            }

            if (AntiSpamming.DidHeSpam(4))
            {
                performance += " \nBut you spammed the keyboard";
            }
            return(performance);
        }
예제 #2
0
        private void CheckSpamming()
        {
            bool spamming = AntiSpamming.DidHeSpam(1);

            if (spamming && _spammingText.gameObject.activeInHierarchy == false)
            {
                ShowNotification();
            }
        }
예제 #3
0
 private void InitValues()
 {
     _reactionTimes = new double[_baselineSettings.NumberOfTasks];
     for (var i = 0; i < _baselineSettings.NumberOfTasks; i++)
     {
         _reactionTimes[i] = -1;
     }
     _iSprite    = -1;
     _passedTime = 0;
     AntiSpamming.Clear();
 }
예제 #4
0
        private void DisplayInfo()
        {
            double mean = SrtHandler.GetMean(_reactionTimes);

            _threshold = SrtHandler.GetAcceptableReationTime(_reactionTimes);
            string performance = OutputTextHandler.Performance(mean, _baselineSettings.NumberOfTasks);

            _panel.GetComponentInChildren <Text>().text = performance;
            GlobalSettings.Gs?.UpdateThreshold(_threshold);
            _currentDisplayStatus = AntiSpamming.DidHeSpam(4) || !(mean < double.MaxValue)
                                ? DisplayStatus.GoToMainMenu : DisplayStatus.DisplayingInfo;
            UnityClient.Communicator.Connect();
        }
예제 #5
0
 private void InitValues()
 {
     _taskType           = Randomness.RandomizeField(_taskSettings.NumberOfTasks, _taskSettings.NonIncentivePercentage);
     _upcomingSpriteType = _taskType[0] == 0 ? _taskSettings.NonIncentiveOrder[0] : _taskSettings.IncentiveOrder[0];
     _reactionTimes      = new double[_taskSettings.NumberOfTasks];
     for (var i = 0; i < _taskSettings.NumberOfTasks; i++)
     {
         _reactionTimes[i] = -1;
     }
     _iSprite          = -1;
     _passedTime       = 0;
     _numberOfSpamming = 0;
     AntiSpamming.Clear();
 }
예제 #6
0
 private void HandleUserInput()
 {
     if (!_spacebarPressed)
     {
         return;
     }
     if (AntiSpamming.CheckForSpamming(_currentDisplayStatus, _spacebarPressed))
     {
         _spamCounter++;
     }
     if (_iSprite < 0 || !(_reactionTimes[_iSprite] < 0))
     {
         return;
     }
     _reactionTimes[_iSprite] = _passedTime;
 }
예제 #7
0
        public void Update()
        {
            _spacebarPressed = Input.GetKeyDown("space");

            CheckSkipping();
            _passedTime += Time.deltaTime * 1000;

            double threshold = UnityClient.Communicator.HandleServerParams();

            if (Math.Abs(threshold) > float.Epsilon)
            {
                _threshold = threshold;
            }

            switch (_currentDisplayStatus)
            {
            case DisplayStatus.DisplayingInfo:
                var limit = _currentInfo.DisplayTime != -1 ? _currentInfo.DisplayTime : _taskSettings.InfoTime;
                if (_passedTime > limit)
                {
                    if (_currentSprite != null)
                    {
                        SpriteHandler.Sh.DestroySprite(_currentSprite);
                    }
                    _currentInfo          = _informationHolder.GetNextInformation();
                    _currentDisplayStatus = _currentInfo.NextDisplayStatus;
                    _panel.GetComponentInChildren <Text>().text = _currentInfo.InfoText;
                    _allowedSkipping = _currentInfo.Skippable;
                    _passedTime      = 0;
                }
                break;

            case DisplayStatus.DisplayResults:
                HandleUserInput();
                if (_passedTime > _spriteSettings.GetTimeSettings(_currentSpriteType).SpriteDelayTime)
                {
                    DisplayInfo();
                    _passedTime = 0;
                }
                break;

            case DisplayStatus.WaitToDisplaySprite:
                AntiSpamming.CheckForSpamming(_currentDisplayStatus, _spacebarPressed);
                HandleUserInput();
                if (_passedTime > _spriteSettings.GetTimeSettings(_upcomingSpriteType).SpriteDelayTime)
                {
                    _panel.GetComponentInChildren <Text>().text = "";
                    ShowSprite();
                    _passedTime = 0;
                }
                break;

            case DisplayStatus.DisplayingSprite:
                if (_passedTime > _spriteSettings.GetTimeSettings(_currentSpriteType).SpriteDisplayTime)
                {
                    AntiSpamming.Clear();
                    RemoveSprite();
                }
                HandleUserInput();
                break;

            case DisplayStatus.WaitingUserInput:
                if (_spacebarPressed)
                {
                    _currentDisplayStatus = DisplayStatus.DisplayingInfo;
                }
                break;

            case DisplayStatus.DisplayBoth:
                limit = _currentInfo.DisplayTime != -1 ? _currentInfo.DisplayTime : _taskSettings.InfoTime;
                if (_passedTime > limit)
                {
                    if (_currentSprite != null)
                    {
                        SpriteHandler.Sh.DestroySprite(_currentSprite);
                    }
                    _currentInfo          = _informationHolder.GetNextInformation();
                    _currentSprite        = SpriteHandler.Sh.CreateSprite(_currentInfo.Type, _panel, Position.Above);
                    _currentDisplayStatus = _currentInfo.NextDisplayStatus;
                    _panel.GetComponentInChildren <Text>().text = _currentInfo.InfoText;
                    _allowedSkipping = _currentInfo.Skippable;
                    _passedTime      = 0;
                }
                break;

            case DisplayStatus.GoToMainMenu:
                if (_passedTime > _taskSettings.InfoTime)
                {
                    UnityClient.Communicator.Disconnect();
                    GuiHandler.GoToMainMenu();
                }
                break;

            case DisplayStatus.GoToNextScene:
                limit = _currentInfo.DisplayTime != -1 ? _currentInfo.DisplayTime : _taskSettings.InfoTime;
                if (_passedTime > limit)
                {
                    if (Randomness.Rand.NextDouble() < 0.5)
                    {
                        _punishmentPanel.SetActive(true);
                    }
                    else
                    {
                        _rewardPanel.SetActive(true);
                    }
                    _panel.SetActive(false);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }