Ejemplo n.º 1
0
    private void FindTracker(ref HOTK_TrackedDevice tracker, HOTK_TrackedDevice.EType type)
    {
        if (tracker != null && tracker.IsValid)
        {
            return;
        }
        // Try to find an HOTK_TrackedDevice that is active and tracking the HMD
        foreach (var g in FindObjectsOfType <HOTK_TrackedDevice>().Where(g => g.enabled && g.Type == type))
        {
            tracker = g;
            break;
        }

        if (tracker != null)
        {
            return;
        }
        Debug.LogWarning("Couldn't find a " + type.ToString() + " tracker. Making one up :(");
        var go = new GameObject(type.ToString() + " Tracker", typeof(HOTK_TrackedDevice))
        {
            hideFlags = HideFlags.HideInHierarchy
        }.GetComponent <HOTK_TrackedDevice>();

        go.Type = type;
        tracker = go;
    }
 private void CallIndexChanged(EType role, uint index)
 {
     if (OnControllerIndexChanged != null)
     {
         OnControllerIndexChanged(role, index);
     }
 }
Ejemplo n.º 3
0
    // If the controller we are tracking changes index, update
    private void OnControllerIndexChanged(EType role, uint index)
    {
        // If the Overlay is attached to a Controller, this will trick it into reanchoring when the Controller Index changes.
        switch (_anchorDevice)
        {
        case AttachmentDevice.World:
        case AttachmentDevice.Screen:
            break;

        case AttachmentDevice.LeftController:
            if (role == EType.LeftController)
            {
                _anchorDevice = AttachmentDevice.World;
            }
            break;

        case AttachmentDevice.RightController:
            if (role == EType.RightController)
            {
                _anchorDevice = AttachmentDevice.World;
            }
            break;

        case AttachmentDevice.ThirdController:
            if (role == EType.ThirdController)
            {
                _anchorDevice = AttachmentDevice.World;
            }
            break;

        case AttachmentDevice.FourthController:
            if (role == EType.FourthController)
            {
                _anchorDevice = AttachmentDevice.World;
            }
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
Ejemplo n.º 4
0
    private void TestControllerTouchesOverlay(HOTK_OverlayBase overlay, ref HOTK_TrackedDevice tracker, HOTK_TrackedDevice.EType role, ref HOTK_OverlayBase target, ref HOTK_TrackedDevice hitTracker, ref SteamVR_Overlay.IntersectionResults?results)
    {
        FindTracker(ref tracker, role);
        if (tracker == null || !tracker.IsValid)
        {
            return;
        }
        if (overlay.TouchingTracker != null && overlay.TouchingTracker != tracker)
        {
            return;
        }
        var result = new SteamVR_Overlay.IntersectionResults();
        var hit    = !(Vector3.Angle(tracker.transform.forward, overlay.RotationTracker.transform.forward) > 90f) && ComputeIntersection(overlay, tracker.gameObject.transform.position - (tracker.gameObject.transform.forward * 0.1f), tracker.gameObject.transform.forward, ref result);

        if (!hit || result.distance >= 0.15f || (results != null && !(result.distance < results.Value.distance)))
        {
            return;
        }
        target     = overlay;
        hitTracker = tracker;
        results    = result;
    }