private MouseState getAirVRPointerEventData(AirVRPointer pointer)
    {
        AirVRPointerEventData leftData;
        var created = getAirVRPointerData(pointer, kMouseLeftId, out leftData, true);

        leftData.Reset();

        leftData.worldSpaceRay    = pointer.GetWorldRay();
        leftData.button           = PointerEventData.InputButton.Left;
        leftData.scrollDelta      = Vector2.zero;
        leftData.useDragThreshold = false;

        raycastForAirVRPointer(pointer, leftData, _raycastResultCache);
        var raycast = FindFirstRaycast(_raycastResultCache);

        leftData.pointerCurrentRaycast = raycast;
        _raycastResultCache.Clear();

        Vector2 position = Vector2.zero;
        AirVRGraphicRaycaster airvrRaycaster = raycast.module as AirVRGraphicRaycaster;

        if (airvrRaycaster)
        {
            position = airvrRaycaster.GetScreenPosition(raycast);
        }

        AirVRPhysicsRaycaster airvrPhysicsRaycaster = raycast.module as AirVRPhysicsRaycaster;

        if (airvrPhysicsRaycaster)
        {
            position = airvrPhysicsRaycaster.GetScreenPosition(raycast.worldPosition);
        }

        if (created)
        {
            leftData.position = position;
        }
        leftData.delta    = position - leftData.position;
        leftData.position = position;

        AirVRPointerEventData rightData;

        getAirVRPointerData(pointer, kMouseRightId, out rightData, true);
        copyAirVRPointerEventData(leftData, rightData);
        rightData.button = PointerEventData.InputButton.Right;

        AirVRPointerEventData middleData;

        getAirVRPointerData(pointer, kMouseMiddleId, out middleData, true);
        copyAirVRPointerEventData(leftData, middleData);
        middleData.button = PointerEventData.InputButton.Middle;

        _mouseState.SetButtonState(PointerEventData.InputButton.Left, getAirVRPointerButtonState(pointer), leftData);
        _mouseState.SetButtonState(PointerEventData.InputButton.Right, PointerEventData.FramePressState.NotChanged, rightData);
        _mouseState.SetButtonState(PointerEventData.InputButton.Middle, PointerEventData.FramePressState.NotChanged, middleData);

        return(_mouseState);
    }
Exemplo n.º 2
0
    private void raycastForAirVRPointer(AirVRPointer pointer, PointerEventData eventData, List <RaycastResult> raycastResults)
    {
        raycastResults.Clear();
        foreach (var raycaster in AirVRPhysicsRaycaster.GetAllRaycasters())
        {
            if (raycaster.pointer == pointer)
            {
                raycaster.Raycast(eventData, raycastResults);
            }
        }
        foreach (var raycaster in AirVRGraphicRaycaster.GetAllRaycasters())
        {
            if (raycaster.pointer == pointer)
            {
                raycaster.Raycast(eventData, raycastResults);
            }
        }

        raycastResults.Sort(_raycastComparer);
    }