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();
        }
Exemple #2
0
 public void MouseButtonUp(MouseButtonInfo mouseInfo)
 {
     if (MouseUpEvent != null)
     {
         MouseUpEvent(mouseInfo);
     }
 }
Exemple #3
0
 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;
        }
    }
Exemple #5
0
 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;
     }
 }
Exemple #8
0
    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));
    }
Exemple #9
0
    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);
    }
Exemple #10
0
    /// <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
                });
            }
        }
    }