//private bool ShouldIgnoreElement(GameObject obj, string ignoreCanvasWithTagOrClass, VRTK_TagOrScriptPolicyList canvasTagOrScriptListPolicy)
    //{
    //    var canvas = obj.GetComponentInParent<Canvas>();
    //    if (!canvas)
    //    {
    //        return false;
    //    }

    //    return (Utilities.TagOrScriptCheck(canvas.gameObject, canvasTagOrScriptListPolicy, ignoreCanvasWithTagOrClass));
    //}

    private void Hover(NoloVR_SimplePointer pointer, List <RaycastResult> results)
    {
        if (pointer.pointerEventData.pointerEnter)
        {
            //if (ShouldIgnoreElement(pointer.pointerEventData.pointerEnter, pointer.ignoreCanvasWithTagOrClass, pointer.canvasTagOrScriptListPolicy))
            //{
            //    return;
            //}

            if (NoValidCollision(pointer, results))
            {
                ExecuteEvents.ExecuteHierarchy(pointer.pointerEventData.pointerEnter, pointer.pointerEventData, ExecuteEvents.pointerExitHandler);
                pointer.pointerEventData.hovered.Remove(pointer.pointerEventData.pointerEnter);
                pointer.pointerEventData.pointerEnter = null;
            }
        }
        else
        {
            foreach (var result in results)
            {
                //if (ShouldIgnoreElement(result.gameObject, pointer.ignoreCanvasWithTagOrClass, pointer.canvasTagOrScriptListPolicy))
                //{
                //    continue;
                //}

                var target = ExecuteEvents.ExecuteHierarchy(result.gameObject, pointer.pointerEventData, ExecuteEvents.pointerEnterHandler);
                if (target != null)
                {
                    var selectable = target.GetComponent <Selectable>();
                    if (selectable)
                    {
                        var noNavigation = new Navigation();
                        noNavigation.mode     = Navigation.Mode.None;
                        selectable.navigation = noNavigation;
                    }

                    pointer.OnUIPointerElementEnter(pointer.SetUIPointerEvent(target, pointer.hoveringElement));
                    pointer.hoveringElement = target;
                    pointer.pointerEventData.pointerCurrentRaycast = result;
                    pointer.pointerEventData.pointerEnter          = target;
                    pointer.pointerEventData.hovered.Add(pointer.pointerEventData.pointerEnter);
                    break;
                }
                else
                {
                    if (result.gameObject != pointer.hoveringElement)
                    {
                        pointer.OnUIPointerElementEnter(pointer.SetUIPointerEvent(result.gameObject, pointer.hoveringElement));
                    }
                    pointer.hoveringElement = result.gameObject;
                }
            }

            if (pointer.hoveringElement && results.Count == 0)
            {
                pointer.OnUIPointerElementExit(pointer.SetUIPointerEvent(null, pointer.hoveringElement));
                pointer.hoveringElement = null;
            }
        }
    }
 private bool IsHovering(NoloVR_SimplePointer pointer)
 {
     foreach (var hoveredObject in pointer.pointerEventData.hovered)
     {
         if (pointer.pointerEventData.pointerEnter && hoveredObject && CheckTransformTree(hoveredObject.transform, pointer.pointerEventData.pointerEnter.transform))
         {
             return(true);
         }
     }
     return(false);
 }
    private List <RaycastResult> CheckRaycasts(NoloVR_SimplePointer pointer)
    {
        var raycastResult = new RaycastResult();

        raycastResult.worldPosition = pointer.transform.position;
        raycastResult.worldNormal   = pointer.transform.forward;

        pointer.pointerEventData.pointerCurrentRaycast = raycastResult;
        List <RaycastResult> raycasts = new List <RaycastResult>();

        eventSystem.RaycastAll(pointer.pointerEventData, raycasts);
        return(raycasts);
    }
