/*****************************************************************************
 *	Enums.h 																 *
 *																			 *
 *	XFX::Input enumeration definition file  								 *
 *	Copyright (c) XFX Team. All Rights Reserved 							 *
 *****************************************************************************/
#ifndef _XFX_INPUT_ENUMS_
#define _XFX_INPUT_ENUMS_

namespace XFX
{
	namespace Input
	{
		/**
		 * Enumerates input device buttons.
		 */
		struct Buttons
		{
			enum type
			{
				A = 0x1000,
				B = 0x2000,
				Back = 0x20,
				Black = 0x100,
				DPadDown = 0x02,
				DPadLeft = 0x04,
				DPadRight = 0x08,
				DPadUp = 0x01,
				LeftStick = 0x40,
				LeftThumbstickDown = 0x20000000,
				LeftThumbstickLeft = 0x200000,
				LeftThumbstickRight = 0x40000000,
				LeftThumbstickUp = 0x10000000,
				LeftTrigger = 0x800000,
				RightStick = 0x80,
				RightThumbstickDown = 0x2000000,
				RightThumbstickLeft = 0x8000000,
				RightThumbstickRight = 0x4000000,
				RightThumbstickUp = 0x1000000,
				RightTrigger = 0x400000,
				Start = 0x10,
				White = 0x200,
				X = 0x4000,
				Y = 0x8000
			};
		};

		// Identifies the state of a mouse button or Xbox Controller button.
		struct ButtonState
		{
			enum type
			{
				Pressed = 1,
				Released = 0
			};
		};

		// Specifies a type of dead zone processing to apply to Xbox controller analog sticks when calling GamePad::GetState.
		struct GamePadDeadZone
		{
			enum type
			{
				Circular,
				IndependantAxes,
				None
			};
		};

		// Describes the type of a given Xbox controller.
		struct GamePadType
		{
			enum type
			{
				ArcadeStick,
				DancePad,
				DrumKit,
				FlightStick,
				GamePad,
				Guitar,
				Unknown,
				Wheel
			};
		};

		// Identifies a particular key on a keyboard.
		struct Keys
		{
			enum type
			{
				A = 0x41,
				B = 0x42,
				Back = 0x08,
				C = 0x43,
				D = 0x44,
				Down = 0x28,
				E = 0x45,
				End = 0x23,
				Enter = 0x0D,
				Escape = 0x1B,
				F = 0x46,
				G = 0x47,
				H = 0x48,
				I = 0x49,
				J = 0x4A,
				K = 0x4B,
				L = 0x4C,
				M = 0x4D,
				N = 0x4E,
				None = 0x00,
				O = 0x4F,
				P = 0x50,
				Q = 0x51,
				R = 0x52,
				S = 0x53,
				Space = 0x20,
				T = 0x54,
				U = 0x55,
				V = 0x56,
				W = 0x57,
				X = 0x58,
				Y = 0x59,
				Z = 0x5A
			};
		};

		// Identifies the state of a keyboard key.
		struct KeyState
		{
			enum type
			{
				Down = 1,
				Up = 0
			};
		};

		typedef Buttons::type			Buttons_t;
		typedef ButtonState::type		ButtonState_t;
		typedef GamePadDeadZone::type	GamePadDeadZone_t;
		typedef GamePadType::type		GamePadType_t;
		typedef Keys::type  			Keys_t;
		typedef KeyState::type  		KeyState_t;
	}
}

#endif //_XFX_INPUT_ENUMS_