本文整理汇总了C++中LuaTable::GetLength方法的典型用法代码示例。如果您正苦于以下问题:C++ LuaTable::GetLength方法的具体用法?C++ LuaTable::GetLength怎么用?C++ LuaTable::GetLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LuaTable
的用法示例。
在下文中一共展示了LuaTable::GetLength方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: content_error
CDamageArrayHandler::CDamageArrayHandler(LuaParser* defsParser)
{
#define DEFAULT_ARMORDEF_NAME "default"
try {
const LuaTable rootTable = defsParser->GetRoot().SubTable("ArmorDefs");
if (!rootTable.IsValid())
throw content_error("Error loading ArmorDefs");
// GetKeys() sorts the keys, so can not simply push_back before call
rootTable.GetKeys(armorDefKeys);
armorDefKeys.insert(armorDefKeys.begin(), DEFAULT_ARMORDEF_NAME);
armorDefNameIdxMap[DEFAULT_ARMORDEF_NAME] = 0;
LOG("[%s] number of ArmorDefs: " _STPF_, __FUNCTION__, armorDefKeys.size());
// expects the following structure, subtables must be in array-format:
//
// {"tanks" = {[1] = "supertank", [2] = "megatank"}, "infantry" = {[1] = "dude"}, ...}
//
// the old (pre-95.0) <key, value> subtable definitions are no longer supported!
//
for (unsigned int armorDefIdx = 1; armorDefIdx < armorDefKeys.size(); armorDefIdx++) {
const std::string armorDefName = StringToLower(armorDefKeys[armorDefIdx]);
if (armorDefName == DEFAULT_ARMORDEF_NAME) {
// ignore, no need to clear entire table
LOG_L(L_WARNING, "[%s] ArmorDefs: tried to define the \"%s\" armor type!", __FUNCTION__, DEFAULT_ARMORDEF_NAME);
continue;
}
armorDefNameIdxMap[armorDefName] = armorDefIdx;
const LuaTable armorDefTable = rootTable.SubTable(armorDefKeys[armorDefIdx]);
const unsigned int numArmorDefEntries = armorDefTable.GetLength();
for (unsigned int armorDefEntryIdx = 0; armorDefEntryIdx < numArmorDefEntries; armorDefEntryIdx++) {
const std::string& unitDefName = StringToLower(armorDefTable.GetString(armorDefEntryIdx + 1, ""));
const auto armorDefTableIt = armorDefNameIdxMap.find(unitDefName);
if (armorDefTableIt == armorDefNameIdxMap.end()) {
armorDefNameIdxMap[unitDefName] = armorDefIdx;
continue;
}
LOG_L(L_WARNING,
"[%s] UnitDef \"%s\" in ArmorDef \"%s\" already belongs to ArmorDef category %d!",
__FUNCTION__, unitDefName.c_str(), armorDefName.c_str(), armorDefTableIt->second);
}
}
} catch (const content_error&) {
armorDefNameIdxMap.clear();
armorDefNameIdxMap[DEFAULT_ARMORDEF_NAME] = 0;
armorDefKeys.clear();
armorDefKeys.push_back(DEFAULT_ARMORDEF_NAME);
}
}
示例2: content_error
MoveDefHandler::MoveDefHandler(LuaParser* defsParser)
{
const LuaTable rootTable = defsParser->GetRoot().SubTable("MoveDefs");
if (!rootTable.IsValid())
throw content_error("Error loading movement definitions");
CRC crc;
for (int tt = 0; tt < CMapInfo::NUM_TERRAIN_TYPES; ++tt) {
const CMapInfo::TerrainType& terrType = mapInfo->terrainTypes[tt];
crc << terrType.tankSpeed << terrType.kbotSpeed;
crc << terrType.hoverSpeed << terrType.shipSpeed;
}
moveDefs.reserve(rootTable.GetLength());
for (size_t num = 1; /* no test */; num++) {
const LuaTable moveDefTable = rootTable.SubTable(num);
if (!moveDefTable.IsValid()) {
break;
}
moveDefs.emplace_back(moveDefTable, num);
const MoveDef& md = moveDefs.back();
moveDefNames[md.name] = md.pathType;
crc << md.GetCheckSum();
}
CMoveMath::noHoverWaterMove = (mapInfo->water.damage >= MAX_ALLOWED_WATER_DAMAGE_HMM);
CMoveMath::waterDamageCost = (mapInfo->water.damage >= MAX_ALLOWED_WATER_DAMAGE_GMM)?
0.0f: (1.0f / (1.0f + mapInfo->water.damage * 0.1f));
crc << CMoveMath::waterDamageCost;
crc << CMoveMath::noHoverWaterMove;
checksum = crc.GetDigest();
}
示例3: resourcesParser
static inline void GetGroundScars(std::unordered_map<std::string, STex>& textures)
{
LuaParser resourcesParser("gamedata/resources.lua", SPRING_VFS_MOD_BASE, SPRING_VFS_ZIP);
if (!resourcesParser.Execute()) {
LOG_L(L_ERROR, "Failed to load resources: %s", resourcesParser.GetErrorLog().c_str());
}
const LuaTable scarsTable = resourcesParser.GetRoot().SubTable("graphics").SubTable("scars");
for (int i = 1; i <= scarsTable.GetLength(); ++i) {
std::string texName = scarsTable.GetString(i, IntToString(i, "scars/scar%i.bmp"));
std::string texName2 = texName + ".dds"; //FIXME
auto name = IntToString(i);
try {
textures[ name ] = LoadTexture(texName);
textures[GetExtraTextureName(name)] = LoadTexture(texName2);
} catch(const content_error& err) {
LOG_L(L_ERROR, "%s", err.what());
}
}
}