Esempio n. 4
0
    private void Click(NoloVR_SimplePointer pointer, List <RaycastResult> results)
    {
#if NOLO_3DOF
        pointer.pointerEventData.eligibleForClick = NoloVR_Controller.GetDevice(pointer.deviceType).GetNoloButtonUp(NoloButtonID.Trigger) || Input.GetMouseButtonUp(0);
#elif NOLO_6DOF
        pointer.pointerEventData.eligibleForClick = NoloVR_Controller.GetDevice(pointer.deviceType).GetNoloButtonUp(NoloButtonID.Trigger) || Input.GetMouseButtonUp(0);
#else
        pointer.pointerEventData.eligibleForClick = Input.GetMouseButtonUp(0);
#endif
        if (pointer.pointerEventData.pointerPress)
        {
            //if (ShouldIgnoreElement(pointer.pointerEventData.pointerPress, pointer.ignoreCanvasWithTagOrClass, pointer.canvasTagOrScriptListPolicy))
            //{
            //    return;
            //}
            if (pointer.pointerEventData.eligibleForClick)
            {
                if (!IsHovering(pointer))
                {
                    ExecuteEvents.ExecuteHierarchy(pointer.pointerEventData.pointerPress, pointer.pointerEventData, ExecuteEvents.pointerUpHandler);
                    pointer.pointerEventData.pointerPress = null;
                }
            }
            else
            {
                ExecuteEvents.ExecuteHierarchy(pointer.pointerEventData.pointerPress, pointer.pointerEventData, ExecuteEvents.pointerClickHandler);
                ExecuteEvents.ExecuteHierarchy(pointer.pointerEventData.pointerPress, pointer.pointerEventData, ExecuteEvents.pointerUpHandler);
                pointer.pointerEventData.pointerPress = null;
            }
        }
        else if (pointer.pointerEventData.eligibleForClick)
        {
            foreach (var result in results)
            {
                //if (ShouldIgnoreElement(result.gameObject, pointer.ignoreCanvasWithTagOrClass, pointer.canvasTagOrScriptListPolicy))
                //{
                //    continue;
                //}

                var target = ExecuteEvents.ExecuteHierarchy(result.gameObject, pointer.pointerEventData, ExecuteEvents.pointerDownHandler);
                if (target != null)
                {
                    pointer.pointerEventData.pressPosition       = pointer.pointerEventData.position;
                    pointer.pointerEventData.pointerPressRaycast = result;
                    pointer.pointerEventData.pointerPress        = target;
                    break;
                }
            }
        }
    }
Esempio n. 5
0
 private void Scroll(NoloVR_SimplePointer pointer, List <RaycastResult> results)
 {
     //pointer.pointerEventData.scrollDelta = NoloVR_Controller.GetDevice(pointer.deviceType).GetAxis(NoloTouchID.TouchPad);
     //var scrollWheelVisible = false;
     //foreach (RaycastResult result in results)
     //{
     //    if (pointer.pointerEventData.scrollDelta != Vector2.zero)
     //    {
     //        var target = ExecuteEvents.ExecuteHierarchy(result.gameObject, pointer.pointerEventData, ExecuteEvents.scrollHandler);
     //        if (target)
     //        {
     //            scrollWheelVisible = true;
     //        }
     //    }
     //}
 }
    private void Scroll(NoloVR_SimplePointer pointer, List <RaycastResult> results)
    {
        pointer.pointerEventData.scrollDelta = NoloVR_Controller.GetDevice(pointer.deviceType).GetAxis(NoloTouchID.TouchPad);
        var scrollWheelVisible = false;

        foreach (RaycastResult result in results)
        {
            if (pointer.pointerEventData.scrollDelta != Vector2.zero)
            {
                var target = ExecuteEvents.ExecuteHierarchy(result.gameObject, pointer.pointerEventData, ExecuteEvents.scrollHandler);
                if (target)
                {
                    scrollWheelVisible = true;
                }
            }
        }

        //if (pointer.controllerRenderModel)
        //{
        //    VRTK_SDK_Bridge.SetControllerRenderModelWheel(pointer.controllerRenderModel, scrollWheelVisible);
        //}
    }
 private bool NoValidCollision(NoloVR_SimplePointer pointer, List <RaycastResult> results)
 {
     return(results.Count == 0 || !CheckTransformTree(results[0].gameObject.transform, pointer.pointerEventData.pointerEnter.transform));
 }