TEST_F(LUATest, testGlobal) { LUA lua; const char *buf = "settings = { a = false, b = true, c = 1, }"; ASSERT_TRUE(lua.loadBuffer(buf, "testGlobal")); ASSERT_EQ(0, lua.stackCount()); ASSERT_TRUE(lua.getGlobalKeyValue("settings")); // we expect settings and nil ASSERT_EQ(2, lua.stackCount()) << lua.getStackDump(); int i = 0; while (lua.getNextKeyValue()) { const std::string& id = lua.getLuaValue(-2); const std::string& value = lua.getLuaValue(-1); lua.pop(); SCOPED_TRACE(string::toString(i)); if (id == "a") { ASSERT_EQ("false", value); } else if (id == "b") { ASSERT_EQ("true", value); } else if (id == "c") { ASSERT_EQ("1", value); } else { EXPECT_TRUE(false) << "id is: " << id; } ++i; } ASSERT_EQ(1, lua.stackCount()) << lua.getStackDump(); lua.pop(); ASSERT_EQ(0, lua.stackCount()) << lua.getStackDump(); ASSERT_EQ(3, i); }
void ConfigManager::getBindingMap (LUA& lua, std::map<std::string, std::string>* map, const char *key, BindingType type) { if (!lua.getGlobalKeyValue(key)) return; while (lua.getNextKeyValue()) { const std::string id = lua.getKey(); if (id.empty()) { lua.pop(); continue; } lua_pushnil(lua.getState()); std::map<std::string, std::string> strMap; while (lua.getNextKeyValue()) { const std::string& _key = lua.getLuaValue(-2); const std::string& _value = lua.getLuaValue(-1); strMap[_key] = _value; lua.pop(); } BindingSpace bindingSpace = BINDINGS_UI; if (id == "map") bindingSpace = BINDINGS_MAP; for (std::map<std::string, std::string>::const_iterator i = strMap.begin(); i != strMap.end(); ++i) { if (type == KEYBOARD) { map[bindingSpace][i->first] = i->second; } else if (type == CONTROLLER) { const SDL_GameControllerButton button = SDL_GameControllerGetButtonFromString(i->first.c_str()); const char *buttonStr = SDL_GameControllerGetStringForButton(button); map[bindingSpace][buttonStr] = i->second; } } lua_pop(lua.getState(), 1); } }
void ConfigManager::getBindingMap (LUA& lua, std::map<int, std::string>* map, const char *key, BindingType type) { if (type == CONTROLLER) return; if (!lua.getGlobalKeyValue(key)) return; while (lua.getNextKeyValue()) { const std::string id = lua.getKey(); if (id.empty()) { lua.pop(); continue; } lua_pushnil(lua.getState()); std::map<std::string, std::string> strMap; while (lua.getNextKeyValue()) { const std::string& _key = lua.getLuaValue(-2); const std::string& _value = lua.getLuaValue(-1); strMap[_key] = _value; lua.pop(); } BindingSpace bindingSpace = BINDINGS_UI; if (id == "map") bindingSpace = BINDINGS_MAP; for (std::map<std::string, std::string>::const_iterator i = strMap.begin(); i != strMap.end(); ++i) { if (type == KEYBOARD) { map[bindingSpace][mapKey(i->first)] = i->second; } } lua_pop(lua.getState(), 1); } }