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);
    }
 private void copyAirVRPointerEventData(AirVRPointerEventData from, AirVRPointerEventData to)
 {
     to.position              = from.position;
     to.delta                 = from.delta;
     to.scrollDelta           = from.scrollDelta;
     to.pointerCurrentRaycast = from.pointerCurrentRaycast;
     to.pointerEnter          = from.pointerEnter;
     to.worldSpaceRay         = from.worldSpaceRay;
 }
    private void processAirVRInputEvents()
    {
        foreach (AirVRPointer pointer in AirVRPointer.pointers)
        {
            if (pointer.interactable)
            {
                var eventData = getAirVRPointerEventData(pointer);
                processMouseEvent(eventData);

                AirVRPointerEventData leftButtonData = eventData.GetButtonState(PointerEventData.InputButton.Left).eventData.buttonData as AirVRPointerEventData;
                pointer.UpdateRaycastResult(leftButtonData.worldSpaceRay, leftButtonData.pointerCurrentRaycast);
            }
        }
    }