void SetState(TaskState aState) { _taskState = aState; Debug.Log($"task state: {_taskState}"); if (_taskState == TaskState.NotStarted) { // do nothing } else if (_taskState == TaskState.First) { var gaze = _trial.Gaze; var direction = _trial.Direction; var slide = _trial.Slide; var color = _trial.Color; var runCount = _trial.RunCount; _hrClient.PlayingLadyStarts(runCount); _player.SetClips($"{gaze}_{direction}_{slide}_{color}", runCount.ToString()); _player.PlayFirst(); } else if (_taskState == TaskState.WaitingFaceGazed) { var slide = _trial.Slide; _hrClient.PlayingLadyPauses(slide); _focusDetector.SetTrackingObject(headArea); Invoke(nameof(NextState), maxGazeWaitingTime); } else if (_taskState == TaskState.Second) { var gaze = _trial.Gaze; var direction = _trial.Direction; var slide = _trial.Slide; if (gaze == PlayingLadyTrial.GazeDirections.Straight.ToString().ToLower()) { _hrClient.PlayingLadyStraight(slide, direction); } else if (gaze == PlayingLadyTrial.GazeDirections.Down.ToString().ToLower()) { _hrClient.PlayingLadyDown(slide, direction); } else { _hrClient.PlayingLadyAverted(slide, direction); } _player.PlaySecond(); } else if (_taskState == TaskState.Finished) { _focusDetector.SetTrackingObject(null); _player.Stop(); _log.TrialFinished(_trials.CurrentIndex); _hrClient.TrialFinished(); DisplayRestingMedia(); Invoke(nameof(ResetState), INTER_TRIAL_MIN_DURATION); } else { throw new IndexOutOfRangeException($"SetState: task is in unsupported state: {_taskState}"); } }