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"; return "love.keyboard.sdl";
} }
bool Keyboard::isDown(Key key) const bool Keyboard::isDown(Key * keylist) const
{ {
SDLKey k; SDLKey k;
Uint8 * keystate = SDL_GetKeyState(0);
if(keys.find(key, k))
for (Key key = *keylist; key != KEY_MAX_ENUM; key = *(++keylist))
{ {
Uint8 * keystate = SDL_GetKeyState(0); if (keys.find(key, k) && keystate[(unsigned)k] == 1)
return keystate[(unsigned)k] == 1; return true;
} }
return false; return false;
+2 -2
View File
@@ -46,7 +46,7 @@ namespace sdl
* @param key A key identifier. * @param key A key identifier.
* @return boolean * @return boolean
**/ **/
bool isDown(Key key) const; bool isDown(Key * keylist) const;
/** /**
* Enables key repeating. * Enables key repeating.
@@ -78,4 +78,4 @@ namespace sdl
} // keyboard } // keyboard
} // love } // 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) int w_isDown(lua_State * L)
{ {
Keyboard::Key k; Keyboard::Key k;
unsigned int num = lua_gettop(L);
if(Keyboard::getConstant(luaL_checkstring(L, 1), k)) 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 keylist[counter] = Keyboard::KEY_MAX_ENUM;
{
luax_pushboolean(L, false); luax_pushboolean(L, instance->isDown(keylist));
}
return 1; return 1;
} }