protected void Clear() { LeftButton = false; MiddleButton = false; RightButton = false; ReleasedButtons.Clear(); ClickedButtons.Clear(); DoubleClickedButtons.Clear(); HasScrolled = false; HasMoved = false; }
public bool IsClicked(MouseButtons button) { return(ClickedButtons.Contains(button)); }
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; } }