/// <summary> /// Updates the caches with the current states for each input device. /// </summary> /// <param name="gameTime">The amount of time that has passed since the last call to Update.</param> public override void Update(GameTime gameTime) { _LastKeyboardState = _KeyboardState; _KeyboardState = Keyboard.GetState(); _LastGamePadStates = _GamePadStates; _GamePadStates = GetGamePadStates(); _LastMouseState = _MouseState; _MouseState = Mouse.GetState(Game.Window); foreach (MouseButton button in new MouseButton[]{MouseButton.Left, MouseButton.Right, MouseButton.Middle, MouseButton.XButton1, MouseButton.XButton2}) { MouseActionTracker clickOptions; if(_MouseActions.TryGetValue(button, out clickOptions) == false) { clickOptions = new MouseActionTracker(); _MouseActions[button] = clickOptions; } clickOptions.ElapsedMillisecondsSinceLastClick = System.Convert.ToInt32(clickOptions.ElapsedMillisecondsSinceLastClick + gameTime.ElapsedGameTime.TotalMilliseconds); if(HasBeenPressed(button) == false) { clickOptions.LastClickWasConsideredDoubleClick = false; continue; } clickOptions.LastClickWasConsideredDoubleClick = (clickOptions.ElapsedMillisecondsSinceLastClick < DoubleClickMillisecondCeiling); clickOptions.ElapsedMillisecondsSinceLastClick = 0; } base.Update(gameTime); }