protected static void HandlePressExitAndEnter(Pointer3DEventData eventData, GameObject newEnterTarget) { if (eventData.pressEnter == newEnterTarget) { return; } var oldTarget = eventData.pressEnter == null ? null : eventData.pressEnter.transform; var newTarget = newEnterTarget == null ? null : newEnterTarget.transform; var commonRoot = default(Transform); for (var t = oldTarget; t != null; t = t.parent) { if (newTarget != null && newTarget.IsChildOf(t)) { commonRoot = t; break; } else { ExecuteEvents.Execute(t.gameObject, eventData, ExecutePointer3DEvents.PressExitHandler); } } eventData.pressEnter = newEnterTarget; for (var t = newTarget; t != commonRoot; t = t.parent) { ExecuteEvents.Execute(t.gameObject, eventData, ExecutePointer3DEvents.PressEnterHandler); } }
protected void ProcessPressUp(Pointer3DEventData eventData) { var currentOverGo = eventData.pointerCurrentRaycast.gameObject; if (eventData.pointerPress != null) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler); // see if we mouse up on the same element that we clicked on... var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo); if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler); } } // Drop events if (currentOverGo != null && eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler); } eventData.eligibleForClick = false; eventData.pointerPress = null; eventData.rawPointerPress = null; if (eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler); } eventData.dragging = false; eventData.pointerDrag = null; }
protected void ProcessPressDown(Pointer3DEventData eventData) { var currentOverGo = eventData.pointerCurrentRaycast.gameObject; eventData.eligibleForClick = true; eventData.delta = Vector2.zero; eventData.dragging = false; eventData.useDragThreshold = true; eventData.pressPosition = eventData.position; eventData.pressPosition3D = eventData.position3D; eventData.pressRotation = eventData.rotation; eventData.pressDistance = eventData.pointerCurrentRaycast.distance; eventData.pointerPressRaycast = eventData.pointerCurrentRaycast; DeselectIfSelectionChanged(currentOverGo, eventData); // search for the control that will receive the press // if we can't find a press handler set the press // handler to be what would receive a click. var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler); // didnt find a press handler... search for a click handler if (newPressed == null) { newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo); } float time = Time.unscaledTime; if (newPressed == eventData.lastPress) { if (eventData.raycaster != null && time < (eventData.clickTime + eventData.raycaster.clickInterval)) { ++eventData.clickCount; } else { eventData.clickCount = 1; } eventData.clickTime = time; } else { eventData.clickCount = 1; } eventData.pointerPress = newPressed; eventData.rawPointerPress = currentOverGo; eventData.clickTime = time; // Save the drag handler as well eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo); if (eventData.pointerDrag != null) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag); } }
private bool ShouldStartDrag(Pointer3DEventData eventData) { if (!eventData.useDragThreshold) { return(true); } var currentPos = eventData.position3D + (eventData.rotation * Vector3.forward) * eventData.pressDistance; var pressPos = eventData.pressPosition3D + (eventData.pressRotation * Vector3.forward) * eventData.pressDistance; return((currentPos - pressPos).sqrMagnitude >= dragThreshold * dragThreshold); }
protected bool ShouldStartDrag(Pointer3DEventData eventData) { if (!eventData.useDragThreshold || eventData.raycaster == null) { return(true); } var currentPos = eventData.position3D + (eventData.rotation * Vector3.forward) * eventData.pressDistance; var pressPos = eventData.pressPosition3D + (eventData.pressRotation * Vector3.forward) * eventData.pressDistance; var threshold = eventData.raycaster.dragThreshold; return((currentPos - pressPos).sqrMagnitude >= threshold * threshold); }
protected virtual void ProcessPress(Pointer3DEventData eventData) { if (eventData.GetPress()) { if (!eventData.pressPrecessed) { ProcessPressDown(eventData); } HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject); } else if (eventData.pressPrecessed) { ProcessPressUp(eventData); HandlePressExitAndEnter(eventData, null); } }
protected virtual void ProcessPress(Pointer3DEventData eventData) { if (!eventData.eligibleForClick) { if (eventData.GetPress()) { ProcessPressDown(eventData); } } else { if (!eventData.GetPress()) { ProcessPressUp(eventData); } } }
protected void ProcessPressUp(Pointer3DEventData eventData) { var currentOverGo = eventData.pointerCurrentRaycast.gameObject; ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler); // see if we mouse up on the same element that we clicked on... var pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo); // PointerClick and Drop events if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler); } else if (eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler); } eventData.pressPrecessed = false; eventData.eligibleForClick = false; eventData.pointerPress = null; eventData.rawPointerPress = null; if (eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler); } eventData.dragging = false; eventData.pointerDrag = null; // redo pointer enter / exit to refresh state // so that if we moused over something that ignored it before // due to having pressed on something else // it now gets it. if (currentOverGo != eventData.pointerEnter) { HandlePointerExitAndEnter(eventData, null); HandlePointerExitAndEnter(eventData, currentOverGo); } }
protected virtual void ProcessPress(Pointer3DEventData eventData) { if (eventData.GetPress()) { if (!eventData.pressPrecessed) { ProcessPressDown(eventData); } HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject); } else if (eventData.pressPrecessed) { ProcessPressUp(eventData); HandlePressExitAndEnter(eventData, null); } else if (eventData.hovered.Count > 0) { ExecuteEvents.Execute(eventData.hovered[0], eventData, ExecutePointer3DEvents.HoverHandler); } }
protected virtual void ProcessPress(Pointer3DEventData eventData) { if (eventData.GetPress()) { if (!eventData.pressPrecessed) { ProcessPressDown(eventData); Debug.Log("GetPress"); if (_showItemInfoUI) { _showItemInfoUI.CheckUI_ShouldOff(); } } HandlePressExitAndEnter(eventData, eventData.pointerCurrentRaycast.gameObject); } else if (eventData.pressPrecessed) { ProcessPressUp(eventData); HandlePressExitAndEnter(eventData, null); } }
public static void AssignPointerId(Pointer3DEventData eventData) { eventData.pointerId = validEventDataId--; }
protected virtual void ProcessPress(Pointer3DEventData eventData) { var currentOverGo = eventData.pointerCurrentRaycast.gameObject; if (eventData.GetPressDown()) { eventData.eligibleForClick = true; eventData.delta = Vector2.zero; eventData.dragging = false; eventData.useDragThreshold = true; eventData.pressPosition = eventData.position; eventData.pressPosition3D = eventData.position3D; eventData.pressRotation = eventData.rotation; eventData.pressDistance = eventData.pointerCurrentRaycast.distance; eventData.pointerPressRaycast = eventData.pointerCurrentRaycast; DeselectIfSelectionChanged(currentOverGo, eventData); // search for the control that will receive the press // if we can't find a press handler set the press // handler to be what would receive a click. var newPressed = ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.pointerDownHandler); // didnt find a press handler... search for a click handler if (newPressed == null) { newPressed = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo); } float time = Time.unscaledTime; if (newPressed == eventData.lastPress) { var diffTime = time - eventData.clickTime; if (diffTime < 0.3f) { ++eventData.clickCount; } else { eventData.clickCount = 1; } eventData.clickTime = time; } else { eventData.clickCount = 1; } eventData.pointerPress = newPressed; eventData.rawPointerPress = currentOverGo; eventData.clickTime = time; // Save the drag handler as well eventData.pointerDrag = ExecuteEvents.GetEventHandler <IDragHandler>(currentOverGo); if (eventData.pointerDrag != null) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.initializePotentialDrag); } } else if (eventData.GetPressUp()) { GameObject pointerUpHandler = null; if (eventData.pointerPress != null) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler); // see if we mouse up on the same element that we clicked on... //var pointerUpHandler = ExecuteEvents.GetEventHandler<IPointerClickHandler>(currentOverGo); pointerUpHandler = ExecuteEvents.GetEventHandler <IPointerClickHandler>(currentOverGo); if (eventData.pointerPress == pointerUpHandler && eventData.eligibleForClick) { ExecuteEvents.Execute(eventData.pointerPress, eventData, ExecuteEvents.pointerClickHandler); } } // Drop events if (currentOverGo != null && eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.ExecuteHierarchy(currentOverGo, eventData, ExecuteEvents.dropHandler); } eventData.eligibleForClick = false; eventData.pointerPress = null; eventData.rawPointerPress = null; if (eventData.pointerDrag != null && eventData.dragging) { ExecuteEvents.Execute(eventData.pointerDrag, eventData, ExecuteEvents.endDragHandler); } eventData.dragging = false; eventData.pointerDrag = null; } }