private List<Keys> GetUserInput(GameTime gameTime)
{
List<Keys> unhandledReleasedKeys = new List<Keys>();
KeyboardState currentKeyboardState = Keyboard.GetState();
foreach (Keys key in _keysOfInterest)
{
if (currentKeyboardState.IsKeyUp(key) && _heldKeys.ContainsKey(key))
_heldKeys.Remove(key);
if (currentKeyboardState.IsKeyDown(key))
{
if (_heldKeys.ContainsKey(key) == false)
{
unhandledReleasedKeys.Add(key);
_heldKeys.Add(key, gameTime.TotalGameTime);
}
else
{
TimeSpan timeOfLastTrigger = _heldKeys[key];
if (timeOfLastTrigger + _keyRepeatTime <= gameTime.TotalGameTime)
{
unhandledReleasedKeys.Add(key);
_heldKeys[key] = gameTime.TotalGameTime;
}
}
}
}
_previousKeyboardState = currentKeyboardState;
return unhandledReleasedKeys;
}