Esempio n. 1
0
    public bool teleport()
    {
        VIVECameraController vivecontroller = GetComponent <VIVECameraController>();
        // Look for nearest compass, and jump there.
        GameObject nearestCompass = findNearestLineOfSightCompass();

        // Go there.
        if (nearestCompass)
        {
            // Push the current interactionCompass on the history.
            GameObject interactionCompass = vivecontroller.VRoamCompass;
            history.Push(interactionCompass);

            Transform camTransform = vivecontroller.GetCameraTransform();
            Vector3   camForward   = camTransform.forward;
            Vector3   dirTo        = nearestCompass.transform.position - camTransform.position;
            float     msgAngle     = Vector3.Angle(camForward, dirTo);
            Debug.Log("Jumping to " + nearestCompass.name + ", angle(" + msgAngle + ") distance(" + dirTo.magnitude + ")");

            vivecontroller.VRoamCompass = nearestCompass;
            return(true);
        }
        else
        {
            return(false);
        }
    }
Esempio n. 2
0
 void Awake()
 {
     // Get the VIVECameraController
     CameraController = GetComponentInParent <VIVECameraController>();
     if (CameraController == null)
     {
         Debug.LogWarning("WARNING: VIVECameraController not found!");
         this.enabled = false;
         return;
     }
 }
Esempio n. 3
0
 public bool unTeleport()
 {
     if (history.Count > 0)
     {
         GameObject           interactionCompass = history.Pop();
         VIVECameraController vivecontroller     = GetComponent <VIVECameraController>();
         vivecontroller.VRoamCompass = interactionCompass;
         return(true);
     }
     else
     {
         return(false);
     }
 }
 void OnEnable()
 {
     _component = (VIVECameraController)target;
 }
Esempio n. 5
0
    GameObject findNearestLineOfSightCompass()
    {
        // Ignore the current interactionCompass
        VIVECameraController vivecontroller     = GetComponent <VIVECameraController>();
        GameObject           interactionCompass = vivecontroller.VRoamCompass;

        // If we're on an interactionCompass, then we have to transform our coordinate system to match.
        Transform camTransform = vivecontroller.GetCameraTransform();
        Vector3   camForward   = camTransform.forward;

        GameObject[]      compasses        = GameObject.FindGameObjectsWithTag("VIVECompass");
        List <GameObject> visibleCompasses = new List <GameObject>();

        foreach (GameObject compass in compasses)
        {
            if (compass.transform == interactionCompass)             // Ignore interactionCompass, we're already on it.
            {
                continue;
            }

            Vector3 dirToCompass = (compass.transform.position - camTransform.position);
            float   distance     = dirToCompass.magnitude;
            if (distance < 0.05f)
            {
                // We're standing right on it.
                visibleCompasses.Add(compass);
            }
            else
            {
                // Check if we're poiting at it.
                float angle = Vector3.Angle(camForward, dirToCompass);
                if (angle < 20)                   // Are we in the 20 degree cone from our forward orientation?
                {
                    visibleCompasses.Add(compass);
                }
            }
        }

        if (visibleCompasses.Count == 0)
        {
            return(null);
        }

        // sort for the nearest.
        visibleCompasses.Sort((objectA, objectB) => {
            float distA   = Vector3.Distance(camTransform.position, objectA.transform.position);
            float distB   = Vector3.Distance(camTransform.position, objectB.transform.position);
            float relDist = distB - distA;
            if (relDist > 0)
            {
                return(-1);
            }
            else if (relDist < 0)
            {
                return(1);
            }
            return(0);
        });

        return(visibleCompasses[0]);
    }