private bool getAirXRPointerData(AirXRPointer pointer, int pointerId, out AirXRPointerEventData 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, AirXRPointerEventData>());
                }
                data = new AirXRPointerEventData(eventSystem)
                {
                    pointerId = pointer.GetHashCode()
                };

                _pointerData[pointer.GetHashCode()].Add(pointerId, data);
                return(true);
            }
            else
            {
                data = null;
            }
        }
        return(false);
    }
    private MouseState getAirXRPointerEventData(AirXRPointer pointer)
    {
        AirXRPointerEventData leftData;
        var created = getAirXRPointerData(pointer, kMouseLeftId, out leftData, true);

        leftData.Reset();

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

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

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

        var position       = Vector2.zero;
        var airxrRaycaster = raycast.module as AirXRGraphicRaycaster;

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

        var airxrPhysicsRaycaster = raycast.module as AirXRPhysicsRaycaster;

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

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

        AirXRPointerEventData rightData;

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

        AirXRPointerEventData middleData;

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

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

        return(_mouseState);
    }
Пример #3
0
    private void prepareForEventSystem(AirXRPointer pointer, AXRInputDeviceID srcDevice)
    {
        pointer.Configure(this, srcDevice);

        if (_raycastPhysics)
        {
            var raycaster = pointer.gameObject.AddComponent <AirXRPhysicsRaycaster>();
            raycaster.eventMask = _physicsRaycastEventMask;
        }
    }
    private PointerEventData.FramePressState getAirXRPointerButtonState(AirXRPointer 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);
    }
Пример #5
0
    public void Raycast(AirXRPointer pointer, PointerEventData eventData, List <RaycastResult> resultAppendList)
    {
        if (eventData.IsVRPointer() == false)
        {
            base.Raycast(eventData, resultAppendList);
            return;
        }

        if (pointer.interactable)
        {
            raycast(eventData, resultAppendList, eventData.GetRay(), true);
        }
    }
Пример #6
0
    private void Awake()
    {
        player  = FindObjectOfType <VideoPlayer>();
        pointer = FindObjectOfType <AirXRPointer>();

        if (!player)
        {
            Debug.LogError("Not Found Video Player");
            return;
        }

        rig = FindObjectOfType <AirVRCameraRig>();

        player.prepareCompleted += OnPrepareCompleted;
        player.seekCompleted    += Player_seekCompleted;
    }
    private void raycastForAirXRPointer(AirXRPointer pointer, PointerEventData eventData, List <RaycastResult> raycastResults)
    {
        raycastResults.Clear();
        foreach (var raycaster in AirXRPhysicsRaycaster.GetAllRaycasters())
        {
            if (raycaster.pointer == pointer)
            {
                raycaster.Raycast(eventData, raycastResults);
            }
        }

        if (pointer.cameraRig.raycastGraphic)
        {
            foreach (var raycaster in AirXRGraphicRaycaster.GetAllRaycasters())
            {
                raycaster.Raycast(pointer, eventData, raycastResults);
            }
        }

        raycastResults.Sort(_raycastComparer);
    }
 public Feedback(AirXRPointer owner, AXRInputDeviceID device)
 {
     _owner  = owner;
     _device = device;
 }