public void Update()
{
NewKeys.Clear();
Depth = 0;
/**
* If a key has been held down for X duration, treat it as if it is newly
* pressed
*/
for(var i=0; i < KeyInRepeatMode.Count; i++){
if (!KeyboardState.IsKeyDown(KeyInRepeatMode[i]))
{
KeyInRepeatMode.RemoveAt(i);
i--;
}
}
var now = Time.TotalGameTime.Ticks;
var keys = KeyboardState.GetPressedKeys();
foreach (var key in keys)
{
var newPress = PreviousKeyboardState.IsKeyUp(key);
if (newPress)
{
KeyDownTime[key] = now;
NewKeys.Add(key);
}
else
{
if (KeyInRepeatMode.Contains(key))
{
/** How long has it been down? **/
if (now - KeyDownTime[key] > 400000)
{
/** Its been down long enough, consider it a new key **/
KeyDownTime[key] = now;
NewKeys.Add(key);
}
}
else
{
/** How long has it been down? **/
if (now - KeyDownTime[key] > 9000000)
{
/** Its been down long enough, consider it in repeat mode **/
KeyDownTime[key] = now;
KeyInRepeatMode.Add(key);
}
}
}
}
}