Exemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        pointer = transform.Find("LeftRenderModel(Clone)/vr_glove_left(Clone)/vr_glove_model/Root/wrist_r/finger_index_meta_r/finger_index_0_r/finger_index_1_r/");

        if (pointer == null)
        {
            reachLinked = false;
            pulling     = false;
        }

        if (!reachLinked && pointer)
        {
            linkReach();
        }

        if (grab.GetStateUp(pose.inputSource))
        {
            Drop();
            holding = false;
        }

        if (leftSelect.GetStateDown(pose.inputSource))
        {
            if (eject)
            {
                changeToFree();
            }
            else
            {
                //player.transform.localPosition = new Vector3(-0.029f, -0.0003f, -0.0105f);
                eject = true;
            }
        }


        Vector3 dif     = Vector3.zero;
        Vector3 towards = pointer.right * -1;



        /*
         *
         *   Asteroid physics logic - need to refine..
         *
         */

        if (reachLinked && pull.GetState(pose.inputSource) && !pulling)
        {
            if (reachHandle.collided)
            {
                asteroid = reachHandle.collided;

                if (asteroid.CompareTag("Roid"))
                {
                    pulling = true;
                    roidrb  = asteroid.GetComponent <Rigidbody>();
                    roidrb.angularVelocity = new Vector3(2, 2, 2);
                }
                else
                {
                    asteroid = null;
                    pulling  = false;
                }
            }
        }
        else
        {
            if (!pull.GetState(pose.inputSource))
            {
                if (pulling)
                {
                    Vector3 handVel, nada;

                    pose.GetEstimatedPeakVelocities(out handVel, out nada);

                    handVel = player.transform.TransformDirection(handVel);

                    Debug.Log("Hand vel: " + handVel);

                    //if (Vector3.Magnitude(handVel) > 1){

                    roidrb.AddForce(3.0f * handVel, ForceMode.VelocityChange);
                    //}

                    roidrb = null;
                }
                pulling = false;
            }
        }

        if (pulling && pointer)
        {
            dif = this.transform.position - asteroid.transform.position;

            if (grip.GetState(pose.inputSource))
            {
                if (Vector3.Magnitude(dif) > 15.0f)
                {
                    roidrb.velocity = Vector3.Normalize(dif) / 10;
                }
            }
        }



        /*
         *
         * Steering Logic
         *
         *
         * if (driving){
         *  if (grab.GetState(pose.inputSource)){
         *      Vector3 difference = joystick.transform.position - transform.position;
         *
         *      if (Vector3.Magnitude(difference) < 1){
         *
         *          Quaternion rot = Quaternion.LookRotation(-1 * difference, Vector3.Cross(Vector3.right, difference));
         *          joystick.transform.rotation = rot;
         *      }
         *      else {
         *          driving = false;
         *          joystick.transform.localRotation = Quaternion.Euler(0, 0, 0);
         *      }
         *  }
         *  else{
         *      driving = false;
         *      joystick.transform.localRotation = Quaternion.Euler(0, 0, 0);
         *  }
         * }
         */


        /*
         *
         * Accel Logic
         *
         */
        if (flooring)
        {
            if (grab.GetState(pose.inputSource))
            {
                Vector3 difference = transform.position - throttle.transform.position;

                if (Vector3.Magnitude(difference) < 2)
                {
                    difference = throttle.transform.worldToLocalMatrix * difference;

                    float yrot = throttle.transform.localRotation.eulerAngles.y;

                    //if (yrot > -40 && yrot < 60) {
                    Vector3 lookAt = throttle.transform.localToWorldMatrix * new Vector3(difference.x, 0, difference.z);

                    Quaternion rot = Quaternion.LookRotation(lookAt, throttle.transform.up);
                    throttle.transform.rotation = rot;
                    //}
                }
                else
                {
                    flooring = false;
                }
            }
            else
            {
                flooring = false;
            }
        }
        lastPosition = transform.position;
    }
Exemplo n.º 2
0
 public void GetEstimatedPeakVelocities(out Vector3 velocity, out Vector3 angularVelocity)
 {
     trackedObject.GetEstimatedPeakVelocities(out velocity, out angularVelocity);
     velocity        = VRManager.trackingOrigin.TransformVector(velocity);
     angularVelocity = VRManager.trackingOrigin.TransformDirection(angularVelocity);
 }