本文整理汇总了C++中LuaTable::KeyExists方法的典型用法代码示例。如果您正苦于以下问题:C++ LuaTable::KeyExists方法的具体用法?C++ LuaTable::KeyExists怎么用?C++ LuaTable::KeyExists使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LuaTable
的用法示例。
在下文中一共展示了LuaTable::KeyExists方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ReadStartPos
void CMapInfo::ReadStartPos()
{
const float defX = 1000.0f;
const float defZ = 1000.0f;
const float defXStep = 100.0f;
const float defZStep = 100.0f;
const LuaTable teamsTable = mapRoot->SubTable("teams");
for (int t = 0; t < MAX_TEAMS; ++t) {
float3 pos;
pos.x = defX + (defXStep * t);
pos.z = defZ + (defZStep * t);
pos.y = 0.0f;
const LuaTable posTable = teamsTable.SubTable(t).SubTable("startPos");
if (posTable.KeyExists("x") &&
posTable.KeyExists("z")) {
pos.x = posTable.GetFloat("x", pos.x);
pos.z = posTable.GetFloat("z", pos.z);
havePos.push_back(true);
} else {
havePos.push_back(false);
}
startPos.push_back(pos);
}
}
示例2: ReadCacheData
void CArchiveScanner::ReadCacheData(const std::string& filename)
{
if (!FileSystem::FileExists(filename)) {
LOG_L(L_INFO, "Archive cache doesn't exist: %s", filename.c_str());
return;
}
LuaParser p(filename, SPRING_VFS_RAW, SPRING_VFS_BASE);
if (!p.Execute()) {
LOG_L(L_ERROR, "Failed to parse archive cache: %s", p.GetErrorLog().c_str());
return;
}
const LuaTable archiveCache = p.GetRoot();
// Do not load old version caches
const int ver = archiveCache.GetInt("internalVer", (INTERNAL_VER + 1));
if (ver != INTERNAL_VER) {
return;
}
const LuaTable archives = archiveCache.SubTable("archives");
for (int i = 1; archives.KeyExists(i); ++i) {
const LuaTable curArchive = archives.SubTable(i);
const LuaTable archived = curArchive.SubTable("archivedata");
std::string name = curArchive.GetString("name", "");
ArchiveInfo& ai = archiveInfos[StringToLower(name)];
ai.origName = name;
ai.path = curArchive.GetString("path", "");
// do not use LuaTable.GetInt() for 32-bit integers, the Spring lua
// library uses 32-bit floats to represent numbers, which can only
// represent 2^24 consecutive integers
ai.modified = strtoul(curArchive.GetString("modified", "0").c_str(), 0, 10);
ai.checksum = strtoul(curArchive.GetString("checksum", "0").c_str(), 0, 10);
ai.updated = false;
ai.archiveData = CArchiveScanner::ArchiveData(archived, true);
if (ai.archiveData.GetModType() == modtype::map) {
AddDependency(ai.archiveData.GetDependencies(), "Map Helper v1");
} else if (ai.archiveData.GetModType() == modtype::primary) {
AddDependency(ai.archiveData.GetDependencies(), "Spring content v1");
}
}
const LuaTable brokenArchives = archiveCache.SubTable("brokenArchives");
for (int i = 1; brokenArchives.KeyExists(i); ++i) {
const LuaTable curArchive = brokenArchives.SubTable(i);
std::string name = curArchive.GetString("name", "");
StringToLowerInPlace(name);
BrokenArchive& ba = this->brokenArchives[name];
ba.path = curArchive.GetString("path", "");
ba.modified = strtoul(curArchive.GetString("modified", "0").c_str(), 0, 10);
ba.updated = false;
ba.problem = curArchive.GetString("problem", "unknown");
}
isDirty = false;
}
示例3: ReadSmf
void CMapInfo::ReadSmf()
{
// SMF specific settings
const LuaTable mapResTable = parser->GetRoot().SubTable("resources");
smf.detailTexName = mapResTable.GetString("detailTex", "");
smf.specularTexName = mapResTable.GetString("specularTex", "");
smf.splatDetailTexName = mapResTable.GetString("splatDetailTex", "");
smf.splatDistrTexName = mapResTable.GetString("splatDistrTex", "");
smf.grassBladeTexName = mapResTable.GetString("grassBladeTex", "");
smf.grassShadingTexName = mapResTable.GetString("grassShadingTex", "");
smf.skyReflectModTexName = mapResTable.GetString("skyReflectModTex", "");
smf.detailNormalTexName = mapResTable.GetString("detailNormalTex", "");
smf.lightEmissionTexName = mapResTable.GetString("lightEmissionTex", "");
if (!smf.detailTexName.empty()) {
smf.detailTexName = "maps/" + smf.detailTexName;
} else {
const LuaTable& resGfxMaps = resRoot->SubTable("graphics").SubTable("maps");
smf.detailTexName = resGfxMaps.GetString("detailtex", "detailtex2.bmp");
smf.detailTexName = "bitmaps/" + smf.detailTexName;
}
if (!smf.specularTexName.empty()) { smf.specularTexName = "maps/" + smf.specularTexName; }
if (!smf.splatDetailTexName.empty()) { smf.splatDetailTexName = "maps/" + smf.splatDetailTexName; }
if (!smf.splatDistrTexName.empty()) { smf.splatDistrTexName = "maps/" + smf.splatDistrTexName; }
if (!smf.grassBladeTexName.empty()) { smf.grassBladeTexName = "maps/" + smf.grassBladeTexName; }
if (!smf.grassShadingTexName.empty()) { smf.grassShadingTexName = "maps/" + smf.grassShadingTexName; }
if (!smf.skyReflectModTexName.empty()) { smf.skyReflectModTexName = "maps/" + smf.skyReflectModTexName; }
if (!smf.detailNormalTexName.empty()) { smf.detailNormalTexName = "maps/" + smf.detailNormalTexName; }
if (!smf.lightEmissionTexName.empty()) { smf.lightEmissionTexName = "maps/" + smf.lightEmissionTexName; }
// height overrides
const LuaTable smfTable = parser->GetRoot().SubTable("smf");
smf.minHeightOverride = smfTable.KeyExists("minHeight");
smf.maxHeightOverride = smfTable.KeyExists("maxHeight");
smf.minHeight = smfTable.GetFloat("minHeight", 0.0f);
smf.maxHeight = smfTable.GetFloat("maxHeight", 0.0f);
std::stringstream ss;
for (int i = 0; /* no test */; i++) {
ss.str("");
ss << "smtFileName" << i;
if (smfTable.KeyExists(ss.str())) {
smf.smtFileNames.push_back(smfTable.GetString(ss.str(), ".smt"));
} else {
break;
}
}
}
示例4: SetPieceParentName
void CAssParser::SetPieceParentName(
SAssPiece* piece,
const S3DModel* model,
const aiNode* pieceNode,
const LuaTable& pieceTable,
ParentNameMap& parentMap
) {
// Get parent name from metadata or model
if (pieceTable.KeyExists("parent")) {
parentMap[piece] = pieceTable.GetString("parent", "");
return;
}
if (pieceNode->mParent == nullptr)
return;
if (pieceNode->mParent->mParent != nullptr) {
// parent is not the root
parentMap[piece] = std::string(pieceNode->mParent->mName.data);
} else {
// parent is the root (which must already exist)
assert(model->GetRootPiece() != nullptr);
parentMap[piece] = (model->GetRootPiece())->name;
}
}
示例5: option_parseMapOptions
void option_parseMapOptions(
std::vector<Option>& options,
const std::string& fileName,
const std::string& mapName,
const std::string& fileModes,
const std::string& accessModes,
std::set<std::string>* optionsSet)
{
LuaParser luaParser(fileName, fileModes, accessModes);
const string mapFile = archiveScanner->MapNameToMapFile(mapName);
const string configName = MapParser::GetMapConfigName(mapFile);
if (mapName.empty())
throw "Missing map name!";
if (configName.empty())
throw "Could not determine config-file name from the map name '" + mapName + "'!";
luaParser.GetTable("Map");
luaParser.AddString("name", mapName);
luaParser.AddString("fileName", FileSystem::GetFilename(mapFile));
luaParser.AddString("fullName", mapFile);
luaParser.AddString("configFile", configName);
luaParser.EndTable();
if (!luaParser.Execute()) {
throw content_error("luaParser.Execute() failed: "
+ luaParser.GetErrorLog());
}
const LuaTable root = luaParser.GetRoot();
if (!root.IsValid()) {
throw content_error("root table invalid");
}
std::set<std::string>* myOptionsSet = NULL;
if (optionsSet == NULL) {
myOptionsSet = new std::set<std::string>();
} else {
myOptionsSet = optionsSet;
}
for (int index = 1; root.KeyExists(index); index++) {
Option opt;
try {
option_parseOption(root, index, opt, *myOptionsSet);
options.push_back(opt);
} catch (const content_error& err) {
LOG_L(L_WARNING,
"Failed parsing map-option %d from %s for map %s: %s",
index, fileName.c_str(), mapName.c_str(), err.what());
}
}
if (optionsSet == NULL) {
delete myOptionsSet;
myOptionsSet = NULL;
}
}
示例6: parseMapOptions
void parseMapOptions(
std::vector<Option>& options,
const std::string& fileName,
const std::string& mapName,
const std::string& fileModes,
const std::string& accessModes,
std::set<std::string>* optionsSet,
CLogSubsystem* logSubsystem) {
if (!logSubsystem) {
assert(logSubsystem);
}
LuaParser luaParser(fileName, fileModes, accessModes);
const string configName = MapParser::GetMapConfigName(mapName);
const string mapFile = archiveScanner->MapNameToMapFile(mapName);
if (mapName.empty())
throw "Missing map name!";
if (configName.empty())
throw "Couldn't determine config filename from the map name '" + mapName + "'!";
luaParser.GetTable("Map");
luaParser.AddString("name", mapName);
luaParser.AddString("fileName", filesystem.GetFilename(mapFile));
luaParser.AddString("fullName", mapFile);
luaParser.AddString("configFile", configName);
luaParser.EndTable();
if (!luaParser.Execute()) {
throw content_error("luaParser.Execute() failed: "
+ luaParser.GetErrorLog());
}
const LuaTable root = luaParser.GetRoot();
if (!root.IsValid()) {
throw content_error("root table invalid");
}
std::set<std::string>* myOptionsSet = NULL;
if (optionsSet == NULL) {
myOptionsSet = new std::set<std::string>();
} else {
myOptionsSet = optionsSet;
}
for (int index = 1; root.KeyExists(index); index++) {
Option opt;
if (parseOption(root, index, opt, *myOptionsSet, *logSubsystem)) {
options.push_back(opt);
}
}
if (optionsSet == NULL) {
delete myOptionsSet;
myOptionsSet = NULL;
}
}
示例7: LoadSoundDefs
bool CSound::LoadSoundDefs(const std::string& filename)
{
//! can be called from LuaUnsyncedCtrl too
boost::mutex::scoped_lock lck(soundMutex);
LuaParser parser(filename, SPRING_VFS_MOD, SPRING_VFS_ZIP);
parser.SetLowerKeys(false);
parser.SetLowerCppKeys(false);
parser.Execute();
if (!parser.IsValid())
{
LogObject(LOG_SOUND) << "Could not load " << filename << ": " << parser.GetErrorLog();
return false;
}
else
{
const LuaTable soundRoot = parser.GetRoot();
const LuaTable soundItemTable = soundRoot.SubTable("SoundItems");
if (!soundItemTable.IsValid())
{
LogObject(LOG_SOUND) << "CSound(): could not parse SoundItems table in " << filename;
return false;
}
else
{
std::vector<std::string> keys;
soundItemTable.GetKeys(keys);
for (std::vector<std::string>::const_iterator it = keys.begin(); it != keys.end(); ++it)
{
const std::string name(*it);
soundItemDef bufmap;
const LuaTable buf(soundItemTable.SubTable(*it));
buf.GetMap(bufmap);
bufmap["name"] = name;
soundItemDefMap::const_iterator sit = soundItemDefs.find(name);
if (sit != soundItemDefs.end())
LogObject(LOG_SOUND) << "CSound(): two SoundItems have the same name: " << name;
soundItemDef::const_iterator inspec = bufmap.find("file");
if (inspec == bufmap.end()) // no file, drop
LogObject(LOG_SOUND) << "CSound(): SoundItem has no file tag: " << name;
else
soundItemDefs[name] = bufmap;
if (buf.KeyExists("preload"))
{
LogObject(LOG_SOUND) << "CSound(): preloading " << name;
const size_t newid = sounds.size();
sounds.push_back(new SoundItem(GetWaveBuffer(bufmap["file"], true), bufmap));
soundMap[name] = newid;
}
}
LogObject(LOG_SOUND) << "CSound(): Sucessfully parsed " << keys.size() << " SoundItems from " << filename;
}
}
return true;
}
示例8: GetArchiveData
CArchiveScanner::ArchiveData CArchiveScanner::GetArchiveData(const LuaTable& archiveTable)
{
ArchiveData md;
if (!archiveTable.IsValid()) {
return md;
}
md.name = archiveTable.GetString("name", "");
md.shortName = archiveTable.GetString("shortName", "");
md.version = archiveTable.GetString("version", "");
md.mutator = archiveTable.GetString("mutator", "");
md.game = archiveTable.GetString("game", "");
md.shortGame = archiveTable.GetString("shortGame", "");
md.description = archiveTable.GetString("description", "");
md.modType = archiveTable.GetInt("modType", 0);
md.mapfile = archiveTable.GetString("mapfile", "");
const LuaTable dependencies = archiveTable.SubTable("depend");
for (int dep = 1; dependencies.KeyExists(dep); ++dep) {
const std::string depend = dependencies.GetString(dep, "");
md.dependencies.push_back(depend);
}
const LuaTable replaces = archiveTable.SubTable("replace");
for (int rep = 1; replaces.KeyExists(rep); ++rep) {
md.replaces.push_back(replaces.GetString(rep, ""));
}
// HACK needed until lobbies, lobbyserver and unitsync are sorted out
// so they can uniquely identify different versions of the same mod.
// (at time of this writing they use name only)
// NOTE when changing this, this function is used both by the code that
// reads ArchiveCache.lua and the code that reads modinfo.lua from the mod.
// so make sure it doesn't keep adding stuff to the name everytime
// Spring/unitsync is loaded.
if (md.name.find(md.version) == std::string::npos && !md.version.empty()) {
md.name += " " + md.version;
}
return md;
}
示例9: LoadSoundDefs
bool CSound::LoadSoundDefs(const std::string& fileName)
{
//! can be called from LuaUnsyncedCtrl too
boost::recursive_mutex::scoped_lock lck(soundMutex);
LuaParser parser(fileName, SPRING_VFS_MOD, SPRING_VFS_ZIP);
parser.SetLowerKeys(false);
parser.SetLowerCppKeys(false);
parser.Execute();
if (!parser.IsValid())
{
LOG_L(L_WARNING, "Could not load %s: %s",
fileName.c_str(), parser.GetErrorLog().c_str());
return false;
}
else
{
const LuaTable soundRoot = parser.GetRoot();
const LuaTable soundItemTable = soundRoot.SubTable("SoundItems");
if (!soundItemTable.IsValid())
{
LOG_L(L_WARNING, "CSound(): could not parse SoundItems table in %s", fileName.c_str());
return false;
}
else
{
std::vector<std::string> keys;
soundItemTable.GetKeys(keys);
for (std::vector<std::string>::const_iterator it = keys.begin(); it != keys.end(); ++it)
{
const std::string name(*it);
soundItemDef bufmap;
const LuaTable buf(soundItemTable.SubTable(*it));
buf.GetMap(bufmap);
bufmap["name"] = name;
soundItemDefMap::const_iterator sit = soundItemDefs.find(name);
if (sit != soundItemDefs.end())
LOG_L(L_WARNING, "Sound %s gets overwritten by %s", name.c_str(), fileName.c_str());
soundItemDef::const_iterator inspec = bufmap.find("file");
if (inspec == bufmap.end()) { // no file, drop
LOG_L(L_WARNING, "Sound %s is missing file tag (ignoring)", name.c_str());
} else {
soundItemDefs[name] = bufmap;
}
if (buf.KeyExists("preload")) {
MakeItemFromDef(bufmap);
}
}
LOG(" parsed %i sounds from %s", (int)keys.size(), fileName.c_str());
}
}
return true;
}
示例10: parseOptions
void parseOptions(
std::vector<Option>& options,
const std::string& fileName,
const std::string& fileModes,
const std::string& accessModes,
const std::string& mapName,
std::set<std::string>* optionsSet,
CLogSubsystem* logSubsystem) {
if (!logSubsystem) {
assert(logSubsystem);
}
LuaParser luaParser(fileName, fileModes, accessModes);
const string configName = MapParser::GetMapConfigName(mapName);
if (!mapName.empty() && !configName.empty()) {
luaParser.GetTable("Map");
luaParser.AddString("fileName", mapName);
luaParser.AddString("fullName", "maps/" + mapName);
luaParser.AddString("configFile", configName);
luaParser.EndTable();
}
if (!luaParser.Execute()) {
throw content_error("luaParser.Execute() failed: "
+ luaParser.GetErrorLog());
}
const LuaTable root = luaParser.GetRoot();
if (!root.IsValid()) {
throw content_error("root table invalid");
}
std::set<std::string>* myOptionsSet = NULL;
if (optionsSet == NULL) {
myOptionsSet = new std::set<std::string>();
} else {
myOptionsSet = optionsSet;
}
for (int index = 1; root.KeyExists(index); index++) {
Option opt;
if (parseOption(root, index, opt, *myOptionsSet, *logSubsystem)) {
options.push_back(opt);
}
}
if (optionsSet == NULL) {
delete myOptionsSet;
myOptionsSet = NULL;
}
}
示例11: parseOptions
void parseOptions(
std::vector<Option>& options,
const std::string& fileName,
const std::string& fileModes,
const std::string& accessModes,
std::set<std::string>* optionsSet,
CLogSubsystem* logSubsystem) {
if (!logSubsystem) {
assert(logSubsystem);
}
LuaParser luaParser(fileName, fileModes, accessModes);
if (!luaParser.Execute()) {
throw content_error("luaParser.Execute() failed: "
+ luaParser.GetErrorLog());
}
const LuaTable root = luaParser.GetRoot();
if (!root.IsValid()) {
throw content_error("root table invalid");
}
std::set<std::string>* myOptionsSet = NULL;
if (optionsSet == NULL) {
myOptionsSet = new std::set<std::string>();
} else {
myOptionsSet = optionsSet;
}
for (int index = 1; root.KeyExists(index); index++) {
Option opt;
try {
parseOption(root, index, opt, *myOptionsSet);
options.push_back(opt);
} catch (content_error& err) {
logOutput.Print(*logSubsystem,
"Failed parsing option %d from %s: %s",
index, fileName.c_str(), err.what());
}
}
if (optionsSet == NULL) {
delete myOptionsSet;
myOptionsSet = NULL;
}
}
示例12: ReadCacheData
void CArchiveScanner::ReadCacheData(const string& filename)
{
LuaParser p(filename, SPRING_VFS_RAW, SPRING_VFS_BASE);
if (!p.Execute()) {
logOutput.Print("ERROR in " + filename + ": " + p.GetErrorLog());
}
const LuaTable archiveCache = p.GetRoot();
const LuaTable archives = archiveCache.SubTable("archives");
// Do not load old version caches
const int ver = archiveCache.GetInt("internalVer", (INTERNAL_VER + 1));
if (ver != INTERNAL_VER) {
return;
}
for (int i = 1; archives.KeyExists(i); ++i) {
const LuaTable curArchive = archives.SubTable(i);
const LuaTable archived = curArchive.SubTable("archivedata");
ArchiveInfo ai;
ai.origName = curArchive.GetString("name", "");
ai.path = curArchive.GetString("path", "");
// do not use LuaTable.GetInt() for 32-bit integers, the Spring lua
// library uses 32-bit floats to represent numbers, which can only
// represent 2^24 consecutive integers
ai.modified = strtoul(curArchive.GetString("modified", "0").c_str(), 0, 10);
ai.checksum = strtoul(curArchive.GetString("checksum", "0").c_str(), 0, 10);
ai.updated = false;
ai.archiveData = GetArchiveData(archived);
if (ai.archiveData.modType == modtype::map)
AddDependency(ai.archiveData.dependencies, "maphelper.sdz");
else if (ai.archiveData.modType == modtype::primary)
AddDependency(ai.archiveData.dependencies, "Spring content v1");
string lcname = StringToLower(ai.origName);
archiveInfo[lcname] = ai;
}
isDirty = false;
}
示例13: SetPieceParentName
void CAssParser::SetPieceParentName(
SAssPiece* piece,
const S3DModel* model,
const aiNode* pieceNode,
const LuaTable& pieceTable
) {
// Get parent name from metadata or model
if (pieceTable.KeyExists("parent")) {
piece->parentName = pieceTable.GetString("parent", "");
} else if (pieceNode->mParent != NULL) {
if (pieceNode->mParent->mParent != NULL) {
piece->parentName = std::string(pieceNode->mParent->mName.data);
} else {
// my parent is the root (which must already exist)
assert(model->GetRootPiece() != NULL);
piece->parentName = model->GetRootPiece()->name;
}
}
}
示例14: ReadSmf
void CMapInfo::ReadSmf()
{
// SMF specific settings
const LuaTable mapResTable = mapRoot->SubTable("resources");
smf.detailTexName = mapResTable.GetString("detailTex", "");
if (!smf.detailTexName.empty()) {
smf.detailTexName = "maps/" + smf.detailTexName;
}
else {
const LuaTable resGfxMaps = resRoot->SubTable("graphics").SubTable("maps");
smf.detailTexName = resGfxMaps.GetString("detailtex", "detailtex2.bmp");
smf.detailTexName = "bitmaps/" + smf.detailTexName;
}
// height overrides
const LuaTable smfTable = mapRoot->SubTable("smf");
smf.minHeightOverride = smfTable.KeyExists("minHeight");
smf.maxHeightOverride = smfTable.KeyExists("maxHeight");
smf.minHeight = smfTable.GetFloat("minHeight", 0.0f);
smf.maxHeight = smfTable.GetFloat("maxHeight", 0.0f);
}
示例15: option_parseOptionsInternal
static void option_parseOptionsInternal(
std::vector<Option>& options,
LuaParser& luaParser,
const std::string& luaSourceDesc,
std::set<std::string>* optionsSet)
{
if (!luaParser.Execute()) {
throw content_error("luaParser.Execute() failed: "
+ luaParser.GetErrorLog());
}
const LuaTable root = luaParser.GetRoot();
if (!root.IsValid()) {
throw content_error("root table invalid");
}
std::set<std::string>* myOptionsSet = NULL;
if (optionsSet == NULL) {
myOptionsSet = new std::set<std::string>();
} else {
myOptionsSet = optionsSet;
}
for (int index = 1; root.KeyExists(index); index++) {
Option opt;
try {
option_parseOption(root, index, opt, *myOptionsSet);
options.push_back(opt);
} catch (const content_error& err) {
LOG_L(L_WARNING, "Failed parsing option %d from %s: %s",
index, luaSourceDesc.c_str(), err.what());
}
}
if (optionsSet == NULL) {
delete myOptionsSet;
myOptionsSet = NULL;
}
}