private void RaisePressedEvents(GameTime gameTime, KeyboardState currentState) { if (!currentState.IsKeyDown(Keys.LeftAlt) && !currentState.IsKeyDown(Keys.RightAlt)) { var pressedKeys = Enum.GetValues(typeof (Keys)) .Cast<Keys>() .Where(key => currentState.IsKeyDown(key) && _previousState.IsKeyUp(key)); foreach (var key in pressedKeys) { var args = new KeyboardEventArgs(key, currentState); KeyPressed?.Invoke(this, args); if (args.Character.HasValue) KeyTyped?.Invoke(this, args); _previousKey = key; _lastPressTime = gameTime.TotalGameTime; _isInitial = true; } } }
private void RaiseRepeatEvents(GameTime gameTime, KeyboardState currentState) { var elapsedTime = (gameTime.TotalGameTime - _lastPressTime).TotalMilliseconds; if (currentState.IsKeyDown(_previousKey) && ((_isInitial && elapsedTime > InitialDelay) || (!_isInitial && elapsedTime > RepeatDelay))) { var args = new KeyboardEventArgs(_previousKey, currentState); if (args.Character.HasValue) KeyTyped?.Invoke(this, args); _lastPressTime = gameTime.TotalGameTime; _isInitial = false; } }