private bool getAirVRPointerData(AirVRPointer pointer, int pointerId, out AirVRPointerEventData data, bool create)
    {
        if (_pointerData.ContainsKey(pointer.GetHashCode()) == false || _pointerData[pointer.GetHashCode()].TryGetValue(pointerId, out data) == false)
        {
            if (create)
            {
                if (_pointerData.ContainsKey(pointer.GetHashCode()) == false)
                {
                    _pointerData.Add(pointer.GetHashCode(), new Dictionary <int, AirVRPointerEventData>());
                }
                data = new AirVRPointerEventData(eventSystem)
                {
                    pointerId = pointer.GetHashCode()
                };

                _pointerData[pointer.GetHashCode()].Add(pointerId, data);
                return(true);
            }
            else
            {
                data = null;
            }
        }
        return(false);
    }
    protected override void OnEnable()
    {
        _pointer = GetComponent <AirVRPointer>();

        base.OnEnable();
        _allRaycasters.Add(this);
    }
    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);
    }
    private PointerEventData.FramePressState getAirVRPointerButtonState(AirVRPointer pointer)
    {
        bool pressed  = pointer.primaryButtonPressed;
        bool released = pointer.primaryButtonReleased;

        return((pressed && released) ? PointerEventData.FramePressState.PressedAndReleased :
               pressed?PointerEventData.FramePressState.Pressed:
               released ?              PointerEventData.FramePressState.Released :
               PointerEventData.FramePressState.NotChanged);
    }
Esempio n. 5
0
    private void prepareForEventSystem(AirVRPointer pointer, AirVRInputDeviceID srcDevice)
    {
        pointer.Configure(this, srcDevice);

        if (_raycastPhysics)
        {
            var raycaster = pointer.gameObject.AddComponent <AirVRPhysicsRaycaster>();
            raycaster.eventMask = _physicsRaycastEventMask;
        }
    }
Esempio n. 6
0
    public void Raycast(AirVRPointer pointer, PointerEventData eventData, List <RaycastResult> resultAppendList)
    {
        if (eventData.IsVRPointer() == false)
        {
            base.Raycast(eventData, resultAppendList);
            return;
        }

        if (pointer.interactable)
        {
            raycast(eventData, resultAppendList, eventData.GetRay(), true);
        }
    }
Esempio n. 7
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);
    }
 public Feedback(AirVRPointer owner, AirVRInputDeviceID device)
 {
     _owner  = owner;
     _device = device;
 }