#include "Input.hpp"
#ifdef _MSC_VER
namespace {
const Input::Key translate(const UINT wparam) {
switch (wparam) {
case VK_UP:
case 'S':
return Input::Forward;
case VK_DOWN:
case 'D':
return Input::Backward;
case VK_LEFT:
case 'H':
return Input::Left;
case VK_RIGHT:
case 'L':
return Input::Right;
case 'A':
return Input::LStep;
case 'F':
return Input::RStep;
case VK_RETURN:
case 'K':
return Input::Up;
case VK_SPACE:
case 'J':
return Input::Down;
}
return Input::Unknown;
}
}
long FAR PASCAL Input::proc(
unsigned msg,
UINT wparam,
LONG lparam
) {
switch (msg) {
case WM_KEYDOWN:
switch (wparam) {
case VK_ESCAPE:
exit();
break;
case 'W':
switchWire();
break;
}
case WM_KEYUP:
onKey(
translate(wparam),
msg == WM_KEYDOWN
);
}
return Graphics::proc(
msg,
wparam,
lparam
);
}
#else
#include <X11/keysym.h>
namespace {
const Input::Key translate(const KeySym keySym) {
switch (keySym) {
case XK_Up:
case XK_S:
case XK_s:
return Input::Forward;
case XK_Down:
case XK_D:
case XK_d:
return Input::Backward;
case XK_Left:
case XK_H:
case XK_h:
return Input::Left;
case XK_Right:
case XK_L:
case XK_l:
return Input::Right;
case XK_A:
case XK_a:
return Input::LStep;
case XK_F:
case XK_f:
return Input::RStep;
case XK_Return:
case XK_K:
case XK_k:
return Input::Up;
case XK_space:
case XK_J:
case XK_j:
return Input::Down;
}
return Input::Unknown;
}
}
void Input::onKeySym(
const KeySym keySym,
const bool isDown
) {
switch (keySym) {
case XK_W:
case XK_w:
if (isDown) {
switchWire();
}
break;
default:
onKey(
translate(keySym),
isDown
);
}
}
#endif