/// <summary> /// Takes an existing MouseModel and dispatches all relevant changes through the event system. /// It also updates the internal data of the MouseModel. /// </summary> /// <param name="mouseState">The mouse state you want to forward into the UI Event System</param> internal void ProcessMouse(ref MouseModel mouseState) { if (!mouseState.changedThisFrame) { return; } var eventData = GetOrCreateCachedPointerEvent(); eventData.Reset(); mouseState.CopyTo(eventData); eventData.pointerCurrentRaycast = PerformRaycast(eventData); /// Left Mouse Button // The left mouse button is 'dominant' and we want to also process hover and scroll events as if the occurred during the left click. var buttonState = mouseState.leftButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseMovement(eventData); ProcessMouseScroll(eventData); mouseState.CopyFrom(eventData); ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.leftButton = buttonState; /// Right Mouse Button buttonState = mouseState.rightButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.rightButton = buttonState; /// Middle Mouse Button buttonState = mouseState.middleButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.middleButton = buttonState; mouseState.OnFrameFinished(); }
/// <summary> /// Takes an existing MouseModel and dispatches all relevant changes through the event system. /// It also updates the internal data of the MouseModel. /// </summary> /// <param name="mouseState">The mouse state you want to forward into the UI Event System</param> internal void ProcessMouse(ref MouseModel mouseState) { if (!mouseState.changedThisFrame) { return; } var eventData = PreparePointerEventData(mouseState); /// Left Mouse Button // The left mouse button is 'dominant' and we want to also process hover and scroll events as if the occurred during the left click. var buttonState = mouseState.leftButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseMovement(eventData); ProcessMouseScroll(eventData); var internalMouseData = mouseState.internalData; internalMouseData.hoverTargets.ClearWithCapacity(); internalMouseData.hoverTargets.Append(eventData.hovered); internalMouseData.pointerTarget = eventData.pointerEnter; mouseState.internalData = internalMouseData; ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.leftButton = buttonState; /// Right Mouse Button buttonState = mouseState.rightButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.rightButton = buttonState; /// Middle Mouse Button buttonState = mouseState.middleButton; buttonState.CopyTo(eventData); ProcessMouseButton(buttonState.lastFrameDelta, eventData); ProcessMouseButtonDrag(eventData); buttonState.CopyFrom(eventData); mouseState.middleButton = buttonState; mouseState.OnFrameFinished(); }