internal void HandleMouseMovingEvents(int mouseButtonId, Vector2 newPosition, H1MouseState state) { if (!m_MouseButtonInfos.ContainsKey(mouseButtonId)) { m_MouseButtonInfos[mouseButtonId] = new MouseButtonInfo(); } var mouseButtonInfo = m_MouseButtonInfos[mouseButtonId]; if (state == H1MouseState.Down) { mouseButtonInfo.LastPosition = newPosition; mouseButtonInfo.MouseButtonClock.Restart(); } var mouseButtonEvent = H1MouseButtonMovingEvent.GetOrCreateMouseButtonEvent(); mouseButtonEvent.MouseButtonId = mouseButtonId; mouseButtonEvent.Position = newPosition; mouseButtonEvent.DeltaPosition = newPosition - mouseButtonInfo.LastPosition; mouseButtonEvent.State = state; mouseButtonEvent.DeltaTime = mouseButtonInfo.MouseButtonClock.Elapsed; m_MouseButtonMovingEvents.Add(mouseButtonEvent); mouseButtonInfo.LastPosition = newPosition; mouseButtonInfo.MouseButtonClock.Restart(); }
public void MouseButtonUp(MouseButtonInfo mouseInfo) { if (MouseUpEvent != null) { MouseUpEvent(mouseInfo); } }
public void MouseMove(MouseButtonInfo mouseInfo) { if (MouseMoveEvent != null) { MouseMoveEvent(mouseInfo); } }
private void AppDemo_MouseMoveEvent(MouseButtonInfo mouseInfo) { curMousePosition.x = mouseInfo.mPositionX; curMousePosition.y = mouseInfo.mPositionY; if (mouseRButtonDown) { float rotaX = curMousePosition.y - lastMousePosition.y; float rotaY = curMousePosition.x - lastMousePosition.x; lastMousePosition = curMousePosition; cameraRotateX += rotaX * 0.2f; cameraRotateY += rotaY * 0.2f; cameraRotation.SetValue(-cameraRotateX, -cameraRotateY, 0); gameObject.Transform.Rotation = cameraRotation; } else if (mouseMButtonDown) { curPos.SetValue(-curMousePosition.x + lastMousePosition.x, curMousePosition.y - lastMousePosition.y, 0); Vector3 dir = MainCamera.GetViewMatrix().Inverse() * curPos; dir.Normalize(); Vector3 newPos = gameObject.Transform.Position + dir; lastMousePosition = curMousePosition; gameObject.Transform.Position = newPos; } }
public void MouseButtonDown(MouseButtonInfo mouseInfo) { if (MouseDownEvent != null) { MouseDownEvent(mouseInfo); } }
private void AppDemo_MouseUpEvent(MouseButtonInfo mouseInfo) { if (mouseInfo.mButton == MouseButton.RightButton) { Debug.LogWarning("MouseButton.RightButton"); mouseRButtonDown = false; } else if (mouseInfo.mButton == MouseButton.MiddleButton) { mouseMButtonDown = false; } }
private void AppDemo_MouseDownEvent(MouseButtonInfo mouseInfo) { lastMousePosition.x = mouseInfo.mPositionX; lastMousePosition.y = mouseInfo.mPositionY; if (mouseInfo.mButton == MouseButton.RightButton) { mouseRButtonDown = true; } else if (mouseInfo.mButton == MouseButton.MiddleButton) { mouseMButtonDown = true; } }
MouseButtonInfo DeduceMouseButtonState(MouseButtonInfo lastMouseButtonState, bool lastButtonState, bool buttonState, bool hasMoved) { if (!lastButtonState && !buttonState) { return(new MouseButtonInfo(MouseButtonState.Idle)); } if (!lastButtonState) { return(new MouseButtonInfo(MouseButtonState.Pressed, new MouseDragState(Position, Position))); } if (buttonState) { if (hasMoved) { if (Math.Abs(Position.X - lastMouseButtonState.DragState.Start.X) > DraggingThreshold || Math.Abs(Position.Y - lastMouseButtonState.DragState.Start.Y) > DraggingThreshold) { if (lastMouseButtonState.State == MouseButtonState.DragStarted || lastMouseButtonState.State == MouseButtonState.Dragging) { return(new MouseButtonInfo(MouseButtonState.Dragging, new MouseDragState(lastMouseButtonState.DragState, Position))); } else { return(new MouseButtonInfo(MouseButtonState.DragStarted, new MouseDragState(lastMouseButtonState.DragState, Position))); } } return(new MouseButtonInfo(MouseButtonState.Pressed, new MouseDragState(lastMouseButtonState.DragState, Position))); } else { return(lastMouseButtonState); } } if ((lastMouseButtonState.State == MouseButtonState.Pressed || lastMouseButtonState.State == MouseButtonState.Down) && !hasMoved) { return(new MouseButtonInfo(MouseButtonState.Clicked)); } return(new MouseButtonInfo(MouseButtonState.DragEnded)); }
MouseButtonInfo ResetButton(MouseButtonInfo button) { switch (button.State) { case MouseButtonState.Pressed: return(new MouseButtonInfo(MouseButtonState.Down, button.DragState)); case MouseButtonState.DragEnded: case MouseButtonState.Clicked: return(new MouseButtonInfo(MouseButtonState.Idle)); case MouseButtonState.DragStarted: return(new MouseButtonInfo(MouseButtonState.Dragging, button.DragState)); case MouseButtonState.Dragging: if (Movement.X != button.DragState.Movement.X || Movement.Y != button.DragState.Movement.Y) { return(new MouseButtonInfo(MouseButtonState.Dragging, new MouseDragState(button.DragState, Position))); } break; } return(button); }
/// <summary> /// Perform logic to update mouse/pointing device /// </summary> void UpdateMouse() { basicMouseInfo.previousPosition = basicMouseInfo.currentPosition; basicMouseInfo.currentPosition = UnityInput.mousePosition; basicMouseInfo.delta = basicMouseInfo.currentPosition - basicMouseInfo.previousPosition; mouseMovedOnThisFrame = basicMouseInfo.delta.sqrMagnitude >= Mathf.Epsilon; mouseButtonPressedThisFrame = false; // Move event if (basicMouseInfo.delta.sqrMagnitude > Mathf.Epsilon) { if (mouseMoved != null) { mouseMoved(basicMouseInfo); } } // Button events for (int i = 0; i < trackMouseButtons; ++i) { MouseButtonInfo mouseButton = m_MouseInfo[i]; mouseButton.delta = basicMouseInfo.delta; mouseButton.previousPosition = basicMouseInfo.previousPosition; mouseButton.currentPosition = basicMouseInfo.currentPosition; if (UnityInput.GetMouseButton(i)) { if (!mouseButton.isDown) { // First press mouseButtonPressedThisFrame = true; mouseButton.isDown = true; mouseButton.startPosition = UnityInput.mousePosition; mouseButton.startTime = Time.realtimeSinceStartup; mouseButton.startedOverUI = EventSystem.current.IsPointerOverGameObject(-mouseButton.mouseButtonId - 1); // Reset some stuff mouseButton.totalMovement = 0; mouseButton.isDrag = false; mouseButton.wasHold = false; mouseButton.isHold = false; mouseButton.flickVelocity = Vector2.zero; if (pressed != null) { pressed(mouseButton); } } else { float moveDist = mouseButton.delta.magnitude; // Dragging? mouseButton.totalMovement += moveDist; if (mouseButton.totalMovement > dragThresholdMouse) { bool wasDrag = mouseButton.isDrag; mouseButton.isDrag = true; if (mouseButton.isHold) { mouseButton.wasHold = mouseButton.isHold; mouseButton.isHold = false; } // Did it just start now? if (!wasDrag) { if (startedDrag != null) { startedDrag(mouseButton); } } if (dragged != null) { dragged(mouseButton); } // Flick? if (moveDist > flickThreshold) { mouseButton.flickVelocity = (mouseButton.flickVelocity * (1 - k_FlickAccumulationFactor)) + (mouseButton.delta * k_FlickAccumulationFactor); } else { mouseButton.flickVelocity = Vector2.zero; } } else { // Stationary? if (!mouseButton.isHold && !mouseButton.isDrag && Time.realtimeSinceStartup - mouseButton.startTime >= holdTime) { mouseButton.isHold = true; if (startedHold != null) { startedHold(mouseButton); } } } } } else // Mouse button not up { if (mouseButton.isDown) // Released { mouseButton.isDown = false; // Quick enough (with no drift) to be a tap? if (!mouseButton.isDrag && Time.realtimeSinceStartup - mouseButton.startTime < tapTime) { if (tapped != null) { tapped(mouseButton); } } if (released != null) { released(mouseButton); } } } } // Mouse wheel if (Mathf.Abs(UnityInput.GetAxis("Mouse ScrollWheel")) > Mathf.Epsilon) { if (spunWheel != null) { spunWheel(new WheelInfo { scrollAmount = UnityInput.GetAxis("Mouse ScrollWheel") * mouseWheelSensitivity }); } } }