public void HandleEvent(WaveEvents ev) { Debug.Log("Event " + ev.ToString()); if (!IsStarted()) { return; } switch (GetState()) { case WaveStates.Initial: if (ev == WaveEvents.Wave_Initial) { WriteLog("Initial Target Waved"); ChangeState(WaveStates.Delay); } break; case WaveStates.Target: if ((int)ev == currentLight && randomProbability <= collisionProbability) { WriteLog("Probability for Wave " + currentWave + ": " + randomProbability); trialController.correctWaves++; lightResults = LightResults.Correct; ChangeState(WaveStates.Feedback); } else if ((int)ev == currentLight && randomProbability > collisionProbability) { WriteLog("Probability for Wave " + currentWave + ": " + randomProbability); } else if ((int)ev != currentLight) { lightResults = LightResults.Incorrect; trialController.incorrectWaves++; ChangeState(WaveStates.Feedback); } break; case WaveStates.End: break; } }
public void Update() { if (!IsStarted()) { return; } switch (GetState()) { case WaveStates.Idle: if (GetTimeInState() > 0.25f) { ChangeState(WaveStates.Initial); } break; case WaveStates.Initial: if (GetTimeInState() > 0.25f && !initialLightOn) { TurnOnInitial(); } break; case WaveStates.Delay: if (GetTimeInState() > 0.5f && !targetLightOn) { ChangeState(WaveStates.Target); } break; case WaveStates.Target: // Wait between the lights turning on and off if (GetTimeInState() > collisionDelay && targetLightOn && !targetColliderOn) { collisionLights.SetActive(true); targetColliderOn = true; } if (GetTimeInState() > waveTimeOut && targetLightOn) { trialController.lateWaves++; lightResults = LightResults.Late; ChangeState(WaveStates.Feedback); } break; case WaveStates.Feedback: if (GetTimeInState() > 0.25f && !feedbackOn) { GiveFeedback(); } if (GetTimeInState() > 1.5f && feedbackOn) { ChangeState(WaveStates.Interval); } break; case WaveStates.End: break; } }