private void Start() { gazeHead = manager.GetComponent <ViveSR.anipal.Eye.GazeHeadPos>(); head_Transform = false; positionsCorrect = false; controller = hand.GetComponent <ControllerCheck>(); headbar_stable = GameObject.FindGameObjectWithTag("headPosition"); headbar_variable = GameObject.FindGameObjectWithTag("variable"); headset = GameObject.FindGameObjectWithTag("Camera"); rig = GameObject.FindGameObjectWithTag("CameraRig"); }
public override void DefineControlLevel() { // Defining States State nothing = new State("nothing"); State headStabilization = new State("Stabilize"); // ensures that the head is in the same position at the beginning of all trials State begin = new State("Begin"); // Step 1 and 2 in Procedure State stimOn = new State("Stimulus"); // Step 3 State collectResponse = new State("CollectResponse"); // Step 4 State penaltyState = new State("TimeOutPenalty"); State scoreState = new State("Score"); State destination = new State("Destination"); // sends the script either back to begin or to feeback State feedback = new State("Feedback"); // Step 5 AddActiveStates(new List <State> { nothing, headStabilization, begin, stimOn, collectResponse, penaltyState, scoreState, destination, feedback }); // Accessing other scripts verifyPositions = manager.GetComponent <Verify>(); controls = manager.GetComponent <Controls>(); controller = controllerPosition.GetComponent <ControllerCheck>(); triggered = gamecontroller.GetComponent <TriggerPull>(); rightController = GameObject.FindGameObjectWithTag("rightController"); leftController = GameObject.FindGameObjectWithTag("leftController"); headset = GameObject.FindGameObjectWithTag("Camera"); headbar_stable = GameObject.FindGameObjectWithTag("headPosition"); headbar_variable = GameObject.FindGameObjectWithTag("variable"); rig = GameObject.FindGameObjectWithTag("CameraRig"); trigger = GameObject.FindGameObjectWithTag("Trigger"); toggle = GameObject.FindGameObjectWithTag("toggle"); minitoggle = GameObject.FindGameObjectWithTag("minitoggle"); trialTypes = controls.trialTypes; scoreDisplay.text = "Score: " + score; nothing.AddStateInitializationMethod(() => { beginText.SetActive(false); fixationpoint.SetActive(false); endText.SetActive(false); controllerPosition.SetActive(false); playerPosition.SetActive(true); scoreDisplay.text = string.Empty; scoreText.SetActive(false); trigger.SetActive(false); data = false; }); nothing.SpecifyStateTermination(() => next == true, headStabilization); headStabilization.AddUpdateMethod(() => { // participant reaches out if (minitoggle == true) { armlength_in = rightController.transform.position; } // head position is correct if (minitoggle == false && armlength_in != Vector3.zero) { armlength_out = rightController.transform.position; armlength = Vector3.Distance(armlength_in, armlength_out); headbar_stable.transform.SetParent(rig.transform); } }); headStabilization.SpecifyStateTermination(() => next == false, begin); begin.AddDefaultInitializationMethod(() => { hit = -1; headbar_stable.SetActive(true); headbar_variable.SetActive(true); UnityEngine.Random.InitState((int)DateTime.Now.Second); percentCorrect = 0; beginText.SetActive(false); endText.SetActive(false); controllerPosition.SetActive(true); playerPosition.SetActive(true); scoreDisplay.text = string.Empty; scoreText.SetActive(false); trigger.SetActive(false); fixationpoint.SetActive(true); data = false; startTime = System.DateTime.UtcNow.ToString("HH:mm:ss"); if (trials == 0) { score = 0; } trialScore = 0; if (trials < 1) { beginText.SetActive(true); } endText.SetActive(false); trigger_x = 0; trigger_y = 0; trigger_z = 0; target_x = 0; target_y = 0; target_z = 0; penalty_x = 0; penalty_y = 0; penalty_z = 0; if (gamecontroller == rightController) { leftController.SetActive(false); } if (gamecontroller == leftController) { rightController.SetActive(false); } }); begin.SpecifyStateTermination(() => verifyPositions.positionsCorrect, stimOn); begin.AddDefaultTerminationMethod(() => beginText.SetActive(false)); stimOn.AddDefaultInitializationMethod(() => { headbar_stable.SetActive(false); headbar_variable.SetActive(false); fixationpoint.SetActive(false); beginText.SetActive(false); controllerPosition.SetActive(false); trials++; orientation = UnityEngine.Random.Range(0, 2); angle = (Mathf.Deg2Rad * UnityEngine.Random.Range(0, 359)); random2 = UnityEngine.Random.Range(0, controls.trialTypes.Length); random1 = controls.trialTypes[random2]; for (int i = 0; i < 9; i++) { if (random1 == i) { eccentricity = controls.allAngles[i] * (Mathf.Deg2Rad); target = controls.allTargets[i]; } } for (int i = random2; i < controls.trialTypes.Length - 1; i++) { controls.trialTypes[i] = controls.trialTypes[i + 1]; } Array.Resize(ref controls.trialTypes, controls.trialTypes.Length - 1); if (testobject == null) { testobject = Instantiate(target); testobject.transform.SetParent(playerPosition.transform); testobject.transform.localPosition = new Vector3(0, 0, 0); targetonObject = GameObject.FindGameObjectWithTag("Object"); penalty = GameObject.FindGameObjectWithTag("PenaltyonTarget"); testobject.transform.localPosition = new Vector3(eccentricity * Mathf.Cos(angle), eccentricity * Mathf.Sin(angle), 4 * armlength); if (orientation == 1) { testobject.transform.eulerAngles = new Vector3(0f, -angle * Mathf.Rad2Deg + 90, 0f); } if (orientation == 0) { testobject.transform.eulerAngles = new Vector3(0f, (-angle * Mathf.Rad2Deg) + 270, 0f); } } target_x = targetonObject.transform.position.x; target_y = targetonObject.transform.position.y; target_z = targetonObject.transform.position.z; penalty_x = penalty.transform.position.x; penalty_y = penalty.transform.position.y; penalty_z = penalty.transform.position.z; }); stimOn.AddTimer(.1f, collectResponse); collectResponse.AddDefaultInitializationMethod(() => { Timer = 0; }); collectResponse.AddUpdateMethod(() => { reaching_distance = Vector3.Distance(armlength_in, rightController.transform.position); if (reaching_distance > armlength) { trigger_x = test.transform.position.x; trigger_y = test.transform.position.y; trigger_z = test.transform.position.z; data = true; Destroy(testobject); } // Colliders not triggers if (trigger.activeSelf == true) { trigger_x = test.transform.position.x; trigger_y = test.transform.position.y; trigger_z = test.transform.position.z; data = true; Destroy(testobject); } Timer += Time.deltaTime; }); collectResponse.SpecifyStateTermination(() => testobject == null, scoreState); collectResponse.SpecifyStateTermination(() => Timer > 5f, penaltyState); penaltyState.AddDefaultInitializationMethod(() => { Destroy(testobject); trialScore = -500; }); penaltyState.AddTimer(.01f, destination); scoreState.AddDefaultInitializationMethod(() => { if (triggered.targetTouched == true) { trialScore = 100; triggered.targetTouched = false; percentCorrect++; score = score + trialScore; scoreDisplay.color = Color.green; scoreDisplay.text = "+ 100 \n " + "Score: " + score; scoreText.SetActive(true); Debug.Log("Trial Number " + trials + ", target was hit"); hit = 1; } else { trialScore = 0; } if (triggered.penaltyTouched == true) { trialScore = -100; triggered.penaltyTouched = false; score = score + trialScore; scoreDisplay.color = Color.red; scoreDisplay.text = "- 100 \n " + "Score: " + score; scoreText.SetActive(true); hit = 0; Debug.Log("Trial Number " + trials + ", target was missed"); } trigger.SetActive(false); Debug.Log("Hit: " + hit); }); scoreState.AddTimer(1.5f, destination); destination.AddDefaultInitializationMethod(() => { scoreText.SetActive(false); if (trials < 180) { end = 1; } else { end = 2; } }); destination.SpecifyStateTermination(() => end == 1, begin); destination.SpecifyStateTermination(() => end == 2, feedback); feedback.AddDefaultInitializationMethod(() => { endText.SetActive(true); percentCorrect = percentCorrect / 180; }); }