Make isDown accept a list of keys (issue #121)

This commit is contained in:
Bart van Strien
2011-03-19 12:47:39 +01:00
parent 20364c67bd
commit 766c863484
3 changed files with 18 additions and 15 deletions
+6 -5
View File
@@ -31,14 +31,15 @@ namespace sdl
return "love.keyboard.sdl";
}
bool Keyboard::isDown(Key key) const
bool Keyboard::isDown(Key * keylist) const
{
SDLKey k;
if(keys.find(key, k))
Uint8 * keystate = SDL_GetKeyState(0);
for (Key key = *keylist; key != KEY_MAX_ENUM; key = *(++keylist))
{
Uint8 * keystate = SDL_GetKeyState(0);
return keystate[(unsigned)k] == 1;
if (keys.find(key, k) && keystate[(unsigned)k] == 1)
return true;
}
return false;
+2 -2
View File
@@ -46,7 +46,7 @@ namespace sdl
* @param key A key identifier.
* @return boolean
**/
bool isDown(Key key) const;
bool isDown(Key * keylist) const;
/**
* Enables key repeating.
@@ -78,4 +78,4 @@ namespace sdl
} // keyboard
} // love
#endif // LOVE_KEYBOARD_SDL_KEYBOARD_H
#endif // LOVE_KEYBOARD_SDL_KEYBOARD_H
+10 -8
View File
@@ -31,16 +31,18 @@ namespace sdl
int w_isDown(lua_State * L)
{
Keyboard::Key k;
if(Keyboard::getConstant(luaL_checkstring(L, 1), k))
unsigned int num = lua_gettop(L);
Keyboard::Key * keylist = new Keyboard::Key[num+1];
unsigned int counter = 0;
for (unsigned int i = 0; i < num; i++)
{
luax_pushboolean(L, instance->isDown(k));
if(Keyboard::getConstant(luaL_checkstring(L, i+1), k))
keylist[counter++] = k;
}
else
{
luax_pushboolean(L, false);
}
keylist[counter] = Keyboard::KEY_MAX_ENUM;
luax_pushboolean(L, instance->isDown(keylist));
return 1;
}