//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {Contact : darkwynter.com for licensing information
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace DarkWynter.Engine.Controllers
{
#region Using Statements
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using System.Diagnostics;
using DarkWynter.Engine.ObjectLib;
using DarkWynter.Engine.Menus;
using Controllers;
#endregion
///
/// Keyboard event class for mapping a keyboard button to an event
///
public class KeyboardControl
{
// Time delay between key presses to avoid double input
private int KEY_TIMER_MAX_MILLI = 10;
private Stopwatch controlTimer = new Stopwatch();
///
/// Keyboard key we are checking for
///
public Keys key = Keys.None;
///
/// On click delegate type
///
/// Controller boolean event arguments
public delegate void OnClickHandler(ControllerBoolEventArgs args);
private event OnClickHandler click;
///
/// Constructor
///
/// Keyboard key to watch
/// Delegate to be invoked
/// Time delay between multiple invocations
public KeyboardControl(Keys keyboardkey, OnClickHandler onClickHandler, int timerValue)
{
key = keyboardkey; // Assign Key
click += new OnClickHandler(onClickHandler); // Assign delegate
controlTimer.Start(); // Start timer
KEY_TIMER_MAX_MILLI = timerValue; // Assign time delay
}
///
/// Update Method
///
/// Updated keyboard state
/// Object Library
/// Menu System
public void Update(KeyboardState keyboardState, ref ObjectLibrary objectLibrary, ref MenuSystem menuSystem)
{
// Check double-input timer
if (controlTimer.ElapsedMilliseconds > KEY_TIMER_MAX_MILLI)
{
// Reset timer
controlTimer.Reset();
controlTimer.Start();
// If button was pressed
if (keyboardState.IsKeyDown(key))
{
if (click != null)
{
click(new ControllerBoolEventArgs(true, ref objectLibrary, ref menuSystem));
}
}
}
}
}
}