/** ** Define the Panels. ** Define what is shown in the panel(text, icon, variables) ** ** @param l Lua state. ** @return 0. */ static int CclDefinePopup(lua_State *l) { Assert(lua_istable(l, 1)); CPopup *popup = new CPopup; for (lua_pushnil(l); lua_next(l, 1); lua_pop(l, 1)) { const char *key = LuaToString(l, -2); if (!strcmp(key, "Ident")) { popup->Ident = LuaToString(l, -1); } else if (!strcmp(key, "DefaultFont")) { popup->DefaultFont = CFont::Get(LuaToString(l, -1)); } else if (!strcmp(key, "BackgroundColor")) { popup->BackgroundColor = LuaToUnsignedNumber(l, -1); } else if (!strcmp(key, "BorderColor")) { popup->BorderColor = LuaToUnsignedNumber(l, -1); } else if (!strcmp(key, "Margin")) { CclGetPos(l, &popup->MarginX, &popup->MarginY); } else if (!strcmp(key, "MinWidth")) { popup->MinWidth = LuaToNumber(l, -1); } else if (!strcmp(key, "MinHeight")) { popup->MinHeight = LuaToNumber(l, -1); } 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); popup->Contents.push_back(CPopupContentType::ParsePopupContent(l)); } } else { LuaError(l, "'%s' invalid for DefinePopups" _C_ key); } } for (size_t j = 0; j < UI.ButtonPopups.size(); ++j) { if (popup->Ident == UI.ButtonPopups[j]->Ident) { DebugPrint("Redefinition of Popup '%s'\n" _C_ popup->Ident.c_str()); delete UI.ButtonPopups[j]; UI.ButtonPopups[j] = popup; return 0; } } UI.ButtonPopups.push_back(popup); return 0; }
/** ** Parse log */ static int CclLog(lua_State *l) { LogEntry *log; LogEntry **last; const char *value; LuaCheckArgs(l, 1); if (!lua_istable(l, 1)) { LuaError(l, "incorrect argument"); } Assert(CurrentReplay); log = new LogEntry; log->UnitNumber = -1; log->PosX = -1; log->PosY = -1; log->DestUnitNumber = -1; log->Num = -1; lua_pushnil(l); while (lua_next(l, 1)) { value = LuaToString(l, -2); if (!strcmp(value, "GameCycle")) { log->GameCycle = LuaToNumber(l, -1); //Wyrmgus start } else if (!strcmp(value, "GameTimeOfDay")) { log->GameTimeOfDay = LuaToNumber(l, -1); //Wyrmgus end } else if (!strcmp(value, "UnitNumber")) { log->UnitNumber = LuaToNumber(l, -1); } else if (!strcmp(value, "UnitIdent")) { log->UnitIdent = LuaToString(l, -1); } else if (!strcmp(value, "Action")) { log->Action = LuaToString(l, -1); } else if (!strcmp(value, "Flush")) { log->Flush = LuaToNumber(l, -1); } else if (!strcmp(value, "PosX")) { log->PosX = LuaToNumber(l, -1); } else if (!strcmp(value, "PosY")) { log->PosY = LuaToNumber(l, -1); } else if (!strcmp(value, "DestUnitNumber")) { log->DestUnitNumber = LuaToNumber(l, -1); } else if (!strcmp(value, "Value")) { log->Value = LuaToString(l, -1); } else if (!strcmp(value, "Num")) { log->Num = LuaToNumber(l, -1); } else if (!strcmp(value, "SyncRandSeed")) { log->SyncRandSeed = LuaToUnsignedNumber(l, -1); } else { LuaError(l, "Unsupported key: %s" _C_ value); } lua_pop(l, 1); } // Append to linked list last = &CurrentReplay->Commands; while (*last) { last = &(*last)->Next; } *last = log; return 0; }