private static void UpdateInputs(float deltaTime) { // Set old states. oldScrollValue = scrollValue; oldMouseState = MouseState; oldKeyboardState = KeyboardState; // Get current keyboard and mouse states. KeyboardState = Keyboard.GetState(); MouseState = Mouse.GetState(); PressedChars.AddRange(oldPressedChars); // Check key state capacities and move the key states into arrays. OldKeys = oldKeyboardState.GetPressedKeys(); NewKeys = KeyboardState.GetPressedKeys(); for (int i = 0; i < NewKeys.Length; i++) { if (!OldKeys.Contains(NewKeys[i])) { PressedKeys.Add(NewKeys[i]); } } // Set mouse properties. LeftMouseDown = MouseState.LeftButton == ButtonState.Pressed; RightMouseDown = MouseState.RightButton == ButtonState.Pressed; MouseDown = LeftMouseDown || RightMouseDown; LeftMouseClicked = oldMouseState.LeftButton == ButtonState.Released && LeftMouseDown; RightMouseClicked = oldMouseState.RightButton == ButtonState.Released && RightMouseDown; MouseClicked = LeftMouseClicked || RightMouseClicked; LeftMouseReleased = oldMouseState.LeftButton == ButtonState.Pressed && !LeftMouseDown; RightMouseReleased = oldMouseState.RightButton == ButtonState.Pressed && !RightMouseDown; MouseReleased = LeftMouseReleased || RightMouseReleased; // Set the scroll wheel state. scrollValue = MouseState.ScrollWheelValue; if (scrollValue > oldScrollValue) { MouseScrollValue = 1; } else if (scrollValue < oldScrollValue) { MouseScrollValue = -1; } else { MouseScrollValue = 0; } for (int i = 0; i < controllers.Length; i++) { controllers[i].Update(deltaTime); } }
/// <summary> /// Updates the input system. Should be called once per frame. /// </summary> /// <param name="deltaTime">Time in seconds which has passed since the last frame.</param> public static void Update(float deltaTime) { // TODO: Multiple gamepad support (local multiplayer). // Check for capabilities each second. Reduces GC allocations. if (curCapabilityTimer >= _CAPABILITY_CHECK_TIMER) { for (int i = 0; i < GamePadCapabilities.Length; i++) { GamePadCapabilities[i] = GamePad.GetCapabilities(i); } curCapabilityTimer = 0.0f; } else { curCapabilityTimer += deltaTime; } for (int i = 0; i < GamePadCapabilities.Length; i++) { GamePadStates[i] = GamePadCapabilities[i].IsConnected ? GamePad.GetState(i) : default; } // Clear pressed keys. PressedKeys.Clear(); PressedChars.Clear(); // Update inputs. if (IsActive) { UpdateInputs(deltaTime); } // Clean-up for next frame. oldScrollValue = scrollValue; oldPressedChars.Clear(); }