/******************************************************************************
This source file is part of Viewizard Game Engine
For the latest info, see http://www.viewizard.com/
File name: Keyboard.cpp
Copyright (c) 2006-2007 Michael Kurinnoy, Viewizard
All Rights Reserved.
File Version: 3.0
******************************************************************************
AstroMenace game source code available under "dual licensing" model.
The licensing options available are:
* Commercial Licensing. This is the appropriate option if you are
creating proprietary applications and you are not prepared to
distribute and share the source code of your application.
Contact us for pricing at viewizard@viewizard.com
* Open Source Licensing. This is the appropriate option if you want
to share the source code of your application with everyone you
distribute it to, and you also want to give them the right to share
who uses it. You should have received a copy of the GNU General Public
License version 3 with this source codes.
If not, see .
******************************************************************************/
#include "System.h"
#include "../../Defines.h"
int MaxKeyCount = 0;
//------------------------------------------------------------------------------------
// установка-получение статуса нажатых кнопок на клавиатуре
//------------------------------------------------------------------------------------
bool vw_GetKeys(int Num)
{
Uint8 *keystate = SDL_GetKeyState(&MaxKeyCount);
if (keystate[Num]) return true;
return false;
}
void vw_SetKeys(int Num, bool NewKeyStatus)
{
Uint8 *keystate = SDL_GetKeyState(&MaxKeyCount);
keystate[Num] = NewKeyStatus;
}
int GetMaxKeys()
{
return MaxKeyCount;
}
// название кнопок
char * vw_VirtualCodeNameEN(int Num);
char * vw_VirtualCodeNameDE(int Num);
char * vw_VirtualCodeNameRU(int Num);
char * vw_VirtualCodeName(int KeyboardLayout, int Num)
{
switch (KeyboardLayout)
{
case 1: return vw_VirtualCodeNameEN(Num);
case 2: return vw_VirtualCodeNameDE(Num);
case 3: return vw_VirtualCodeNameRU(Num);
}
}
// значения кнопок клавиатуры
int VirtualCodeChar1(int Num);
int VirtualCodeChar2(int Num);
int VirtualCodeChar3(int Num);
int VirtualCodeChar4(int Num);
// значения кнопок клавиатуры
int VirtualCodeCharDE1(int Num);
int VirtualCodeCharDE2(int Num);
int VirtualCodeCharDE3(int Num);
int VirtualCodeCharDE4(int Num);
// значения кнопок клавиатуры
int VirtualCodeCharRU1(int Num);
int VirtualCodeCharRU2(int Num);
int VirtualCodeCharRU3(int Num);
int VirtualCodeCharRU4(int Num);
int vw_VirtualCodeChar(int KeyboardLayout, int Num)
{
// нажат CapsLock
bool CapsLockOn = false;
// делаем немного "сложно", чтобы избежать перфоменс варнинга на MSVC
if((SDL_GetModState() & KMOD_CAPS) > 0) CapsLockOn = true;
switch (KeyboardLayout)
{
case 1:
{
// нажат LeftShift или LeftShift
if (SDL_GetModState() & KMOD_SHIFT)
{
if (VirtualCodeChar1(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeChar1(Num);
else
return VirtualCodeChar4(Num);
}
}
else
{
if (VirtualCodeChar2(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeChar2(Num);
else
return VirtualCodeChar3(Num);
}
}
}
break;
case 2:
{
// нажат LeftShift или LeftShift
if (SDL_GetModState() & KMOD_SHIFT)
{
if (VirtualCodeCharDE1(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeCharDE1(Num);
else
return VirtualCodeCharDE4(Num);
}
}
else
{
if (VirtualCodeCharDE2(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeCharDE2(Num);
else
return VirtualCodeCharDE3(Num);
}
}
}
break;
case 3:
{
// нажат LeftShift или LeftShift
if (SDL_GetModState() & KMOD_SHIFT)
{
if (VirtualCodeCharRU1(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeCharRU1(Num);
else
return VirtualCodeCharRU4(Num);
}
}
else
{
if (VirtualCodeCharRU2(Num) != 0)
{
if (!CapsLockOn)
return VirtualCodeCharRU2(Num);
else
return VirtualCodeCharRU3(Num);
}
}
}
break;
}
return 0;
}
struct sKeyboardCodeName
{
int Code;
char Name[32];
};
const int KeyboardCodeNameDataCount = 99;
sKeyboardCodeName KeyboardCodeNameData[KeyboardCodeNameDataCount] =
{
{SDLK_F1, "SDLK_F1"},
{SDLK_F2, "SDLK_F2"},
{SDLK_F3, "SDLK_F3"},
{SDLK_F4, "SDLK_F4"},
{SDLK_F5, "SDLK_F5"},
{SDLK_F6, "SDLK_F6"},
{SDLK_F7, "SDLK_F7"},
{SDLK_F8, "SDLK_F8"},
{SDLK_F9, "SDLK_F9"},
{SDLK_F10, "SDLK_F10"},
{SDLK_F11, "SDLK_F11"},
{SDLK_F12, "SDLK_F12"},
{SDLK_1, "SDLK_1"},
{SDLK_2, "SDLK_2"},
{SDLK_3, "SDLK_3"},
{SDLK_4, "SDLK_4"},
{SDLK_5, "SDLK_5"},
{SDLK_6, "SDLK_6"},
{SDLK_7, "SDLK_7"},
{SDLK_8, "SDLK_8"},
{SDLK_9, "SDLK_9"},
{SDLK_MINUS, "SDLK_MINUS"},
{SDLK_EQUALS, "SDLK_EQUALS"},
{SDLK_BACKSPACE, "SDLK_BACKSPACE"},
{SDLK_TAB, "SDLK_TAB"},
{SDLK_q, "SDLK_q"},
{SDLK_w, "SDLK_w"},
{SDLK_e, "SDLK_e"},
{SDLK_r, "SDLK_r"},
{SDLK_t, "SDLK_t"},
{SDLK_y, "SDLK_y"},
{SDLK_u, "SDLK_u"},
{SDLK_i, "SDLK_i"},
{SDLK_o, "SDLK_o"},
{SDLK_p, "SDLK_p"},
{SDLK_LEFTBRACKET, "SDLK_LEFTBRACKET"},
{SDLK_RIGHTBRACKET, "SDLK_RIGHTBRACKET"},
{SDLK_RETURN, "SDLK_RETURN"},
{SDLK_LCTRL, "SDLK_LCTRL"},
{SDLK_a, "SDLK_a"},
{SDLK_s, "SDLK_s"},
{SDLK_d, "SDLK_d"},
{SDLK_f, "SDLK_f"},
{SDLK_g, "SDLK_g"},
{SDLK_h, "SDLK_h"},
{SDLK_j, "SDLK_j"},
{SDLK_k, "SDLK_k"},
{SDLK_l, "SDLK_l"},
{SDLK_SEMICOLON, "SDLK_SEMICOLON"},
{SDLK_QUOTE, "SDLK_QUOTE"},
{SDLK_QUOTEDBL, "SDLK_QUOTEDBL"},
{SDLK_BACKQUOTE, "SDLK_BACKQUOTE"},
{SDLK_LSHIFT, "SDLK_LSHIFT"},
{SDLK_BACKSLASH, "SDLK_BACKSLASH"},
{SDLK_z, "SDLK_z"},
{SDLK_x, "SDLK_x"},
{SDLK_c, "SDLK_c"},
{SDLK_v, "SDLK_v"},
{SDLK_b, "SDLK_b"},
{SDLK_n, "SDLK_n"},
{SDLK_m, "SDLK_m"},
{SDLK_COMMA, "SDLK_COMMA"},
{SDLK_PERIOD, "SDLK_PERIOD"},
{SDLK_SLASH, "SDLK_SLASH"},
{SDLK_RSHIFT, "SDLK_RSHIFT"},
{SDLK_ASTERISK, "SDLK_ASTERISK"},
{SDLK_LALT, "SDLK_LALT"},
{SDLK_SPACE, "SDLK_SPACE"},
{SDLK_KP7, "SDLK_KP7"},
{SDLK_KP8, "SDLK_KP8"},
{SDLK_KP9, "SDLK_KP9"},
{SDLK_KP_MINUS, "SDLK_KP_MINUS"},
{SDLK_KP_MULTIPLY, "SDLK_KP_MULTIPLY"},
{SDLK_KP4, "SDLK_KP4"},
{SDLK_KP5, "SDLK_KP5"},
{SDLK_KP6, "SDLK_KP6"},
{SDLK_KP_PLUS, "SDLK_KP_PLUS"},
{SDLK_KP1, "SDLK_KP1"},
{SDLK_KP2, "SDLK_KP2"},
{SDLK_KP3, "SDLK_KP3"},
{SDLK_KP0, "SDLK_KP0"},
{SDLK_KP_PERIOD, "SDLK_KP_PERIOD"},
{SDLK_KP_ENTER, "SDLK_KP_ENTER"},
{SDLK_RCTRL, "SDLK_RCTRL"},
{SDLK_KP_DIVIDE, "SDLK_KP_DIVIDE"},
{SDLK_RALT, "SDLK_RALT"},
{SDLK_PAUSE, "SDLK_PAUSE"},
{SDLK_HOME, "SDLK_HOME"},
{SDLK_UP, "SDLK_UP"},
{SDLK_PAGEUP, "SDLK_PAGEUP"},
{SDLK_LEFT, "SDLK_LEFT"},
{SDLK_RIGHT, "SDLK_RIGHT"},
{SDLK_END, "SDLK_END"},
{SDLK_DOWN, "SDLK_DOWN"},
{SDLK_PAGEDOWN, "SDLK_PAGEDOWN"},
{SDLK_INSERT, "SDLK_INSERT"},
{SDLK_DELETE, "SDLK_DELETE"},
{SDLK_LSUPER, "SDLK_LSUPER"},
{SDLK_RSUPER, "SDLK_RSUPER"},
};
// название кнопок
char * vw_KeyboardCodeName(int Num)
{
for (int i=0; i