912 lines
25 KiB
C++
912 lines
25 KiB
C++
#ifndef _IINPUT_H_
|
|
#define _IINPUT_H_
|
|
|
|
#ifdef WIN32
|
|
#ifdef CRYINPUT_EXPORTS
|
|
#define CRYINPUT_API __declspec(dllexport)
|
|
#else
|
|
#define CRYINPUT_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define CRYINPUT_API
|
|
#endif
|
|
|
|
#ifndef KEYS_DEF
|
|
#define KEYS_DEF
|
|
|
|
#include "platform.h"
|
|
#include "Cry_Math.h"
|
|
#include <vector>
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//! Keys' code names
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//#ifndef _XBOX
|
|
|
|
#define IS_NULL_KEY(key) ((key)==XKEY_NULL)
|
|
#define IS_MOUSE_KEY(key) ((key)&0x00FF0000)
|
|
#define IS_JOYPAD_KEY(key) ((key)&0xFF000000)
|
|
#define IS_GAMEPAD_KEY(key) ((key)&0xFF000000)
|
|
#define IS_KEYBOARD_KEY(key) ((key)&0x0000FFFF)
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
enum EKeyModifiersFlags
|
|
{
|
|
XKEY_MOD_NONE = 0,
|
|
XKEY_MOD_LCONTROL = 0x01,
|
|
XKEY_MOD_RCONTROL = 0x02,
|
|
XKEY_MOD_LALT = 0x04,
|
|
XKEY_MOD_RALT = 0x08,
|
|
XKEY_MOD_LSHIFT = 0x010,
|
|
XKEY_MOD_RSHIFT = 0x020,
|
|
XKEY_MOD_CAPSLOCK = 0x040,
|
|
XKEY_MOD_NUMLOCK = 0x080,
|
|
|
|
XKEY_MOD_CONTROL = (0x01 | 0x02),
|
|
XKEY_MOD_ALT = (0x04 | 0x08),
|
|
XKEY_MOD_SHIFT = (0x010 | 0x020),
|
|
};
|
|
|
|
//JOYPAD MOUSE KEYBOARD
|
|
// 00 00 0000
|
|
enum KeyCodes {
|
|
XKEY_NULL = 0x00000000, //forbidden
|
|
|
|
XKEY_BACKSPACE = 0x00000001,
|
|
XKEY_TAB = 0x00000002,
|
|
XKEY_RETURN = 0x00000003,
|
|
XKEY_CONTROL = 0x00000004,
|
|
XKEY_ALT = 0x00000005,
|
|
XKEY_SHIFT = 0x00000006,
|
|
XKEY_PAUSE = 0x00000007,
|
|
XKEY_CAPSLOCK = 0x00000008,
|
|
XKEY_ESCAPE = 0x00000009,
|
|
XKEY_SPACE = 0x0000000a,
|
|
XKEY_PAGE_DOWN = 0x0000000b,
|
|
XKEY_PAGE_UP = 0x0000000c,
|
|
XKEY_END = 0x0000000d,
|
|
XKEY_HOME = 0x0000000e,
|
|
XKEY_LEFT = 0x0000000f,
|
|
XKEY_UP = 0x00000010,
|
|
XKEY_RIGHT = 0x00000011,
|
|
XKEY_DOWN = 0x00000012,
|
|
XKEY_PRINT = 0x00000013,
|
|
XKEY_INSERT = 0x00000014,
|
|
XKEY_DELETE = 0x00000015,
|
|
XKEY_HELP = 0x00000016,
|
|
XKEY_0 = 0x00000017,
|
|
XKEY_1 = 0x00000018,
|
|
XKEY_2 = 0x00000019,
|
|
XKEY_3 = 0x0000001a,
|
|
XKEY_4 = 0x0000001b,
|
|
XKEY_5 = 0x0000001c,
|
|
XKEY_6 = 0x0000001d,
|
|
XKEY_7 = 0x0000001e,
|
|
XKEY_8 = 0x0000001f,
|
|
XKEY_9 = 0x00000020,
|
|
XKEY_A = 0x00000021,
|
|
XKEY_B = 0x00000022,
|
|
XKEY_C = 0x00000023,
|
|
XKEY_D = 0x00000024,
|
|
XKEY_E = 0x00000025,
|
|
XKEY_F = 0x00000026,
|
|
XKEY_G = 0x00000027,
|
|
XKEY_H = 0x00000028,
|
|
XKEY_I = 0x00000029,
|
|
XKEY_J = 0x0000002a,
|
|
XKEY_K = 0x0000002b,
|
|
XKEY_L = 0x0000002c,
|
|
XKEY_M = 0x0000002d,
|
|
XKEY_N = 0x0000002e,
|
|
XKEY_O = 0x0000002f,
|
|
XKEY_P = 0x00000030,
|
|
XKEY_Q = 0x00000031,
|
|
XKEY_R = 0x00000032,
|
|
XKEY_S = 0x00000033,
|
|
XKEY_T = 0x00000034,
|
|
XKEY_U = 0x00000035,
|
|
XKEY_V = 0x00000036,
|
|
XKEY_W = 0x00000037,
|
|
XKEY_X = 0x00000038,
|
|
XKEY_Y = 0x00000039,
|
|
XKEY_Z = 0x0000003a,
|
|
XKEY_TILDE = 0x0000003b,
|
|
XKEY_MINUS = 0x0000003c,
|
|
XKEY_EQUALS = 0x0000003d,
|
|
XKEY_LBRACKET = 0x0000003e,
|
|
XKEY_RBRACKET = 0x0000003f,
|
|
XKEY_BACKSLASH = 0x00000040,
|
|
XKEY_SEMICOLON = 0x00000041,
|
|
XKEY_APOSTROPHE = 0x00000042,
|
|
XKEY_COMMA = 0x00000043,
|
|
XKEY_PERIOD = 0x00000044,
|
|
XKEY_SLASH = 0x00000045,
|
|
XKEY_NUMPAD0 = 0x00000046,
|
|
XKEY_NUMPAD1 = 0x00000047,
|
|
XKEY_NUMPAD2 = 0x00000048,
|
|
XKEY_NUMPAD3 = 0x00000049,
|
|
XKEY_NUMPAD4 = 0x0000004a,
|
|
XKEY_NUMPAD5 = 0x0000004b,
|
|
XKEY_NUMPAD6 = 0x0000004c,
|
|
XKEY_NUMPAD7 = 0x0000004d,
|
|
XKEY_NUMPAD8 = 0x0000004e,
|
|
XKEY_NUMPAD9 = 0x0000004f,
|
|
XKEY_MULTIPLY = 0x00000050,
|
|
XKEY_ADD = 0x00000051,
|
|
XKEY_SEPARATOR = 0x00000052,
|
|
XKEY_SUBTRACT = 0x00000053,
|
|
XKEY_DECIMAL = 0x00000054,
|
|
XKEY_DIVIDE = 0x00000055,
|
|
XKEY_NUMPADENTER = 0x00000056,
|
|
XKEY_F1 = 0x00000057,
|
|
XKEY_F2 = 0x00000058,
|
|
XKEY_F3 = 0x00000059,
|
|
XKEY_F4 = 0x0000005a,
|
|
XKEY_F5 = 0x0000005b,
|
|
XKEY_F6 = 0x0000005c,
|
|
XKEY_F7 = 0x0000005d,
|
|
XKEY_F8 = 0x0000005e,
|
|
XKEY_F9 = 0x0000005f,
|
|
XKEY_F10 = 0x00000060,
|
|
XKEY_F11 = 0x00000061,
|
|
XKEY_F12 = 0x00000062,
|
|
XKEY_F13 = 0x00000063,
|
|
XKEY_F14 = 0x00000064,
|
|
XKEY_F15 = 0x00000065,
|
|
XKEY_F16 = 0x00000066,
|
|
XKEY_F17 = 0x00000067,
|
|
XKEY_F18 = 0x00000068,
|
|
XKEY_F19 = 0x00000069,
|
|
XKEY_F20 = 0x0000006a,
|
|
XKEY_F21 = 0x0000006b,
|
|
XKEY_F22 = 0x0000006c,
|
|
XKEY_F23 = 0x0000006d,
|
|
XKEY_F24 = 0x0000006e,
|
|
XKEY_NUMLOCK = 0x0000006f,
|
|
XKEY_SCROLLLOCK = 0x00000070,
|
|
XKEY_LCONTROL = 0x00000071,
|
|
XKEY_RCONTROL = 0x00000072,
|
|
XKEY_LALT = 0x00000073,
|
|
XKEY_RALT = 0x00000074,
|
|
XKEY_LSHIFT = 0x00000075,
|
|
XKEY_RSHIFT = 0x00000076,
|
|
XKEY_WIN_LWINDOW = 0x00000077,
|
|
XKEY_WIN_RWINDOW = 0x00000078,
|
|
XKEY_WIN_APPS = 0x00000079,
|
|
XKEY_OEM_102 = 0x00000080,
|
|
XKEY_BUTTON0 = 0x00000100,
|
|
XKEY_BUTTON1 = 0x00000101,
|
|
XKEY_BUTTON2 = 0x00000102,
|
|
XKEY_BUTTON3 = 0x00000103,
|
|
XKEY_BUTTON4 = 0x00000104,
|
|
XKEY_BUTTON5 = 0x00000105,
|
|
XKEY_BUTTON6 = 0x00000106,
|
|
XKEY_BUTTON7 = 0x00000107,
|
|
XKEY_BUTTON8 = 0x00000108,
|
|
XKEY_BUTTON9 = 0x00000109,
|
|
XKEY_BUTTON10 = 0x0000010A,
|
|
XKEY_BUTTON11 = 0x0000010B,
|
|
XKEY_BUTTON12 = 0x0000010C,
|
|
XKEY_BUTTON13 = 0x0000010D,
|
|
XKEY_BUTTON14 = 0x0000010E,
|
|
XKEY_BUTTON15 = 0x0000010F,
|
|
XKEY_BUTTON16 = 0x00000110,
|
|
XKEY_BUTTON17 = 0x00000111,
|
|
XKEY_BUTTON18 = 0x00000112,
|
|
XKEY_BUTTON19 = 0x00000113,
|
|
XKEY_BUTTON20 = 0x00000114,
|
|
XKEY_BUTTON21 = 0x00000115,
|
|
XKEY_BUTTON22 = 0x00000116,
|
|
XKEY_BUTTON23 = 0x00000117,
|
|
XKEY_BUTTON24 = 0x00000118,
|
|
XKEY_BUTTON25 = 0x00000119,
|
|
XKEY_BUTTON26 = 0x0000011A,
|
|
XKEY_BUTTON27 = 0x0000011B,
|
|
XKEY_BUTTON28 = 0x0000011C,
|
|
XKEY_BUTTON29 = 0x0000011D,
|
|
XKEY_BUTTON30 = 0x0000011E,
|
|
XKEY_BUTTON31 = 0x0000011F,
|
|
//MOUSE
|
|
XKEY_MOUSE1 = 0x00010000,
|
|
XKEY_MOUSE2 = 0x00020000,
|
|
XKEY_MOUSE3 = 0x00030000,
|
|
XKEY_MOUSE4 = 0x00040000,
|
|
XKEY_MOUSE5 = 0x00050000,
|
|
XKEY_MOUSE6 = 0x00060000,
|
|
XKEY_MOUSE7 = 0x00070000,
|
|
XKEY_MOUSE8 = 0x00080000,
|
|
XKEY_MWHEEL_UP = 0x00090000,
|
|
XKEY_MWHEEL_DOWN = 0x000A0000,
|
|
XKEY_MAXIS_X = 0x000B0000,
|
|
XKEY_MAXIS_Y = 0x000C0000,
|
|
|
|
//JOYPAD
|
|
|
|
//GAMEPAD
|
|
XKEY_GP_A = 0x01000000,
|
|
XKEY_GP_B = 0x02000000,
|
|
XKEY_GP_X = 0x03000000,
|
|
XKEY_GP_Y = 0x04000000,
|
|
XKEY_GP_BLACK = 0x05000000,
|
|
XKEY_GP_WHITE = 0x06000000,
|
|
XKEY_GP_LEFT_TRIGGER = 0x07000000,
|
|
XKEY_GP_RIGHT_TRIGGER = 0x08000000,
|
|
|
|
XKEY_GP_DPAD_UP = 0x11000000,
|
|
XKEY_GP_DPAD_DOWN = 0x12000000,
|
|
XKEY_GP_DPAD_LEFT = 0x13000000,
|
|
XKEY_GP_DPAD_RIGHT = 0x14000000,
|
|
XKEY_GP_START = 0x15000000,
|
|
XKEY_GP_BACK = 0x16000000,
|
|
XKEY_GP_LEFT_THUMB = 0x17000000,
|
|
XKEY_GP_RIGHT_THUMB = 0x18000000,
|
|
|
|
XKEY_GP_STHUMBLUP = 0x19000000,
|
|
XKEY_GP_STHUMBLDOWN = 0x1a000000,
|
|
XKEY_GP_STHUMBLLEFT = 0x1b000000,
|
|
XKEY_GP_STHUMBLRIGHT = 0x1c000000,
|
|
|
|
XKEY_GP_STHUMBLX = 0x21000000,
|
|
XKEY_GP_STHUMBLY = 0x22000000,
|
|
XKEY_GP_STHUMBRX = 0x23000000,
|
|
XKEY_GP_STHUMBRY = 0x24000000,
|
|
};
|
|
|
|
#ifndef _XBOX
|
|
|
|
#else
|
|
/////////XBOX VK_MAPPING
|
|
#define kSYSREQ 0x54
|
|
#define kCAPSLOCK 0x3A
|
|
#define kNUMLOCK 0x45
|
|
#define kSCROLLLOCK 0x46
|
|
#define kLEFTCTRL 0x1D
|
|
#define kLEFTALT 0x38
|
|
#define kLEFTSHIFT 0x2A
|
|
#define kRIGHTCTRL 0x9D
|
|
#define kRIGHTALT 0xB8
|
|
#define kRIGHTSHIFT 0x36
|
|
#define kESC 29
|
|
#define kBACKSPACE 0x0E
|
|
#define kENTER 0x1C
|
|
#define kSPACE ' '
|
|
#define kTAB 0x0F
|
|
#define kF1 0x3B
|
|
#define kF2 0x3C
|
|
#define kF3 0x3D
|
|
#define kF4 0x3E
|
|
#define kF5 0x3F
|
|
#define kF6 0x40
|
|
#define kF7 0x41
|
|
#define kF8 0x42
|
|
#define kF9 0x43
|
|
#define kF10 0x44
|
|
#define kF11 0x57
|
|
#define kF12 0x58
|
|
#define kA 65
|
|
#define kB 'b'
|
|
#define kC 'c'
|
|
#define kD 'd'
|
|
#define kE 'e'
|
|
#define kF 'f'
|
|
#define kG 'g'
|
|
#define kH 'h'
|
|
#define kI 0x17
|
|
#define kJ 0x24
|
|
#define kK 0x25
|
|
#define kL 0x26
|
|
#define kM 0x32
|
|
#define kN 0x31
|
|
#define kO 0x18
|
|
#define kP 0x19
|
|
#define kQ 'q'
|
|
#define kR 0x13
|
|
#define kS 0x1F
|
|
#define kT 0x14
|
|
#define kU 0x16
|
|
#define kV 0x2F
|
|
#define kW 'w'
|
|
#define kX 'x'
|
|
#define kY 'y'
|
|
#define kZ 'z'
|
|
#define k1 0x02
|
|
#define k2 0x03
|
|
#define k3 0x04
|
|
#define k4 0x05
|
|
#define k5 0x06
|
|
#define k6 0x07
|
|
#define k7 0x08
|
|
#define k8 0x09
|
|
#define k9 0x0A
|
|
#define k0 0x0B
|
|
#define kMINUS '-'
|
|
#define kEQUAL '='
|
|
#define kLBRACKET 0x1A
|
|
#define kRBRACKET 0x1B
|
|
#define kSEMICOLON 0x27
|
|
#define kTICK 29
|
|
#define kAPOSTROPHE 0x29
|
|
#define kBACKSLASH 0x2B
|
|
#define kCOMMA 0x33
|
|
#define kPERIOD '.'
|
|
#define kSLASH 0x35
|
|
#define kINS 0xD2
|
|
#define kDEL 0xD3
|
|
#define kHOME 0xC7
|
|
#define kEND 0xCF
|
|
#define kPGUP 0xC9
|
|
#define kPGDN 0xD1
|
|
#define kLARROW 0xCB
|
|
#define kRARROW 0xCD
|
|
#define kUARROW 0xC8
|
|
#define kDARROW 0xD0
|
|
#define kKEYPAD0 0x52
|
|
#define kKEYPAD1 0x4F
|
|
#define kKEYPAD2 0x50
|
|
#define kKEYPAD3 0x51
|
|
#define kKEYPAD4 0x4B
|
|
#define kKEYPAD5 0x4C
|
|
#define kKEYPAD6 0x4D
|
|
#define kKEYPAD7 0x47
|
|
#define kKEYPAD8 0x48
|
|
#define kKEYPAD9 0x49
|
|
#define kKEYPADDEL 0x53
|
|
#define kKEYPADSTAR 0x37
|
|
#define kKEYPADMINUS 0x4A
|
|
#define kKEYPADPLUS 0x4E
|
|
#define kKEYPADENTER 0x9C
|
|
#define kCTRLPRTSC 0xB7
|
|
#define kSHIFTPRTSC 0xB7
|
|
#define kKEYPADSLASH 0xB5
|
|
|
|
#endif //_XBOX
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/*! Interface to the Keyboard system.
|
|
*/
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
struct IKeyboard
|
|
{
|
|
virtual void ShutDown() = 0;
|
|
|
|
//! allow to force a key code value
|
|
/// virtual void SetKey(int p_key, int value) = 0;
|
|
//! allow to force a key code value
|
|
//virtual inline void SetPrevKey(int p_key, int value) = 0;
|
|
|
|
//! check for key pressed and held
|
|
virtual bool KeyDown(int p_key) = 0;
|
|
|
|
//! check for key pressed only once
|
|
virtual bool KeyPressed(int p_key) = 0;
|
|
|
|
//! check if the key has been released
|
|
virtual bool KeyReleased(int p_key) = 0;
|
|
|
|
//! clear the key status
|
|
virtual void ClearKey(int p_key) =0 ;
|
|
|
|
//! return the code of the key pressed
|
|
virtual int GetKeyPressedCode() = 0;
|
|
|
|
//! return the name of the key pressed
|
|
virtual const char *GetKeyPressedName() = 0;
|
|
|
|
//! return the code of the key down
|
|
virtual int GetKeyDownCode() = 0;
|
|
|
|
//! return the name of the key down
|
|
virtual const char *GetKeyDownName() = 0;
|
|
|
|
//! set/unset directinput to exclusive mode
|
|
virtual void SetExclusive(bool value,void *hwnd=0) = 0;
|
|
|
|
//! wait for a key pressed
|
|
virtual void WaitForKey() = 0;
|
|
|
|
//! clear the key (pressed) state
|
|
virtual void ClearKeyState() = 0;
|
|
};
|
|
|
|
/*! Interface to the Mouse system.
|
|
*/
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
struct IMouse
|
|
{
|
|
virtual void Shutdown() = 0;
|
|
|
|
//! check for a mouse button pressed and held
|
|
virtual bool MouseDown(int p_numButton) = 0;
|
|
|
|
//! check for a mouse button pressed only once
|
|
virtual bool MousePressed(int p_numButton) = 0;
|
|
|
|
//! check if the mouse button has been released
|
|
virtual bool MouseReleased(int p_numButton) = 0;
|
|
|
|
//! force the mouse wheel rotation to a certain value
|
|
virtual void SetMouseWheelRotation(int value) = 0;
|
|
|
|
//! set/reset Directinput to exclusive mode
|
|
virtual bool SetExclusive(bool value,void *hwnd=0) = 0;
|
|
|
|
//! get mouse X delta (left-right)
|
|
virtual float GetDeltaX() = 0;
|
|
|
|
//! get mouse Y delta (up-down)
|
|
virtual float GetDeltaY() = 0;
|
|
|
|
//! get mouse Z delta (mouse wheel)
|
|
virtual float GetDeltaZ() = 0;
|
|
|
|
//! set mouse inertia
|
|
virtual void SetInertia(float) = 0;
|
|
|
|
//! set mouse X screen corrdinate
|
|
virtual void SetVScreenX(float fX) = 0;
|
|
|
|
//! set mouse Y screen corrdinate
|
|
virtual void SetVScreenY(float fY) = 0;
|
|
|
|
//! get mouse X screen corrdinate
|
|
virtual float GetVScreenX() = 0;
|
|
|
|
//! get mouse Y screen corrdinate
|
|
virtual float GetVScreenY() = 0;
|
|
|
|
//! set the mouse sensitivity
|
|
virtual void SetSensitvity(float fSensitivity) = 0;
|
|
|
|
//! get the mouse sensitivity
|
|
virtual float GetSensitvity() = 0;
|
|
|
|
//! set the mouse sensitivity scale (from 0 to 1)
|
|
virtual void SetSensitvityScale(float fSensScale) = 0;
|
|
|
|
//! get the mouse sensitivity scale
|
|
virtual float GetSensitvityScale() = 0;
|
|
|
|
//! clear the key states
|
|
virtual void ClearKeyState() = 0;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef int XACTIONID;
|
|
|
|
#define BEGIN_INPUTACTIONMAP() void OnAction(XACTIONID nActionID, float fValue,XActivationEvent ae) { switch(nActionID) {
|
|
#define END_INPUTACTIONMAP() default: break; } }
|
|
#define REGISTER_INPUTACTIONMAP(actionid, handler) case actionid: handler(fValue,ae); break;
|
|
|
|
#ifdef _XBOX
|
|
#define MAX_BINDS_PER_ACTION 3
|
|
#else
|
|
#define MAX_BINDS_PER_ACTION 2
|
|
#endif
|
|
|
|
enum XActionActivationMode
|
|
{
|
|
aamOnPress,
|
|
aamOnDoublePress,
|
|
aamOnPressAndRelease,
|
|
aamOnRelease,
|
|
aamOnHold
|
|
};
|
|
|
|
enum XActivationEvent
|
|
{
|
|
etPressing,
|
|
etHolding,
|
|
etReleasing,
|
|
etDoublePressing
|
|
};
|
|
|
|
struct XBind
|
|
{
|
|
XBind()
|
|
{
|
|
nKey=XKEY_NULL;
|
|
nModifier=XKEY_NULL;
|
|
// aam=aamOnPress;
|
|
// bConfigurable=false;
|
|
// bReplicate=false;
|
|
}
|
|
int nKey;
|
|
int nModifier;
|
|
// XActionActivationMode aam;
|
|
// bool bConfigurable;
|
|
// bool bReplicate;
|
|
};
|
|
|
|
struct IActionMapSink
|
|
{
|
|
virtual void OnAction(XACTIONID nActionID, float fValue, XActivationEvent ae) = 0;
|
|
};
|
|
|
|
struct IActionMap
|
|
{
|
|
virtual void ResetAllBindings() = 0;
|
|
virtual void ResetBinding(XACTIONID nActionID) = 0;
|
|
virtual void RemoveBind(XACTIONID nActionID, XBind &NewBind, XActionActivationMode aam) = 0;
|
|
virtual void BindAction(XACTIONID nActionID,XBind &NewBind, int iKeyPos = -1)=0;//int nKey,int nModifier=XKEY_NULL) = 0;
|
|
virtual void BindAction(XACTIONID nActionID,int nKey, int nModifier=XKEY_NULL, int iKeyPos = -1) = 0;//, bool bConfigurable=false, bool bReplicate=false) = 0;
|
|
virtual void BindAction(XACTIONID nActionID,const char *sKey,const char *sModifier=NULL, int iKeyPos = -1) = 0;
|
|
virtual void GetBinding(XACTIONID nActionID, int nKeyPos, XBind &Bind) = 0;
|
|
virtual void GetBinding(XACTIONID nActionID, int nKeyPos, int &nKey, int &nModifier) = 0;
|
|
virtual void GetBinding(XACTIONID nActionID, int nKeyPos, char *pszKey, char *pszModifier) = 0;
|
|
// compare this action map with the one passed and store the key differences in keys
|
|
virtual void GetBindDifferences(IActionMap *pActionMap, std::vector<int>& keys) = 0;
|
|
};
|
|
|
|
struct IActionMapDumpSink
|
|
{
|
|
virtual void OnElementFound(const char *pszActionMapName, IActionMap *pActionMap) = 0;
|
|
};
|
|
|
|
struct IActionMapManager
|
|
{
|
|
virtual void SetInvertedMouse(bool bEnable)=0;
|
|
virtual bool GetInvertedMouse()=0;;
|
|
|
|
virtual void RemoveBind(XACTIONID nActionID, XBind &NewBind, XActionActivationMode aam) = 0;
|
|
|
|
virtual void SetSink(IActionMapSink *pSink) = 0;
|
|
virtual void CreateAction(XACTIONID nActionID,const char *sActionName,XActionActivationMode aam=aamOnPress) = 0;
|
|
|
|
virtual IActionMap *CreateActionMap(const char *s) = 0;
|
|
virtual IActionMap *GetActionMap(const char *s) = 0;
|
|
|
|
virtual void ResetAllBindings() = 0;
|
|
|
|
virtual void GetActionMaps(IActionMapDumpSink *pCallback) = 0;
|
|
|
|
virtual void SetActionMap(const char *s) = 0;
|
|
|
|
virtual bool CheckActionMap(XACTIONID nActionID) = 0;
|
|
virtual bool CheckActionMap(const char *sActionName) = 0;
|
|
virtual void Reset() = 0;
|
|
virtual void Update(unsigned int nTimeMSec) = 0;
|
|
virtual void Release() = 0;
|
|
|
|
virtual void Enable() = 0;
|
|
virtual void Disable() = 0;
|
|
virtual bool IsEnabled() = 0;
|
|
};
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
typedef unsigned char INPUTACTIONID;
|
|
|
|
//@{ Helper macros to implement the action triggers callback interface
|
|
#define BEGIN_INPUTACTIONTRIGGERS() void OnAction(INPUTACTIONID nActionID, float fValue) { switch(nActionID) {
|
|
#define END_INPUTACTIONTRIGGERS() default: break; } }
|
|
#define REGISTER_INPUTACTIONTRIGGER(actionid, handler) case actionid: handler(fValue); break;
|
|
//@}
|
|
|
|
// Action triggers callback interface
|
|
struct IInputActionTriggerSink
|
|
{
|
|
virtual void OnAction(INPUTACTIONID nActionID, float fValue) = 0;
|
|
};
|
|
|
|
//! Action map interface
|
|
struct IInputActionMap
|
|
{
|
|
virtual void SetSink(IInputActionTriggerSink *pIActionTrigger) = 0;
|
|
|
|
virtual void Release() = 0;
|
|
|
|
//! Check all actions
|
|
virtual void Update() = 0;
|
|
|
|
// Call the action trigger
|
|
virtual void CallActionTrigger(INPUTACTIONID nActionID, float fValue) = 0;
|
|
|
|
//! Return the amount of pressing of the action input if the action is
|
|
//! currently done
|
|
virtual float CheckAction(const INPUTACTIONID nActionID) = 0;
|
|
|
|
/*! Set a new action
|
|
@param nActionID id that identity the action[eg. ACTION_JUMP]
|
|
@param bCheckPressed if true the action event is triggered only once when a button is pressed
|
|
else the action is send every frame until the button is released
|
|
@param szCodes key identifiers [eg. "MBT_1" mouse button]
|
|
@param szMods key modifier [eg. "SHIFT"]
|
|
@return true=succeded,false=failed*/
|
|
|
|
virtual bool SetAction(const INPUTACTIONID nActionID,bool bCheckPressed, const char *szCodes, const char *szMods=NULL) = 0;
|
|
|
|
virtual void ClearAction(const INPUTACTIONID nActionID) = 0;
|
|
};
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Input interface for the XBox controller
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef _XBOX
|
|
|
|
//@{ XBox Input code enumerations and constants
|
|
enum eController
|
|
{
|
|
eOne = 0,
|
|
eTwo = 1,
|
|
eThree = 2,
|
|
eFour = 3,
|
|
ePrimary = 10,
|
|
eAll = 11,
|
|
};
|
|
|
|
enum eDigitalButton
|
|
{
|
|
eDigitalUp = XINPUT_GAMEPAD_DPAD_UP,
|
|
eDigitalDown = XINPUT_GAMEPAD_DPAD_DOWN,
|
|
eDigitalLeft = XINPUT_GAMEPAD_DPAD_LEFT,
|
|
eDigitalRight = XINPUT_GAMEPAD_DPAD_RIGHT,
|
|
eStart = XINPUT_GAMEPAD_START,
|
|
eBack = XINPUT_GAMEPAD_BACK,
|
|
eLeftStick = XINPUT_GAMEPAD_LEFT_THUMB,
|
|
eRightStick = XINPUT_GAMEPAD_RIGHT_THUMB,
|
|
};
|
|
|
|
enum eAnalogButton
|
|
{
|
|
eA = XINPUT_GAMEPAD_A,
|
|
eB = XINPUT_GAMEPAD_B,
|
|
eX = XINPUT_GAMEPAD_X,
|
|
eY = XINPUT_GAMEPAD_Y,
|
|
eBlack = XINPUT_GAMEPAD_BLACK,
|
|
eWhite = XINPUT_GAMEPAD_WHITE,
|
|
eLeftTrigger = XINPUT_GAMEPAD_LEFT_TRIGGER,
|
|
eRightTrigger = XINPUT_GAMEPAD_RIGHT_TRIGGER,
|
|
};
|
|
|
|
enum eSide
|
|
{
|
|
eLeft,
|
|
eRight,
|
|
};
|
|
|
|
const unsigned int MAX_XBOX_CONTROLLERS = 4;
|
|
const unsigned int XBOX_ANALOGSTICK_DEADZONE = 8000;
|
|
//@}
|
|
|
|
|
|
struct IGamepad
|
|
{
|
|
virtual void ShutDown() = 0;
|
|
|
|
//! check for a mouse button pressed and held
|
|
virtual bool KeyDown(int p_numButton) = 0;
|
|
|
|
//! check for a mouse button pressed only once
|
|
virtual bool KeyPressed(int p_numButton) = 0;
|
|
|
|
//! check if the mouse button has been released
|
|
virtual bool KeyReleased(int p_numButton) = 0;
|
|
|
|
//! get mouse X delta (left-right)
|
|
virtual float GetDeltaX() = 0;
|
|
|
|
//! get mouse Y delta (up-down)
|
|
virtual float GetDeltaY() = 0;
|
|
};
|
|
|
|
#endif //_XBOX
|
|
|
|
/*! InputEvents are generated by input system and broadcasted to all event listeners.
|
|
*/
|
|
struct SInputEvent
|
|
{
|
|
//! Input Event types.
|
|
enum EType
|
|
{
|
|
UNKNOWN,
|
|
KEY_PRESS,
|
|
KEY_RELEASE,
|
|
MOUSE_MOVE,
|
|
};
|
|
|
|
//! Type of input event.
|
|
EType type;
|
|
//! Key which was pressed or released, one of the XKeys.
|
|
//! @see KeyCodes
|
|
int key;
|
|
//! Timestamp of the event, (GetTickCount compatable).
|
|
unsigned int timestamp;
|
|
|
|
//! Key modifiers enabled at the time of this event.
|
|
//! @see EKeyModifiersFlags
|
|
int moidifiers;
|
|
|
|
//! Name of the event key.
|
|
const char *keyname;
|
|
|
|
//! For mouse axises.
|
|
float value;
|
|
|
|
SInputEvent()
|
|
{
|
|
moidifiers = XKEY_MOD_NONE;
|
|
key = 0;
|
|
type = UNKNOWN;
|
|
timestamp = 0;
|
|
keyname = 0;
|
|
value = 0;
|
|
}
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
/* Input event listeners registered to input system and recieve input events when they are generated.
|
|
*/
|
|
struct IInputEventListener
|
|
{
|
|
//! Called every time input event is generated.
|
|
//! @return if return True then broadcasting of this event should be aborted and the rest of input
|
|
//! listeners should not recieve this event.
|
|
virtual bool OnInputEvent( const SInputEvent &event ) = 0;
|
|
};
|
|
|
|
|
|
/*! Interface to the Input system.
|
|
The input system give access and initialize Keyboard,Mouse and Joystick SubSystems.
|
|
*/
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/*! Main Input system interface.
|
|
*/
|
|
struct IInput
|
|
{
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! Register new input events listener.
|
|
virtual void AddEventListener( IInputEventListener *pListener ) = 0;
|
|
virtual void RemoveEventListener( IInputEventListener *pListener ) = 0;
|
|
virtual void EnableEventPosting ( bool bEnable ) = 0;
|
|
|
|
//! Register new console input event listeners. console input listeners receive all events, no matter what.
|
|
virtual void AddConsoleEventListener( IInputEventListener *pListener ) = 0;
|
|
virtual void RemoveConsoleEventListener( IInputEventListener *pListener ) = 0;
|
|
|
|
virtual void SetExclusiveListener( IInputEventListener *pListener ) = 0;
|
|
virtual IInputEventListener *GetExclusiveListener() = 0;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! update Keyboard, Mouse and Joystick. Set bFocus to true if window has focus and input is enabled.
|
|
virtual void Update(bool bFocus) = 0;
|
|
//! clear all subsystems
|
|
virtual void ShutDown() = 0;
|
|
//! @see IMouse::SetExclusive
|
|
virtual void SetMouseExclusive(bool exclusive,void *hwnd=0) = 0;
|
|
//! @see IKeyboard::SetExclusive
|
|
virtual void SetKeyboardExclusive(bool exclusive,void *hwnd=0) = 0;
|
|
|
|
//! @see IKeyBoard::KeyDown
|
|
virtual bool KeyDown(int p_key) = 0;
|
|
//! @see IKeyBoard::KeyPressed
|
|
virtual bool KeyPressed(int p_key) = 0;
|
|
//! @see IKeyBoard::KeyRelease
|
|
virtual bool KeyReleased(int p_key) = 0;
|
|
|
|
//! @see IMouse::MouseDown
|
|
virtual bool MouseDown(int p_numButton) = 0;
|
|
|
|
//! @see IMouse::MousePressed
|
|
virtual bool MousePressed(int p_numButton) = 0;
|
|
|
|
//! @see IMouse::MouseDblClick
|
|
virtual bool MouseDblClick(int p_numButton) = 0;
|
|
|
|
//! @see IMouse::MouseReleased
|
|
virtual bool MouseReleased(int p_numButton) = 0;
|
|
|
|
//! @see IMouse::GetDeltaX
|
|
virtual float MouseGetDeltaX() = 0;
|
|
|
|
//! @see IMouse::GetDeltaY
|
|
virtual float MouseGetDeltaY() = 0;
|
|
|
|
//! @see IMouse::GetDeltaZ
|
|
virtual float MouseGetDeltaZ() = 0;
|
|
|
|
//! @see IMouse::GetVScreenX
|
|
virtual float MouseGetVScreenX() = 0;
|
|
|
|
//! @see IMouse::GetVScreenY
|
|
virtual float MouseGetVScreenY() = 0;
|
|
|
|
//! Converts a key-name to the key-id
|
|
virtual int GetKeyID(const char *sName) = 0;
|
|
virtual void EnableBufferedInput(bool bEnable) = 0;
|
|
virtual void FeedVirtualKey(int nVirtualKey,long lParam,bool bDown)=0;
|
|
virtual int GetBufferedKey() = 0;
|
|
virtual const char* GetBufferedKeyName() = 0;
|
|
virtual void PopBufferedKey() = 0;
|
|
//! @see IMouse::SetInertia
|
|
virtual void SetMouseInertia(float) = 0;
|
|
|
|
//! check if the joystick button has been pressed
|
|
virtual bool JoyButtonPressed(int p_numButton) = 0;
|
|
|
|
//! check the joystick direction
|
|
virtual int JoyGetDir() = 0;
|
|
|
|
//! check the joy hat direction
|
|
virtual int JoyGetHatDir() = 0;
|
|
|
|
virtual Vec3 JoyGetAnalog1Dir(unsigned int joystickID) const = 0;
|
|
virtual Vec3 JoyGetAnalog2Dir(unsigned int joystickID) const = 0;
|
|
|
|
//! return the keyboard interface
|
|
virtual IKeyboard *GetIKeyboard() = 0;
|
|
|
|
//! return the mouse interface
|
|
virtual IMouse * GetIMouse() = 0;
|
|
|
|
#ifdef _XBOX
|
|
//! return the Xbox gamepad interface
|
|
virtual IGamepad * GetIGamepad() = 0;
|
|
#endif
|
|
|
|
//! Convert key code to the key name.
|
|
//! @param nKey one of xkey codes.
|
|
//! @param modifiers current modifiers (shift,ctrl,..).
|
|
//! @see KeyCodes.
|
|
virtual const char *GetKeyName(int nKey,int modifiers=0, bool bGUI = 0) = 0;
|
|
|
|
virtual bool GetOSKeyName(int nKey, wchar_t *szwKeyName, int iBufSize) = 0;
|
|
|
|
//! @see IKeyBoard::GetKeyPressedCode
|
|
virtual int GetKeyPressedCode() = 0;
|
|
|
|
//! @see IKeyBoard::GetKeyPressedName
|
|
virtual const char *GetKeyPressedName() = 0;
|
|
|
|
//! @see IKeyBoard::GetKeyDownCode
|
|
virtual int GetKeyDownCode() = 0;
|
|
|
|
//! @see IKeyBoard::GetKeyDownName
|
|
virtual const char *GetKeyDownName() = 0;
|
|
|
|
//! @see IKeyBoard::WaitForKey
|
|
virtual void WaitForKey() = 0;
|
|
|
|
//! action mapper
|
|
virtual struct IActionMapManager* CreateActionMapManager() = 0;
|
|
|
|
//! return the name of the current XKEY(both mouse and keyboard excluding mouse delta)
|
|
//! useful for the GUI to retrieve the first key pressed during the key configuration
|
|
virtual const char *GetXKeyPressedName() = 0;
|
|
|
|
//! clear key states of all devices
|
|
virtual void ClearKeyState() = 0;
|
|
|
|
virtual unsigned char GetKeyState(int nKey) = 0;
|
|
};
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct ILog;
|
|
struct IInput;
|
|
struct ISystem;
|
|
|
|
typedef IInput (* CRY_PTRCREATEINPUTFNC(ISystem *pSystem,void* hinst, void* hwnd, bool usedinput));
|
|
|
|
CRYINPUT_API IInput *CreateInput(ISystem *pSystem,void* hinst, void* hwnd, bool usedinput);
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
|
|
#endif //_IINPUT_H_
|