public void ChangeHand(GameObject newTransform)
    {
        Vector3 handPosOffsetToUse;

        // vector -0.00205, 0, 0.0331 is the coordinate of the front of the controller
        realHand.transform.SetParent(newTransform.transform);
        m_controller = experimentController.GetController();

        handPosOffsetToUse = HandForNextTrial == "r" ?
                             handPosOffset : Vector3.Scale(handPosOffset, new Vector3(-1, 1, 1));

        realHand.transform.localPosition = handPosOffsetToUse;
    }
Exemple #2
0
    public void SpawnTarget(Trial trial)
    {
        float targetAngle = trial.settings.GetFloat("targetAngle");
        float vertPos     = trial.settings.GetFloat("target_vertPos");

        SetTargetAngle(targetAngle, vertPos);                        //set the target angle for this trial

        targetDistance = trial.settings.GetFloat("target_distance"); //set target distance for this trial
        targetDistance = targetDistance / 100.0f;
        //the distance to instantiate the target is in the z position

        if (IsGrabTrial)
        {
            // Reset the angle to 90 degrees (forward)
            SetTargetAngle(90f, vertPos);

            // Offset the entire target container
            transform.localPosition = new Vector3(0.0f, 0.0f, grabObjSpawnDist);
            //targetDistance = 0.3f;

            var grabObject = Instantiate(
                receptaclePrefab.name == boxPrefab.name ? PhysicsCubePrefab : PhysicsSpherePrefab, transform);

            Vector3 receptacleLocation = new Vector3(0f, 0f, targetDistance - grabObjSpawnDist);

            grabObject.transform.localPosition = new Vector3(0f, 0.1f, 0.0f);
            grabObject.GetComponent <GrabableObject>().m_controller = experimentController.GetController();
            grabObject.transform.SetParent(null);


            // 50/50 chance for either 25 degrees left or right of the target angle
            System.Random rand = new System.Random();

            float deviation = (rand.Next(2) == 0 ? -45f : 45f) / 2.0f;
            experimentController.distractorLoc = -deviation;

            // Set up receptacle
            SetTargetAngle(targetAngle + deviation, vertPos);
            var receptacle = Instantiate(receptaclePrefab, transform);
            receptacle.transform.localPosition = receptacleLocation;
            receptacle.transform.SetParent(null);


            // Set up incorrect receptacle
            SetTargetAngle(targetAngle - deviation, vertPos);
            var wrongReceptacle = Instantiate(
                receptaclePrefab.name == boxPrefab.name ? cylinderPrefab : boxPrefab, transform);
            wrongReceptacle.transform.localPosition = receptacleLocation;
            wrongReceptacle.transform.SetParent(null);


            // Reset the position of the target container back to its original position
            SetTargetAngle(targetAngle, vertPos);

            transform.localPosition = Vector3.zero;

            grabObject.transform.SetParent(transform);
            wrongReceptacle.transform.SetParent(transform);
            receptacle.transform.SetParent(transform);

            //log some things
            experimentController.objSpawnX = grabObject.transform.position.x;
            experimentController.objSpawnZ = grabObject.transform.position.z;

            // log receptacle too
            experimentController.recepticleX = receptacle.transform.position.x;
            experimentController.recepticleY = receptacle.transform.position.y;
            experimentController.recepticleZ = receptacle.transform.position.z;
        }
        else
        {
            // Set target angle to forwards
            SetTargetAngle(90f, vertPos);
            transform.localPosition = new Vector3(0, 0, secondHomeDist); //sets target container to parent 0

            // Spawn the second home
            var secondHome = Instantiate(secondaryHomePrefab, transform);
            secondHome.transform.SetParent(null);

            // Set up the real target
            SetTargetAngle(targetAngle, vertPos);

            // Set up the real target
            var target = Instantiate(
                trial.settings.GetString("type") == "localization" ? arcPrefab : targetPrefab,
                transform
                );

            if (trial.settings.GetString("type") == "localization")
            {
                target.GetComponent <ArcController>().GenerateArc(trial);
                target.GetComponent <ArcController>().SecondaryHomePos = secondHome.transform.position;
            }
            else
            {
                target.transform.localPosition = new Vector3(0, 0, targetDistance);
                target.GetComponent <TargetController>().SecondaryHomePos = secondHome.transform.position;
            }

            target.transform.SetParent(null);

            // Assign reference of the real target to the second home
            secondHome.GetComponent <TargetController>().IsSecondaryHome = true;
            secondHome.GetComponent <TargetController>().RealTarget      = target;

            // Reset all positions and re-parent everything
            transform.localPosition = Vector3.zero;
            secondHome.transform.SetParent(transform);
            target.transform.SetParent(transform);
            particleSystem.transform.localPosition = target.transform.localPosition;

            target.SetActive(false);
        }
    }