C# - Keyboard handling - #xna

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];
        }
 
    }
}

User login

Powered by Drupal, an open source content management system

Random image

Worm Hole 3