void Update() { if (trialState == TrialState.Ending) { EndTask(); return; } else if (trialState == TrialState.Starting) { print("Starting AX-CPT"); ShowText(trialState.Instructions(textures)); trialState = trialState.Next(); return; } var finishReady = trialState == TrialState.Ready && input.GetButtonDown("Button3"); var finishInstructions = trialState.isInstruction() && input.IsAnyKeyDown(); var finishState = (int)trialState > (int)TrialState.Ready && (int)trialState <= (int)TrialState.Probe && timer.isComplete; if (finishInstructions || finishReady || finishState) { if (finishReady) { distractionController.gameObject.SetActive(true); } Option <TrialState> nextState = Option <TrialState> .CreateEmpty(); if (recorder.isRecording && (trialState == TrialState.ISI || trialState == TrialState.PreCueITI)) { var responses = recorder.StopRecording(); salienceController.addResponseResult(trialList.trialTypes[currentTrial].CheckResponse(trialState, responses.Count > 0 ? responses.Last().buttonPressed : null)); if (practice.enabled) { nextState = practice.HandleResponse(trialState, responses, trialList.trialTypes[currentTrial]); } else { var output = new TrialOutput(currentTrial, trialList.trialTypes[currentTrial], trialState, stimulusName, responses); recordResults.WriteRow(output.ToString()); } } if (trialState == TrialState.PreCueITI && nextState.Count() == 0) { currentTrial++; if (currentTrial == trialList.trialTypes.Length) { trialState = TrialState.Ending; recordResults.Close(); return; } } if (nextState.Count() > 0) { trialState = nextState.First(); if (trialState != TrialState.Correct) { // Repeat the current trial currentTrial--; } } else { if (trialState == TrialState.Correct) { if (practice.PreviousState == TrialState.ISI) { trialState = TrialState.PreProbeITI; } else { trialState = TrialState.PreCueITI; } } else { trialState = trialState.Next(); } } //print ("Starting state " + trialState + " in trial number " + currentTrial); var instruction = trialState.Instructions(textures); if (instruction != "") { ShowText(instruction); } else { // currentTrial will be -1 on the first precueiti state when we need to show the iti texture // in that case, using null is okay for trial type because the iti texture doesn't depend on the trial type. var trialType = currentTrial == -1 ? null : trialList.trialTypes [currentTrial]; var selectedTexture = trialState.GetTexture(trialType, textures); ShowImage(selectedTexture); timer.duration = trialState.Duration(); if (trialState == TrialState.Cue || trialState == TrialState.Probe) { stimulusName = selectedTexture.name; recorder.StartRecording(); } timer.Start(); } } }
void Update() { if (trialState == TrialState.Ending) { EndTask(); return; } else if (trialState == TrialState.Starting) { print("Starting Math"); ShowText(trialState.Instructions()); trialState = trialState.Next(); return; } var finishReady = trialState == TrialState.Ready && input.GetButtonDown("Button3"); var finishInstructions = trialState.isInstruction() && (input.GetButtonDown("Button1") || input.GetButtonDown("Button2") || input.GetButtonDown("Button4")); var finishState = (int)trialState > (int)TrialState.Ready && (int)trialState <= (int)TrialState.ITI && (trialTimer.isComplete || recorder.hasResponse); if (finishInstructions || finishReady || finishState) { if (finishReady) { distractionController.gameObject.SetActive(true); } if (trialState != TrialState.Ending) { var blockComplete = blockTimer.isComplete; if (blockComplete) { currentBlock++; if (currentBlock == NumberOfBlocks) { trialState = TrialState.Ending; recordResults.Close(); return; } switch (type) { case BlockType.Easy: type = BlockType.Medium; break; case BlockType.Medium: type = BlockType.Easy; break; } blockTimer.Start(); } Option <TrialState> nextState = Option <TrialState> .CreateEmpty(); if (blockComplete || finishState || finishInstructions || finishReady) { if (trialState == TrialState.Problem) { var responses = recorder.StopRecording(); salienceController.addResponseResult(checker.Check(currentProblemName, responses.Count > 0 ? responses.Last().buttonPressed : null)); if (practice.enabled) { nextState = practice.HandleResponse(trialState, responses, currentProblemName); } else { var output = new TrialOutput(currentTrial, currentBlock, type, responses); recordResults.WriteRow(output.ToString()); } } if (nextState.Count() > 0) { trialState = nextState.First(); if (trialState != TrialState.Correct) { currentTrial--; } } else { trialState = trialState.Next(); } //print ("Starting state " + trialState); var instruction = trialState.Instructions(); if (instruction != "") { ShowText(instruction); } else { var currentProblem = trialState.GetTexture(type, mathTextures); currentProblemName = currentProblem.name; ShowImage(currentProblem); trialTimer.duration = trialState.Duration(); if (trialState == TrialState.Problem) { currentTrial++; recorder.StartRecording(); } trialTimer.Start(); } } } } }