public void Update(KeyboardHandler keyboard, float elapsedTime) { if (keyboard.IsKeyDownOnce(Keys.Back) && CurrentText.Length > 0) { CurrentText = CurrentText.Substring(0, CurrentText.Length - 1); } else if (CurrentText.Length < MaxInputCharacters) { var allPressedKeys = keyboard.GetPressedKeys(); var allValidPressedKeys = allPressedKeys.Where(k => _validCharacterCodes.Contains(k.ToString())).ToArray(); foreach (var pressedKey in allValidPressedKeys) { if (_lastPressedKeys.Contains(pressedKey)) continue; _lastPressedKeys.Add(pressedKey); var pressed = pressedKey.ToString(); if (!IsAnyShiftKeyDown(keyboard)) pressed = pressed.ToLower(); if (pressed.Equals("space")) { pressed = " "; } else if (pressed.Length == 2 && pressed[0] == 'd') { pressed = pressed.Substring(1); } if (InputType == InputType.Numeric && pressed == "d") break; if (pressedKey == Keys.OemPeriod) { CurrentText += "."; } else { CurrentText += pressed; } } _lastPressedKeys.Clear(); _lastPressedKeys.AddRange(allValidPressedKeys); } }
private static bool IsAnyShiftKeyDown(KeyboardHandler keyboard) { return keyboard.IsKeyDownOnce(Keys.RightShift) || keyboard.IsKeyDown(Keys.LeftShift); }