137 lines
5.4 KiB
C++
137 lines
5.4 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __INPUT_DEVICE__
|
|
#define __INPUT_DEVICE__
|
|
|
|
|
|
#include "ntypes.h"
|
|
#include "memory/nshared_ptr.h"
|
|
|
|
|
|
namespace GS {
|
|
namespace Input {
|
|
|
|
/*
|
|
@short Input device.
|
|
@author Emmanuel Julien (ejulien@nworks.fr)
|
|
*/
|
|
class Device : public SharedObject
|
|
{
|
|
public:
|
|
|
|
enum Type
|
|
{
|
|
Type_Any = 0, Type_Keyboard, Type_Mouse, Type_Pad, Type_Touch
|
|
};
|
|
|
|
// Binary value.
|
|
enum KeyCode
|
|
{
|
|
Key_None = 0,
|
|
|
|
// Keyboard.
|
|
Key_LShift, Key_RShift, Key_LCtrl, Key_RCtrl, Key_LAlt, Key_RAlt, Key_LWin, Key_RWin,
|
|
Key_Tab, Key_CapsLock, Key_Space, Key_Backspace, Key_Insert, Key_Suppr, Key_Home, Key_End, Key_PageUp, Key_PageDown,
|
|
Key_Up, Key_Down, Key_Left, Key_Right,
|
|
Key_Escape,
|
|
Key_F1, Key_F2, Key_F3, Key_F4, Key_F5, Key_F6, Key_F7, Key_F8, Key_F9, Key_F10, Key_F11, Key_F12,
|
|
Key_PrintScreen, Key_ScrollLock, Key_Pause, Key_NumLock, Key_Return,
|
|
Key_Numpad0, Key_Numpad1, Key_Numpad2, Key_Numpad3, Key_Numpad4, Key_Numpad5, Key_Numpad6, Key_Numpad7, Key_Numpad8, Key_Numpad9,
|
|
Key_Add, Key_Sub, Key_Mul, Key_Div, Key_Enter,
|
|
Key_A, Key_B, Key_C, Key_D, Key_E, Key_F, Key_G, Key_H, Key_I, Key_J, Key_K, Key_L, Key_M, Key_N, Key_O, Key_P, Key_Q, Key_R, Key_S, Key_T, Key_U, Key_V, Key_W, Key_X, Key_Y, Key_Z,
|
|
|
|
// Mouse/pad.
|
|
Key_Button0, Key_Button1, Key_Button2, Key_Button3, Key_Button4, Key_Button5, Key_Button6, Key_Button7, Key_Button8, Key_Button9,
|
|
Key_Button10, Key_Button11, Key_Button12, Key_Button13, Key_Button14, Key_Button15, Key_Button16, Key_Button17, Key_Button18, Key_Button19,
|
|
Key_Button20, Key_Button21, Key_Button22, Key_Button23, Key_Button24, Key_Button25, Key_Button26, Key_Button27, Key_Button28, Key_Button29,
|
|
Key_Button30, Key_Button31, Key_Button32, Key_Button33, Key_Button34, Key_Button35, Key_Button36, Key_Button37, Key_Button38, Key_Button39,
|
|
Key_Button40, Key_Button41, Key_Button42, Key_Button43, Key_Button44, Key_Button45, Key_Button46, Key_Button47, Key_Button48, Key_Button49,
|
|
Key_Button50, Key_Button51, Key_Button52, Key_Button53, Key_Button54, Key_Button55, Key_Button56, Key_Button57, Key_Button58, Key_Button59,
|
|
Key_Button60, Key_Button61, Key_Button62, Key_Button63, Key_Button64, Key_Button65, Key_Button66, Key_Button67, Key_Button68, Key_Button69,
|
|
Key_Button70, Key_Button71, Key_Button72, Key_Button73, Key_Button74, Key_Button75, Key_Button76, Key_Button77, Key_Button78, Key_Button79,
|
|
Key_Button80, Key_Button81, Key_Button82, Key_Button83, Key_Button84, Key_Button85, Key_Button86, Key_Button87, Key_Button88, Key_Button89,
|
|
Key_Button90, Key_Button91, Key_Button92, Key_Button93, Key_Button94, Key_Button95, Key_Button96, Key_Button97, Key_Button98, Key_Button99,
|
|
Key_Button100, Key_Button101, Key_Button102, Key_Button103, Key_Button104, Key_Button105, Key_Button106, Key_Button107, Key_Button108, Key_Button109,
|
|
Key_Button110, Key_Button111, Key_Button112, Key_Button113, Key_Button114, Key_Button115, Key_Button116, Key_Button117, Key_Button118, Key_Button119,
|
|
Key_Button120, Key_Button121, Key_Button122, Key_Button123, Key_Button124, Key_Button125, Key_Button126, Key_Button127,
|
|
Key_Back, Key_Start, Key_Select, Key_L1, Key_L2, Key_L3, Key_R1, Key_R2, Key_R3,
|
|
Key_Cross_Up, Key_Cross_Down, Key_Cross_Left, Key_Cross_Right,
|
|
|
|
Key_Last
|
|
};
|
|
|
|
// Ranged-value.
|
|
enum InputCode
|
|
{
|
|
Input_None = 0,
|
|
Input_AxisX, Input_AxisY, Input_AxisZ, Input_AxisS, Input_AxisT, Input_AxisR,
|
|
Input_RotX, Input_RotY, Input_RotZ, Input_RotS, Input_RotT, Input_RotR,
|
|
Input_Button0, Input_Button1, Input_Button2, Input_Button3, Input_Button4, Input_Button5, Input_Button6, Input_Button7, Input_Button8, Input_Button9, Input_Button10, Input_Button11, Input_Button12, Input_Button13, Input_Button14, Input_Button15
|
|
};
|
|
|
|
// Input semantics.
|
|
enum InputSemantic
|
|
{
|
|
// Mouse semantics.
|
|
Semantic_LeftMouseButton, Semantic_RightMouseButton, Semantic_MiddleMouseButton,
|
|
Semantic_MouseAxisX, Semantic_MouseAxisY, Semantic_MouseWheel,
|
|
|
|
// Touch semantic.
|
|
Semantic_TouchPressure, Semantic_TouchAxisX, Semantic_TouchAxisY,
|
|
|
|
// Pad semantics.
|
|
Semantic_StartButton, Semantic_SelectButton
|
|
};
|
|
|
|
enum Effect
|
|
{
|
|
Vibrate, VibrateLeft, VibrateRight,
|
|
ConstantForce
|
|
};
|
|
|
|
/// Get device type.
|
|
virtual Type GetType() const = 0;
|
|
/// Get device name.
|
|
virtual const char *GetName() const = 0;
|
|
|
|
/// Pool state and refresh values.
|
|
virtual void Update() = 0;
|
|
/// Is device valid.
|
|
virtual bool IsValid() const { return true; }
|
|
|
|
/// Get input from semantic.
|
|
virtual InputCode GetInputFromSemantic(InputSemantic) { return Input_None; }
|
|
|
|
/// Test a key state.
|
|
virtual bool IsDown(KeyCode) const { return false; }
|
|
/// Test a key state during the previous update.
|
|
virtual bool WasDown(KeyCode) const { return false; }
|
|
|
|
/// Get input range.
|
|
virtual bool GetInputRange(InputCode, float &min, float &max) const { return false; }
|
|
|
|
/// Get input value.
|
|
virtual float GetValue(InputCode) const { return 0; }
|
|
/// Get input value during last update.
|
|
virtual float GetLastValue(InputCode) const { return 0; }
|
|
|
|
/// Set input value, return true if the device supports setting this value.
|
|
virtual bool SetValue(InputCode, float) { return false; }
|
|
|
|
/// Set device effect.
|
|
virtual void SetEffect(Effect effect, float v) {}
|
|
|
|
bool WasPressed(KeyCode key) const
|
|
{ return !WasDown(key) && IsDown(key); }
|
|
};
|
|
|
|
} // Input
|
|
} // GS
|
|
|
|
|
|
#endif // __INPUT_DEVICE__
|