本文整理汇总了C++中LuaToString函数的典型用法代码示例。如果您正苦于以下问题:C++ LuaToString函数的具体用法?C++ LuaToString怎么用?C++ LuaToString使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LuaToString函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: Assert
/* virtual */ void CContentTypeFormattedText::Parse(lua_State *l)
{
Assert(lua_istable(l, -1));
for (lua_pushnil(l); lua_next(l, -2); lua_pop(l, 1)) {
const char *key = LuaToString(l, -2);
if (!strcmp(key, "Format")) {
this->Format = LuaToString(l, -1);
} else if (!strcmp(key, "Font")) {
this->Font = CFont::Get(LuaToString(l, -1));
} else if (!strcmp(key, "Variable")) {
const char *const name = LuaToString(l, -1);
this->Index = UnitTypeVar.VariableNameLookup[name];
if (this->Index == -1) {
LuaError(l, "unknown variable '%s'" _C_ name);
}
} else if (!strcmp(key, "Component")) {
this->Component = Str2EnumVariable(l, LuaToString(l, -1));
} else if (!strcmp(key, "Centered")) {
this->Centered = LuaToBoolean(l, -1);
} else {
LuaError(l, "'%s' invalid for method 'FormattedText' in DefinePanelContents" _C_ key);
}
}
}
开发者ID:KroArtem,项目名称:Wyrmgus,代码行数:25,代码来源:contenttype.cpp
示例2: CclSpellAutocast
/**
** Parse the Condition for spell.
**
** @param l Lua state.
** @param autocast pointer to autocast to fill with data.
**
** @note: autocast must be allocated. All data already in is LOST.
*/
static void CclSpellAutocast(lua_State *l, AutoCastInfo *autocast)
{
if (!lua_istable(l, -1)) {
LuaError(l, "incorrect argument");
}
const int args = lua_rawlen(l, -1);
for (int j = 0; j < args; ++j) {
lua_rawgeti(l, -1, j + 1);
const char *value = LuaToString(l, -1);
lua_pop(l, 1);
++j;
if (!strcmp(value, "range")) {
lua_rawgeti(l, -1, j + 1);
autocast->Range = LuaToNumber(l, -1);
lua_pop(l, 1);
} else if (!strcmp(value, "combat")) {
lua_rawgeti(l, -1, j + 1);
autocast->Combat = Ccl2Condition(l, LuaToString(l, -1));
lua_pop(l, 1);
} else if (!strcmp(value, "condition")) {
if (!autocast->Condition) {
autocast->Condition = new ConditionInfo;
}
lua_rawgeti(l, -1, j + 1);
CclSpellCondition(l, autocast->Condition);
lua_pop(l, 1);
} else {
LuaError(l, "Unsupported autocast tag: %s" _C_ value);
}
}
}
开发者ID:ajaykon,项目名称:Stratagus,代码行数:39,代码来源:script_spell.cpp
示例3: CclMakeSound
/**
** Create a sound.
**
** Glue between c and scheme. This function asks the sound system to
** register a sound under a given name, wiht an associated list of files
** (the list can be replaced by only one file).
**
** @param l Lua state.
**
** @return the sound id of the created sound
*/
static int CclMakeSound(lua_State *l)
{
LuaCheckArgs(l, 2);
std::string c_name = LuaToString(l, 1);
std::vector<std::string> files;
CSound *id;
if (lua_isstring(l, 2)) {
// only one file
files.push_back(LuaToString(l, 2));
id = MakeSound(c_name, files);
} else if (lua_istable(l, 2)) {
// several files
const int args = lua_rawlen(l, 2);
files.reserve(args);
for (int j = 0; j < args; ++j) {
lua_rawgeti(l, 2, j + 1);
files.push_back(LuaToString(l, -1));
lua_pop(l, 1);
}
id = MakeSound(c_name, files);
} else {
LuaError(l, "string or table expected");
return 0;
}
LuaUserData *data = (LuaUserData *)lua_newuserdata(l, sizeof(LuaUserData));
data->Type = LuaSoundType;
data->Data = id;
return 1;
}
开发者ID:ajaykon,项目名称:Stratagus,代码行数:41,代码来源:script_sound.cpp
示例4: LuaToString
/* virtual */ void Spell_Summon::Parse(lua_State *l, int startIndex, int endIndex)
{
for (int j = startIndex; j < endIndex; ++j) {
const char *value = LuaToString(l, -1, j + 1);
++j;
if (!strcmp(value, "unit-type")) {
value = LuaToString(l, -1, j + 1);
this->UnitType = UnitTypeByIdent(value);
if (!this->UnitType) {
this->UnitType = 0;
DebugPrint("unit type \"%s\" not found for summon spell.\n" _C_ value);
}
} else if (!strcmp(value, "time-to-live")) {
this->TTL = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "require-corpse")) {
this->RequireCorpse = true;
--j;
} else if (!strcmp(value, "join-to-ai-force")) {
this->JoinToAiForce = true;
--j;
} else {
LuaError(l, "Unsupported summon tag: %s" _C_ value);
}
}
// Now, checking value.
if (this->UnitType == NULL) {
LuaError(l, "Use a unittype for summon (with unit-type)");
}
}
开发者ID:KroArtem,项目名称:Wyrmgus,代码行数:29,代码来源:spell_summon.cpp
示例5: clear
void CTileset::parse(lua_State *l)
{
clear();
this->pixelTileSize.x = 32;
this->pixelTileSize.y = 32;
const int args = lua_gettop(l);
for (int j = 1; j < args; ++j) {
const char *value = LuaToString(l, j);
++j;
if (!strcmp(value, "name")) {
this->Name = LuaToString(l, j);
} else if (!strcmp(value, "image")) {
this->ImageFile = LuaToString(l, j);
} else if (!strcmp(value, "size")) {
CclGetPos(l, &this->pixelTileSize.x, &this->pixelTileSize.y, j);
} else if (!strcmp(value, "slots")) {
if (!lua_istable(l, j)) {
LuaError(l, "incorrect argument");
}
parseSlots(l, j);
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
}
}
开发者ID:meiavy,项目名称:Wyrmgus,代码行数:28,代码来源:script_tileset.cpp
示例6: CclDefineRaceNames
/**
** Define race names
**
** @param l Lua state.
*/
static int CclDefineRaceNames(lua_State *l)
{
PlayerRaces.Clean();
int args = lua_gettop(l);
for (int j = 0; j < args; ++j) {
const char *value = LuaToString(l, j + 1);
if (!strcmp(value, "race")) {
++j;
if (!lua_istable(l, j + 1)) {
LuaError(l, "incorrect argument");
}
int subargs = lua_rawlen(l, j + 1);
int i = PlayerRaces.Count++;
for (int k = 0; k < subargs; ++k) {
value = LuaToString(l, j + 1, k + 1);
if (!strcmp(value, "name")) {
++k;
PlayerRaces.Name[i] = LuaToString(l, j + 1, k + 1);
} else if (!strcmp(value, "display")) {
++k;
PlayerRaces.Display[i] = LuaToString(l, j + 1, k + 1);
} else if (!strcmp(value, "visible")) {
PlayerRaces.Visible[i] = 1;
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
}
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
}
return 0;
}
开发者ID:bradc6,项目名称:Stratagus,代码行数:39,代码来源:script_player.cpp
示例7: lua_rawgeti
/* virtual */ void Spell_Polymorph::Parse(lua_State *l, int startIndex, int endIndex)
{
for (int j = startIndex; j < endIndex; ++j) {
lua_rawgeti(l, -1, j + 1);
const char *value = LuaToString(l, -1);
lua_pop(l, 1);
++j;
if (!strcmp(value, "new-form")) {
lua_rawgeti(l, -1, j + 1);
value = LuaToString(l, -1);
lua_pop(l, 1);
this->NewForm = UnitTypeByIdent(value);
if (!this->NewForm) {
this->NewForm = 0;
DebugPrint("unit type \"%s\" not found for polymorph spell.\n" _C_ value);
}
// FIXME: temp polymorphs? hard to do.
} else if (!strcmp(value, "player-neutral")) {
this->PlayerNeutral = 1;
--j;
} else if (!strcmp(value, "player-caster")) {
this->PlayerNeutral = 2;
--j;
} else {
LuaError(l, "Unsupported polymorph tag: %s" _C_ value);
}
}
// Now, checking value.
if (this->NewForm == NULL) {
LuaError(l, "Use a unittype for polymorph (with new-form)");
}
}
开发者ID:ajaykon,项目名称:Stratagus,代码行数:32,代码来源:spell_polymorph.cpp
示例8: lua_rawgeti
/* virtual */ void Spell_SpawnPortal::Parse(lua_State *l, int startIndex, int endIndex)
{
for (int j = startIndex; j < endIndex; ++j) {
lua_rawgeti(l, -1, j + 1);
const char *value = LuaToString(l, -1);
lua_pop(l, 1);
++j;
if (!strcmp(value, "portal-type")) {
lua_rawgeti(l, -1, j + 1);
value = LuaToString(l, -1);
lua_pop(l, 1);
this->PortalType = UnitTypeByIdent(value);
if (!this->PortalType) {
this->PortalType = 0;
DebugPrint("unit type \"%s\" not found for spawn-portal.\n" _C_ value);
}
} else {
LuaError(l, "Unsupported spawn-portal tag: %s" _C_ value);
}
}
// Now, checking value.
if (this->PortalType == NULL) {
LuaError(l, "Use a unittype for spawn-portal (with portal-type)");
}
}
开发者ID:ajaykon,项目名称:Stratagus,代码行数:25,代码来源:spell_spawnportal.cpp
示例9: LuaToString
/* virtual */ void Spell_AreaBombardment::Parse(lua_State *l, int startIndex, int endIndex)
{
for (int j = startIndex; j < endIndex; ++j) {
const char *value = LuaToString(l, -1, j + 1);
++j;
if (!strcmp(value, "fields")) {
this->Fields = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "shards")) {
this->Shards = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "damage")) {
this->Damage = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "start-offset-x")) {
this->StartOffsetX = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "start-offset-y")) {
this->StartOffsetY = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "missile")) {
value = LuaToString(l, -1, j + 1);
this->Missile = MissileTypeByIdent(value);
if (this->Missile == NULL) {
DebugPrint("in area-bombardement : missile %s does not exist\n" _C_ value);
}
} else {
LuaError(l, "Unsupported area-bombardment tag: %s" _C_ value);
}
}
// Now, checking value.
if (this->Missile == NULL) {
LuaError(l, "Use a missile for area-bombardment (with missile)");
}
}
开发者ID:KroArtem,项目名称:Wyrmgus,代码行数:30,代码来源:spell_areabombardment.cpp
示例10: CclDefineBurningBuilding
/**
** Define burning building missiles.
**
** @param l Lua state.
*/
static int CclDefineBurningBuilding(lua_State *l)
{
for (std::vector<BurningBuildingFrame *>::iterator i = BurningBuildingFrames.begin();
i != BurningBuildingFrames.end(); ++i) {
delete *i;
}
BurningBuildingFrames.clear();
const int args = lua_gettop(l);
for (int j = 0; j < args; ++j) {
if (!lua_istable(l, j + 1)) {
LuaError(l, "incorrect argument");
}
BurningBuildingFrame *ptr = new BurningBuildingFrame;
const int subargs = lua_rawlen(l, j + 1);
for (int k = 0; k < subargs; ++k) {
const char *value = LuaToString(l, j + 1, k + 1);
++k;
if (!strcmp(value, "percent")) {
ptr->Percent = LuaToNumber(l, j + 1, k + 1);
} else if (!strcmp(value, "missile")) {
ptr->Missile = MissileTypeByIdent(LuaToString(l, j + 1, k + 1));
}
}
BurningBuildingFrames.insert(BurningBuildingFrames.begin(), ptr);
}
return 0;
}
开发者ID:Andrettin,项目名称:Wyrmgus,代码行数:35,代码来源:script_missile.cpp
示例11: CclSavedGameInfo
/**
** Load the SavedGameInfo Header
**
** @param l Lua state.
*/
static int CclSavedGameInfo(lua_State *l)
{
const char *value;
LuaCheckArgs(l, 1);
LuaCheckTable(l, 1);
lua_pushnil(l);
while (lua_next(l, 1)) {
value = LuaToString(l, -2);
if (!strcmp(value, "SaveFile")) {
if (strcpy_s(CurrentMapPath, sizeof(CurrentMapPath), LuaToString(l, -1)) != 0) {
LuaError(l, "SaveFile too long");
}
std::string buf = StratagusLibPath;
buf += "/";
buf += LuaToString(l, -1);
if (LuaLoadFile(buf) == -1) {
DebugPrint("Load failed: %s\n" _C_ value);
}
} else if (!strcmp(value, "SyncHash")) {
SyncHash = LuaToNumber(l, -1);
} else if (!strcmp(value, "SyncRandSeed")) {
SyncRandSeed = LuaToNumber(l, -1);
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
lua_pop(l, 1);
}
return 0;
}
开发者ID:infsega,项目名称:boswars-playbook,代码行数:38,代码来源:script.cpp
示例12: LuaToString
/* virtual */ void CContentTypeLifeBar::Parse(lua_State *l)
{
for (lua_pushnil(l); lua_next(l, -2); lua_pop(l, 1)) {
const char *key = LuaToString(l, -2);
if (!strcmp(key, "Variable")) {
const char *const name = LuaToString(l, -1);
this->Index = UnitTypeVar.VariableNameLookup[name];
if (this->Index == -1) {
LuaError(l, "unknown variable '%s'" _C_ name);
}
} else if (!strcmp(key, "Height")) {
this->Height = LuaToNumber(l, -1);
} else if (!strcmp(key, "Width")) {
this->Width = LuaToNumber(l, -1);
} else {
LuaError(l, "'%s' invalid for method 'LifeBar' in DefinePanelContents" _C_ key);
}
}
// Default value and checking errors.
if (this->Height <= 0) {
this->Height = 5; // Default value.
}
if (this->Width <= 0) {
this->Width = 50; // Default value.
}
if (this->Index == -1) {
LuaError(l, "variable undefined for LifeBar");
}
}
开发者ID:KroArtem,项目名称:Wyrmgus,代码行数:29,代码来源:contenttype.cpp
示例13: CclGetProvinceData
/**
** Get province data.
**
** @param l Lua state.
*/
static int CclGetProvinceData(lua_State *l)
{
if (lua_gettop(l) < 2) {
LuaError(l, "incorrect argument");
}
std::string province_name = LuaToString(l, 1);
CProvince *province = GetProvince(province_name);
if (!province) {
LuaError(l, "Province \"%s\" doesn't exist." _C_ province_name.c_str());
}
const char *data = LuaToString(l, 2);
if (!strcmp(data, "Name")) {
lua_pushstring(l, province->Name.c_str());
return 1;
} else if (!strcmp(data, "World")) {
if (province->World != nullptr) {
lua_pushstring(l, province->World->Ident.c_str());
} else {
lua_pushstring(l, "");
}
return 1;
} else if (!strcmp(data, "Water")) {
lua_pushboolean(l, province->Water);
return 1;
} else if (!strcmp(data, "Coastal")) {
lua_pushboolean(l, province->Coastal);
return 1;
} else {
LuaError(l, "Invalid field: %s" _C_ data);
}
return 0;
}
开发者ID:Andrettin,项目名称:Wyrmgus,代码行数:39,代码来源:script_province.cpp
示例14: LuaError
/**
** Parse an animation
*/
static CAnimation *ParseAnimation(lua_State *l, int idx)
{
if (!lua_istable(l, idx)) {
LuaError(l, "incorrect argument");
}
const int args = lua_rawlen(l, idx);
if (args == 0) {
return NULL;
}
Labels.clear();
LabelsLater.clear();
const char *str = LuaToString(l, idx, 1);
CAnimation *firstAnim = ParseAnimationFrame(l, str);
CAnimation *prev = firstAnim;
for (int j = 1; j < args; ++j) {
const char *str = LuaToString(l, idx, j + 1);
CAnimation *anim = ParseAnimationFrame(l, str);
prev->Next = anim;
prev = anim;
}
prev->Next = firstAnim;
FixLabels(l);
return firstAnim;
}
开发者ID:Clemenshemmerling,项目名称:Stratagus,代码行数:30,代码来源:animation.cpp
示例15: CclSpellAutocast
/**
** Parse the Condition for spell.
**
** @param l Lua state.
** @param autocast pointer to autocast to fill with data.
**
** @note: autocast must be allocated. All data already in is LOST.
*/
static void CclSpellAutocast(lua_State *l, AutoCastInfo *autocast)
{
if (!lua_istable(l, -1)) {
LuaError(l, "incorrect argument");
}
const int args = lua_rawlen(l, -1);
for (int j = 0; j < args; ++j) {
const char *value = LuaToString(l, -1, j + 1);
++j;
if (!strcmp(value, "range")) {
autocast->Range = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "min-range")) {
autocast->MinRange = LuaToNumber(l, -1, j + 1);
} else if (!strcmp(value, "position-autocast")) {
lua_rawgeti(l, -1, j + 1);
autocast->PositionAutoCast = new LuaCallback(l, -1);
lua_pop(l, 1);
} else if (!strcmp(value, "combat")) {
autocast->Combat = Ccl2Condition(l, LuaToString(l, -1, j + 1));
} else if (!strcmp(value, "attacker")) {
autocast->Attacker = Ccl2Condition(l, LuaToString(l, -1, j + 1));
} else if (!strcmp(value, "corpse")) {
autocast->Corpse = Ccl2Condition(l, LuaToString(l, -1, j + 1));
} else if (!strcmp(value, "priority")) {
lua_rawgeti(l, -1, j + 1);
if (!lua_istable(l, -1) || lua_rawlen(l, -1) != 2) {
LuaError(l, "incorrect argument");
}
lua_rawgeti(l, -1, 1);
std::string var = LuaToString(l, -1);
int index = UnitTypeVar.VariableNameLookup[var.c_str()];// User variables
if (index == -1) {
if (!strcmp(var.c_str(), "Distance")) {
index = ACP_DISTANCE;
} else {
fprintf(stderr, "Bad variable name '%s'\n", var.c_str());
Exit(1);
}
}
autocast->PriorytyVar = index;
lua_pop(l, 1);
autocast->ReverseSort = LuaToBoolean(l, -1, 2);
lua_pop(l, 1);
} else if (!strcmp(value, "condition")) {
if (!autocast->Condition) {
autocast->Condition = new ConditionInfo;
}
lua_rawgeti(l, -1, j + 1);
CclSpellCondition(l, autocast->Condition);
lua_pop(l, 1);
} else {
LuaError(l, "Unsupported autocast tag: %s" _C_ value);
}
}
}
开发者ID:meiavy,项目名称:Wyrmgus,代码行数:64,代码来源:script_spell.cpp
示例16: CclLoad
/**
** Load a file and execute it.
**
** @param l Lua state.
**
** @return 0 in success, else exit.
*/
static int CclLoad(lua_State *l)
{
char buf[1024];
LuaCheckArgs(l, 1);
LibraryFileName(LuaToString(l, 1), buf, sizeof(buf));
if (LuaLoadFile(buf) == -1) {
DebugPrint("Load failed: %s\n" _C_ LuaToString(l, 1));
}
return 0;
}
开发者ID:infsega,项目名称:boswars-playbook,代码行数:18,代码来源:script.cpp
示例17: CclSpellMissileLocation
/**
** Parse the missile location description for a spell action.
**
** @param l Lua state.
** @param location Pointer to missile location description.
**
** @note This is only here to avoid code duplication. You don't have
** any reason to USE this:)
*/
static void CclSpellMissileLocation(lua_State *l, SpellActionMissileLocation *location)
{
const char *value;
int args;
int j;
Assert(location != NULL);
if (!lua_istable(l, -1)) {
LuaError(l, "incorrect argument");
}
args = lua_objlen(l, -1);
j = 0;
for (j = 0; j < args; ++j) {
lua_rawgeti(l, -1, j + 1);
value = LuaToString(l, -1);
lua_pop(l, 1);
++j;
if (!strcmp(value, "base")) {
lua_rawgeti(l, -1, j + 1);
value = LuaToString(l, -1);
lua_pop(l, 1);
if (!strcmp(value, "caster")) {
location->Base = LocBaseCaster;
} else if (!strcmp(value, "target")) {
location->Base = LocBaseTarget;
} else {
LuaError(l, "Unsupported missile location base flag: %s" _C_ value);
}
} else if (!strcmp(value, "add-x")) {
lua_rawgeti(l, -1, j + 1);
location->AddX = LuaToNumber(l, -1);
lua_pop(l, 1);
} else if (!strcmp(value, "add-y")) {
lua_rawgeti(l, -1, j + 1);
location->AddY = LuaToNumber(l, -1);
lua_pop(l, 1);
} else if (!strcmp(value, "add-rand-x")) {
lua_rawgeti(l, -1, j + 1);
location->AddRandX = LuaToNumber(l, -1);
lua_pop(l, 1);
} else if (!strcmp(value, "add-rand-y")) {
lua_rawgeti(l, -1, j + 1);
location->AddRandY = LuaToNumber(l, -1);
lua_pop(l, 1);
} else {
LuaError(l, "Unsupported missile location description flag: %s" _C_ value);
}
}
}
开发者ID:landswellsong,项目名称:Stratagus,代码行数:60,代码来源:script_spell.cpp
示例18: CclDefineRaceNames
/**
** Define race names
**
** @param l Lua state.
*/
static int CclDefineRaceNames(lua_State *l)
{
int i;
int j;
int k;
int args;
int subargs;
const char *value;
PlayerRaces.Count = 0;
args = lua_gettop(l);
for (j = 0; j < args; ++j) {
value = LuaToString(l, j + 1);
if (!strcmp(value, "race")) {
++j;
if (!lua_istable(l, j + 1)) {
LuaError(l, "incorrect argument");
}
subargs = luaL_getn(l, j + 1);
i = PlayerRaces.Count++;
PlayerRaces.Name[i] = NULL;
PlayerRaces.Display[i] = NULL;
PlayerRaces.Visible[i] = 0;
for (k = 0; k < subargs; ++k) {
lua_rawgeti(l, j + 1, k + 1);
value = LuaToString(l, -1);
lua_pop(l, 1);
if (!strcmp(value, "name")) {
++k;
lua_rawgeti(l, j + 1, k + 1);
PlayerRaces.Name[i] = new_strdup(LuaToString(l, -1));
lua_pop(l, 1);
} else if (!strcmp(value, "display")) {
++k;
lua_rawgeti(l, j + 1, k + 1);
PlayerRaces.Display[i] = new_strdup(LuaToString(l, -1));
lua_pop(l, 1);
} else if (!strcmp(value, "visible")) {
PlayerRaces.Visible[i] = 1;
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
}
} else {
LuaError(l, "Unsupported tag: %s" _C_ value);
}
}
return 0;
}
开发者ID:k1643,项目名称:StratagusAI,代码行数:55,代码来源:script_player.cpp
示例19: CclLoadTileModels
/**
** Load the lua file which will define the tile models
**
** @param l Lua state.
*/
static int CclLoadTileModels(lua_State *l)
{
char buf[1024];
if (lua_gettop(l) != 1) {
LuaError(l, "incorrect argument");
}
strcpy_s(Map.TileModelsFileName, sizeof(Map.TileModelsFileName), LuaToString(l, 1));
LibraryFileName(Map.TileModelsFileName, buf, sizeof(buf));
if (LuaLoadFile(buf) == -1) {
DebugPrint("Load failed: %s\n" _C_ LuaToString(l, 1));
}
return 0;
}
开发者ID:landswellsong,项目名称:Stratagus,代码行数:19,代码来源:script_map.cpp
示例20: CclDefinePanelContents
/**
** Define the Panels.
** Define what is shown in the panel(text, icon, variables)
**
** @param l Lua state.
** @return 0.
*/
static int CclDefinePanelContents(lua_State *l)
{
const int nargs = lua_gettop(l);
for (int i = 0; i < nargs; i++) {
Assert(lua_istable(l, i + 1));
CUnitInfoPanel *infopanel = new CUnitInfoPanel;
for (lua_pushnil(l); lua_next(l, i + 1); lua_pop(l, 1)) {
const char *key = LuaToString(l, -2);
if (!strcmp(key, "Ident")) {
infopanel->Name = LuaToString(l, -1);
} else if (!strcmp(key, "Pos")) {
CclGetPos(l, &infopanel->PosX, &infopanel->PosY);
} else if (!strcmp(key, "DefaultFont")) {
infopanel->DefaultFont = CFont::Get(LuaToString(l, -1));
} else if (!strcmp(key, "Condition")) {
infopanel->Condition = ParseConditionPanel(l);
} else if (!strcmp(key, "Contents")) {
Assert(lua_istable(l, -1));
for (size_t j = 0; j < lua_rawlen(l, -1); j++, lua_pop(l, 1)) {
lua_rawgeti(l, -1, j + 1);
infopanel->Contents.push_back(CclParseContent(l));
}
} else {
LuaError(l, "'%s' invalid for DefinePanelContents" _C_ key);
}
}
for (std::vector<CContentType *>::iterator content = infopanel->Contents.begin();
content != infopanel->Contents.end(); ++content) { // Default value for invalid value.
(*content)->Pos.x += infopanel->PosX;
(*content)->Pos.y += infopanel->PosY;
}
size_t j;
for (j = 0; j < UI.InfoPanelContents.size(); ++j) {
if (infopanel->Name == UI.InfoPanelContents[j]->Name) {
DebugPrint("Redefinition of Panel '%s'\n" _C_ infopanel->Name.c_str());
delete UI.InfoPanelContents[j];
UI.InfoPanelContents[j] = infopanel;
break;
}
}
if (j == UI.InfoPanelContents.size()) {
UI.InfoPanelContents.push_back(infopanel);
}
}
return 0;
}
开发者ID:realhidden,项目名称:stratagus,代码行数:56,代码来源:script_ui.cpp
注:本文中的LuaToString函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论