/// <summary> /// HoldCanceled event fires an message event upwards on the focus object for "HoldCanceled" /// and calls OnHoldCanceled for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="ray"></param> private void HoldCanceledEvent(AFocuser focuser, Ray ray) { if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, Vector3.zero, true, ray); if (focusObject != null) { focusObject.SendMessage("HoldCanceled", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnHoldCanceled, focusObject, eventArgs); ReleaseFocus(focuser); } if (focuser.UIInteractibleFocus != null) { PointerEventData eventData = focuser.GetPointerData(); FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, eventData, ExecuteEvents.pointerUpHandler); eventData.selectedObject = null; eventData.pointerPress = null; eventData.eligibleForClick = false; } } }
/// <summary> /// Navigation Canceled event fires an message event upwards on the focus object for "NavigationCanceled" /// and calls OnNavigationCanceled for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="relativePosition"></param> /// <param name="ray"></param> private void NavigationCanceledEvent(AFocuser focuser, Vector3 relativePosition, Ray ray) { IsNavigating = false; if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, relativePosition, true, ray); if (focusObject != null) { focusObject.SendMessage("NavigationCanceled", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnNavigationCanceled, focusObject, eventArgs); ReleaseFocus(focuser); } if (focuser.UIInteractibleFocus != null) { PointerEventData pointerEventData = focuser.GetPointerData(); FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, focuser.GetPointerData(), ExecuteEvents.endDragHandler); pointerEventData.pointerDrag = null; FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, focuser.GetPointerData(), ExecuteEvents.pointerUpHandler); pointerEventData.selectedObject = null; } } }
/// <summary> /// Navigation Updated event fires an message event upwards on the focus object for "NavigationUpdated" /// and calls OnNavigationUpdated for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="relativePosition"></param> /// <param name="ray"></param> private void NavigationUpdatedEvent(AFocuser focuser, Vector3 relativePosition, Ray ray) { IsNavigating = true; if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, relativePosition, true, ray); if (focusObject != null) { focusObject.SendMessage("NavigationUpdated", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnNavigationUpdated, focusObject, eventArgs); } WorldGraphicsRaycaster.RayEventData pointerEventData = focuser.GetPointerData() as WorldGraphicsRaycaster.RayEventData; if (pointerEventData.pointerDrag != null) { pointerEventData.delta = relativePosition; Vector2 curPos = pointerEventData.position; pointerEventData.CurrentAddition += relativePosition * pointerEventData.ScaleMultiplier; Vector3 offsetpos = pointerEventData.InitialDragHandPos + pointerEventData.CurrentAddition; pointerEventData.position = Camera.main.WorldToScreenPoint(offsetpos); FocusManager.Instance.ExecuteUIFocusEvent(pointerEventData.pointerDrag, pointerEventData, ExecuteEvents.dragHandler); pointerEventData.position = curPos; } } }
/// <summary> /// Navigation Started event fires an message event upwards on the focus object for "NavigationStarted" /// and calls OnNavigationStarted for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="relativePosition"></param> /// <param name="ray"></param> private void NavigationStartedEvent(AFocuser focuser, Vector3 relativePosition, Ray ray) { IsNavigating = true; if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, relativePosition, true, ray); if (focusObject != null) { focusObject.SendMessage("NavigationStarted", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnNavigationStarted, focusObject, eventArgs); CheckLockFocus(focuser); } if (focuser.UIInteractibleFocus != null) { WorldGraphicsRaycaster.RayEventData eventData = focuser.GetPointerData() as WorldGraphicsRaycaster.RayEventData; FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, eventData, ExecuteEvents.pointerDownHandler); eventData.pointerPress = focuser.UIInteractibleFocus; eventData.selectedObject = focuser.UIInteractibleFocus; eventData.dragging = true; eventData.eligibleForClick = false; eventData.pointerDrag = focuser.UIInteractibleFocus; Vector2 curPos = eventData.position; eventData.InitialDragHandPos = eventData.pointerPressRaycast.worldPosition + (Camera.main.transform.forward * eventData.pointerPressRaycast.distance); eventData.position = Camera.main.WorldToScreenPoint(eventData.InitialDragHandPos); FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, eventData, ExecuteEvents.beginDragHandler); eventData.position = curPos; eventData.CurrentAddition = Vector2.zero; } } }
/// <summary> /// ManipulationCanceled event fires an message event upwards on the focus object for "ManipulationCanceled" /// and calls OnManipulationCanceled for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="position"></param> /// <param name="ray"></param> private void ManipulationCanceledEvent(AFocuser focuser, Vector3 position, Ray ray) { IsManipulating = false; if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, position, false, ray); if (focusObject != null) { focusObject.SendMessageUpwards("ManipulationCanceled", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnManipulationCanceled, focusObject, eventArgs); ReleaseFocus(focuser); } if (focuser.UIInteractibleFocus != null) { PointerEventData eventData = focuser.GetPointerData(); FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, focuser.GetPointerData(), ExecuteEvents.pointerUpHandler); eventData.selectedObject = null; } } }
/// <summary> /// ManipulationUpdated event fires an message event upwards on the focus object for "ManipulationUpdated" /// and calls OnManipulationUpdated for InteractibleObjects /// </summary> /// <param name="focuser"></param> /// <param name="position"></param> /// <param name="ray"></param> private void ManipulationUpdatedEvent(AFocuser focuser, Vector3 position, Ray ray) { IsManipulating = true; if (focuser != null) { GameObject focusObject = focuser.PrimeFocus; InteractionEventArgs eventArgs = new InteractionEventArgs(focuser, position, false, ray); if (focusObject != null) { focusObject.SendMessageUpwards("ManipulationUpdated", eventArgs, SendMessageOptions.DontRequireReceiver); SendEvent(OnManipulationUpdated, focusObject, eventArgs); } FocusManager.Instance.ExecuteUIFocusEvent(focuser.UIInteractibleFocus, focuser.GetPointerData(), ExecuteEvents.moveHandler); } }