Bazaar developer reference

CvWorldBuilderMapLoader::LoadModData(lua_State *)

Defined in
CvWorldBuilderMapLoader.cpp, line 1417
Class
CvWorldBuilderMapLoader
Hook name
CivHooks::CvWorldBuilderMapLoader_LoadModData

Hooks

static bool BeforeCvWorldBuilderMapLoader_LoadModData(lua_State* L, int& result);static void AfterCvWorldBuilderMapLoader_LoadModData(lua_State* L, int& result);static int ReplaceCvWorldBuilderMapLoader_LoadModData(int (*original)(lua_State*), lua_State* L);CivRegisterBefore<CivHooks::CvWorldBuilderMapLoader_LoadModData>(host, &BeforeCvWorldBuilderMapLoader_LoadModData);CivRegisterAfter<CivHooks::CvWorldBuilderMapLoader_LoadModData>(host, &AfterCvWorldBuilderMapLoader_LoadModData);CivRegisterReplace<CivHooks::CvWorldBuilderMapLoader_LoadModData>(host, &ReplaceCvWorldBuilderMapLoader_LoadModData);

Code

1417int CvWorldBuilderMapLoader::LoadModData(lua_State* L)1418{1419	if(L == NULL)1420	{1421		FAssertMsg(L, "Seriously, you really need a lua state for this.");1422		return 0;1423	}14241425	const int iTop = lua_gettop(L);14261427	lua_getglobal(L, "MapModData");1428	bool bFoundTable = lua_istable(L, -1);14291430	FAssertMsg(bFoundTable, "Unable to find mod data table");1431	if(!bFoundTable)1432	{1433		lua_settop(L, iTop);1434		return 0;1435	}14361437	const int iModDataTable = iTop + 1;14381439	ModType& kGlobalsDataType = sg_kSave.m_kModData.m_kMapModData;1440	const uint uiGlobalsCount = kGlobalsDataType.GetFieldCount();1441	if(uiGlobalsCount > 0)1442	{1443		ModDataEntry kEntry = sg_kSave.m_kModData.GetMapDataEntry();14441445		lua_pushstring(L, "Globals");1446		lua_createtable(L, 0, uiGlobalsCount);1447		for(uint uiField = 0; uiField < uiGlobalsCount; ++uiField)1448		{1449			const char* szFieldName = kGlobalsDataType.GetFieldName(uiField);1450			lua_pushstring(L, szFieldName);14511452			switch(kGlobalsDataType.GetFieldType(uiField))1453			{1454			case ModType::TYPE_BOOL:1455			{1456				const bool bValue = kEntry.GetFieldAsBool(uiField);1457				lua_pushboolean(L, bValue);1458			}1459			break;14601461			case ModType::TYPE_FLOAT:1462			{1463				const float fValue = kEntry.GetFieldAsFloat(uiField);1464				lua_pushnumber(L, fValue);1465			}1466			break;14671468			case ModType::TYPE_STRING:1469			{1470				const char* szField = kEntry.GetFieldAsString(uiField);1471				lua_pushstring(L, szField);1472			}1473			break;14741475			case ModType::TYPE_ENUM:1476			{1477				const ModEnum* pkEnum = sg_kSave.m_kModData.m_kPlotModData.GetFieldEnumType(uiField);1478				if(pkEnum != NULL)1479				{1480					int iValue = kEntry.GetFieldAsInt(uiField);1481					const char* szMember = pkEnum->GetMember((uint)iValue);1482					if(szMember == NULL) szMember = "";1483					lua_pushstring(L, szMember);1484				}1485				else1486				{1487					lua_pushstring(L, "");1488				}1489			}1490			}14911492			lua_rawset(L, -3);1493		}14941495		lua_rawset(L, iModDataTable);1496	}1497	else1498	{1499		lua_pushstring(L, "Globals");1500		lua_pushnil(L);1501		lua_rawset(L, iModDataTable);1502	}15031504	ModType& kPlotDataType = sg_kSave.m_kModData.m_kPlotModData;1505	const uint uiFieldCount = kPlotDataType.GetFieldCount();1506	if(uiFieldCount > 0)1507	{1508		const int iFieldStart = lua_gettop(L) + 1;1509		for(uint uiField = 0; uiField < uiFieldCount; ++uiField)1510		{1511			const char* szFieldName = kPlotDataType.GetFieldName(uiField);1512			lua_pushstring(L, szFieldName);15131514			switch(kPlotDataType.GetFieldType(uiField))1515			{1516			case ModType::TYPE_BOOL:1517			{1518				const bool bValue = kPlotDataType.GetFieldDefaultAsBool(uiField);1519				lua_pushboolean(L, bValue);1520			}1521			break;15221523			case ModType::TYPE_FLOAT:1524			{1525				const float fValue = kPlotDataType.GetFieldDefaultAsFloat(uiField);1526				lua_pushnumber(L, fValue);1527			}1528			break;15291530			case ModType::TYPE_STRING:1531			{1532				const char* szField = kPlotDataType.GetFieldDefaultAsString(uiField);1533				lua_pushstring(L, szField);1534			}1535			break;15361537			case ModType::TYPE_ENUM:1538			{1539				int iValue = kPlotDataType.GetFieldDefaultAsInt(uiField);1540				const ModEnum* pkEnum = sg_kSave.m_kModData.m_kPlotModData.GetFieldEnumType(uiField);1541				if(pkEnum != NULL)1542				{1543					const char* szMember = pkEnum->GetMember((uint)iValue);1544					if(szMember == NULL) szMember = "";1545					lua_pushstring(L, szMember);1546				}1547				else1548				{1549					lua_pushstring(L, "");1550				}1551			}1552			}1553		}15541555		const uint uiMapWidth = sg_kSave.GetWidth();1556		const uint uiMapHeight = sg_kSave.GetHeight();15571558		lua_pushstring(L, "Plots");1559		lua_createtable(L, uiMapWidth, 1);1560		for(uint x = 0; x < uiMapWidth; ++x)1561		{1562			lua_createtable(L, uiMapHeight, 1);1563			for(uint y = 0; y < uiMapHeight; ++y)1564			{1565				lua_createtable(L, 0, uiFieldCount);1566				ModDataEntry kPlot = sg_kSave.m_kModData.GetPlotDataEntry(x + y * uiMapWidth);1567				for(uint uiField = 0; uiField < uiFieldCount; ++uiField)1568				{1569					if(kPlot.IsFieldDefaultValue(uiField))1570					{1571						lua_pushvalue(L, iFieldStart + 2 * uiField);1572						lua_pushvalue(L, iFieldStart + 2 * uiField + 1);1573						lua_rawset(L, -3);1574					}1575					else1576					{1577						switch(sg_kSave.m_kModData.m_kPlotModData.GetFieldType(uiField))1578						{1579						case ModType::TYPE_BOOL:1580						{1581							const bool bValue = kPlot.GetFieldAsBool(uiField);1582							lua_pushvalue(L, iFieldStart + 2 * uiField);1583							lua_pushboolean(L, bValue);1584							lua_rawset(L, -3);1585						}1586						break;15871588						case ModType::TYPE_FLOAT:1589						{1590							const float fValue = kPlot.GetFieldAsFloat(uiField);1591							lua_pushvalue(L, iFieldStart + 2 * uiField);1592							lua_pushnumber(L, fValue);1593							lua_rawset(L, -3);1594						}1595						break;15961597						case ModType::TYPE_STRING:1598						{1599							const char* szField = kPlot.GetFieldAsString(uiField);1600							lua_pushvalue(L, iFieldStart + 2 * uiField);1601							lua_pushstring(L, szField);1602							lua_rawset(L, -3);1603						}1604						break;16051606						case ModType::TYPE_ENUM:1607						{1608							int iValue = kPlot.GetFieldAsInt(uiField);1609							const ModEnum* pkEnum = kPlotDataType.GetFieldEnumType(uiField);1610							if(pkEnum != NULL)1611							{1612								const char* szMember = pkEnum->GetMember((uint)iValue);1613								if(szMember != NULL)1614								{1615									lua_pushvalue(L, iFieldStart + 2 * uiField);1616									lua_pushstring(L, szMember);1617									lua_rawset(L, -3);1618								}1619							}1620						}1621						}1622					}1623				}16241625				lua_rawseti(L, -2, y);1626			}16271628			lua_rawseti(L, -2, x);1629		}16301631		lua_rawset(L, iModDataTable);1632	}1633	else1634	{1635		lua_pushstring(L, "Plots");1636		lua_pushnil(L);1637		lua_rawset(L, iModDataTable);1638	}16391640	lua_settop(L, iTop);16411642	return 0;1643}

Calls

Called by