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); }
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); }
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); } }
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; }