Unuk/src/libUnuk/XKeyboardInterface.h

82 lines
1.6 KiB
C++

#ifndef XKEYBOARDINTERFACE_H
#define XKEYBOARDINTERFACE_H
#ifdef __unix__
#include <cstring>
#include "KeyboardInterface.h"
#include "Debug.h"
class XKeyboardInterface : public KeyboardInterface {
public:
XKeyboardInterface(void) {
for(int i = 0; i < U_MAX_KEYS; ++i) {
m_keyState[i] = 0;
m_lastKeyState[i] = 0;
}
}
virtual bool IsKeyPressed(UnukKeyCode code) {
return(m_lastKeyState[code] && m_keyState[code] == 1);
}
virtual bool IsKeyHeldDown(UnukKeyCode code) {
return(m_lastKeyState[code] && m_keyState[code]);
}
virtual void HandleKeyDown(UnukKeyCode code) {
m_keyState[code] = 1;
}
virtual void HandleKeyUp(UnukKeyCode code) {
m_keyState[code] =0;
}
UnukKeyCode TranslateKey(unsigned int code) {
switch(code) {
case XK_Up:
return U_UP;
break;
case XK_Down:
return U_DOWN;
break;
case XK_Left:
return U_LEFT;
break;
case XK_Right:
return U_RIGHT;
break;
case XK_space:
return U_SPACE;
break;
case XK_w:
return U_w;
break;
case XK_a:
return U_a;
break;
case XK_s:
return U_s;
break;
case XK_d:
return U_d;
break;
default:
Debug::logger->message("Warning: Can not translate this key");
return U_INVALID;
}
}
void Update(void) {
// Copy the current key to the last key state.
memcpy(m_lastKeyState, m_keyState, sizeof(short) * U_MAX_KEYS);
}
private:
short m_keyState[U_MAX_KEYS];
short m_lastKeyState[U_MAX_KEYS];
};
// __unix__
#endif
// XKEYBOARDINTERFACE_H
#endif