// Update is called once per frame void Update() { if (firstUpdate) { // To avoid race conditions with the ConfigurationLoader Start() function, we perform the last of the config on the first update Init(); firstUpdate = false; } if (currentState == State.Study) { if (Time.time - startTime >= studyTime) { currentState = State.Delay; stimuliManager.gameObject.SetActive(false); startTime = Time.time; } } else if (currentState == State.Delay) { if (Time.time - startTime >= delayTime) { stimuliManager.gameObject.SetActive(true); touchLayer.enabled = true; topPositions = stimuliManager.StimuliToTop(configuration.GetTrialItemSize(currentTrialNumber).x, configuration.GetTrialItemSize(currentTrialNumber).y); currentState = State.Test; startTime = Time.time; } } else if (currentState == State.Test) { if ((configuration.GetStimuliLogInstructions(currentTrialNumber) == "skip" && Input.GetKeyUp(advanceKey)) || (Input.GetKeyUp(advanceKey) && stimuliManager.AllStimuliHaveMoved(topPositions))) { if (configuration.GetStimuliLogInstructions(currentTrialNumber) == "log") { AppendToLog(); } numberOfTrials -= 1; startTime = Time.time; touchLayer.enabled = false; if (numberOfTrials <= 0) { stimuliManager.gameObject.SetActive(false); currentState = State.Finished; logFile.Close(); actualCoordinatesLogFile.Close(); } else { currentState = State.Study; currentTrialNumber++; stimuliManager.SetStimuliAndPositions( configuration.GetStimuliTextures(currentTrialNumber), configuration.GetStimuliPositions(currentTrialNumber), configuration.GetTrialItemSize(currentTrialNumber) ); studyTime = (float)configuration.GetTrialStudyTime(currentTrialNumber) / 1000f; delayTime = (float)configuration.GetTrialDelayTime(currentTrialNumber) / 1000f; } } } }