Beispiel #1
0
        protected void Clear()
        {
            LeftButton   = false;
            MiddleButton = false;
            RightButton  = false;

            ReleasedButtons.Clear();
            ClickedButtons.Clear();
            DoubleClickedButtons.Clear();
            HasScrolled = false;
            HasMoved    = false;
        }
Beispiel #2
0
 public bool IsClicked(MouseButtons button)
 {
     return(ClickedButtons.Contains(button));
 }
Beispiel #3
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            Clear();

            MouseState state = Mouse.GetState();

            DeltaX = 0;
            DeltaY = 0;

            if (X != state.X || Y != state.Y)
            {
                HasMoved = true;

                DeltaX = X;
                DeltaY = Y;

                X = state.X;
                Y = state.Y;

                DeltaX = X - DeltaX;
                DeltaY = Y - DeltaY;
            }

            var pressedButtons = new List <MouseButtons>();

            if (state.LeftButton == ButtonState.Pressed)
            {
                pressedButtons.Add(MouseButtons.Left);
                LeftButton = true;
            }
            if (state.MiddleButton == ButtonState.Pressed)
            {
                pressedButtons.Add(MouseButtons.Middle);
                MiddleButton = true;
            }
            if (state.RightButton == ButtonState.Pressed)
            {
                pressedButtons.Add(MouseButtons.Right);
                RightButton = true;
            }

            foreach (IPressedButton pressedButton in new List <IPressedButton>(PressedButtons))
            {
                bool isPressed = false;
                foreach (MouseButtons pb in pressedButtons)
                {
                    if (pb == pressedButton.Button)
                    {
                        isPressed = true;
                    }
                }

                if (!isPressed)
                {
                    PressedButtons.Remove(pressedButton);
                    ReleasedButtons.Add(pressedButton);
                }
            }

            foreach (MouseButtons button in pressedButtons)
            {
                bool isAlreadyPressed = false;

                foreach (PressedButton pressedButton in PressedButtons)
                {
                    if (button == pressedButton.Button)
                    {
                        isAlreadyPressed = true;
                    }
                }

                if (!isAlreadyPressed)
                {
                    PressedButtons.Add(new PressedButton(new Point(X, Y), button, gameTime.TotalGameTime.Seconds));
                    ClickedButtons.Add(button);

                    switch (button)
                    {
                    case MouseButtons.Left:
                        if ((LastTimeClicked[0].Time + SecondsToDoubleClick) >= gameTime.TotalGameTime.TotalSeconds)
                        {
                            DoubleClickedButtons.Add(new DoubleClickedButton(LastTimeClicked[0].Position, new Point(X, Y), MouseButtons.Left));
                            LastTimeClicked[0] = ClickedButton.Negative;
                        }
                        else
                        {
                            LastTimeClicked[0] = new ClickedButton(new Point(X, Y), gameTime.TotalGameTime.TotalSeconds);
                        }

                        break;

                    case MouseButtons.Middle:
                        if ((LastTimeClicked[1].Time + SecondsToDoubleClick) >= gameTime.TotalGameTime.TotalSeconds)
                        {
                            DoubleClickedButtons.Add(new DoubleClickedButton(LastTimeClicked[1].Position, new Point(X, Y), MouseButtons.Middle));
                            LastTimeClicked[1] = ClickedButton.Negative;
                        }
                        else
                        {
                            LastTimeClicked[1] = new ClickedButton(new Point(X, Y), gameTime.TotalGameTime.TotalSeconds);
                        }

                        break;

                    case MouseButtons.Right:
                        if ((LastTimeClicked[2].Time + SecondsToDoubleClick) >= gameTime.TotalGameTime.TotalSeconds)
                        {
                            DoubleClickedButtons.Add(new DoubleClickedButton(LastTimeClicked[2].Position, new Point(X, Y), MouseButtons.Right));
                            LastTimeClicked[2] = ClickedButton.Negative;
                        }
                        else
                        {
                            LastTimeClicked[2] = new ClickedButton(new Point(X, Y), gameTime.TotalGameTime.TotalSeconds);
                        }

                        break;
                    }
                }
            }

            DeltaScroll = state.ScrollWheelValue - ScrollValue;
            if (ScrollValue != state.ScrollWheelValue)
            {
                HasScrolled = true;
                ScrollValue = state.ScrollWheelValue;
            }
        }