C# - Keyboard handling - #xna
Submitted by edg3 on Thu, 06/03/2010 - 17:54
namespace GIADBase { class KeyboardHandler { protected KeyboardState CurrentState, PreviousState; protected Dictionary<Keys, float> PressLengths = new Dictionary<Keys,float>(), ReleasedLength = new Dictionary<Keys,float>(); //keyboardHandler.add(Keys.A); public List<Keys> LengthCheckedKeys = new List<Keys>(); private int i; //initialise the class public KeyboardHandler() { CurrentState = Keyboard.GetState(); PreviousState = Keyboard.GetState(); } //update method public void Update(GameTime gameTime) { PreviousState = CurrentState; CurrentState = Keyboard.GetState(); for (i = 0; i < LengthCheckedKeys.Count; i++) { if (this.KeyHeld(LengthCheckedKeys[i])) { PressLengths[LengthCheckedKeys[i]] += gameTime.ElapsedGameTime.Milliseconds; } else if (this.KeyLeft(LengthCheckedKeys[i])) { PressLengths[LengthCheckedKeys[i]] += gameTime.ElapsedGameTime.Milliseconds; ReleasedLength[LengthCheckedKeys[i]] = PressLengths[LengthCheckedKeys[i]]; } else { PressLengths[LengthCheckedKeys[i]] = 0.0f; } } } //Check if a key was pressed public bool KeyPress(Keys k) { return ((CurrentState.IsKeyDown(k)) && (!PreviousState.IsKeyDown(k))); } //check if a key is being held down public bool KeyHeld(Keys k) { return ((CurrentState.IsKeyDown(k)) && (PreviousState.IsKeyDown(k))); } //check if a key was let go public bool KeyLeft(Keys k) { return ((!CurrentState.IsKeyDown(k)) && (PreviousState.IsKeyDown(k))); } public void AddKey(Keys k) { PressLengths.Add(k, 0.0f); ReleasedLength.Add(k, 0.0f); LengthCheckedKeys.Add(k); } //check for how long a key was pressed for so far: milliseconds public float HeldFor(Keys k) { return PressLengths[k]; } //check for how long the key was pressed when it was released public float ReleasedTime(Keys k) { return ReleasedLength[k]; } } }