コード例 #1
0
 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");
 }
コード例 #2
0
    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;
        });
    }