1. Evan Dorn
  2. love

Commits

Bart van Strien  committed d38c824

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

  • Participants
  • Parent commits 5ccd923
  • Branches default

Comments (0)

Files changed (3)

File src/modules/keyboard/sdl/Keyboard.cpp

View file
  • Ignore whitespace
 		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;

File src/modules/keyboard/sdl/Keyboard.h

View file
  • Ignore whitespace
 		* @param key A key identifier.
 		* @return boolean
 		**/
-		bool isDown(Key key) const;
+		bool isDown(Key * keylist) const;
 
 		/**
 		* Enables key repeating.
 } // keyboard
 } // love
 
-#endif // LOVE_KEYBOARD_SDL_KEYBOARD_H
+#endif // LOVE_KEYBOARD_SDL_KEYBOARD_H

File src/modules/keyboard/sdl/wrap_Keyboard.cpp

View file
  • Ignore whitespace
 	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;
 	}