Bazaar developer reference

CvReplayInfo::createInfo()

Defined in
CvReplayInfo.cpp, line 59
Class
CvReplayInfo
Hook name
CivHooks::CvReplayInfo_createInfo

Hooks

static bool BeforeCvReplayInfo_createInfo(CvReplayInfo* self);static void AfterCvReplayInfo_createInfo(CvReplayInfo* self);static void ReplaceCvReplayInfo_createInfo(void (*original)(CvReplayInfo*), CvReplayInfo* self);CivRegisterBefore<CivHooks::CvReplayInfo_createInfo>(host, &BeforeCvReplayInfo_createInfo);CivRegisterAfter<CivHooks::CvReplayInfo_createInfo>(host, &AfterCvReplayInfo_createInfo);CivRegisterReplace<CivHooks::CvReplayInfo_createInfo>(host, &ReplaceCvReplayInfo_createInfo);

Code

59void CvReplayInfo::createInfo()60{61	CvGame& game = GC.getGame();6263	const PlayerTypes eActivePlayer = game.getActivePlayer();6465	m_strMapScriptName = CvPreGame::mapScriptName();66	m_eWorldSize = CvPreGame::worldSize();67	m_eClimate = CvPreGame::climate();68	m_eSeaLevel = CvPreGame::seaLevel();69	m_eEra = CvPreGame::era();70	m_eGameSpeed = game.getGameSpeedType();7172	m_listGameOptions.clear();73	for(int i = 0; i < NUM_GAMEOPTION_TYPES; i++)74	{75		GameOptionTypes eOption = (GameOptionTypes)i;76		if(game.isOption(eOption))77		{78			m_listGameOptions.push_back(eOption);79		}80	}8182	m_listVictoryTypes.clear();83	for(int i = 0; i < GC.getNumVictoryInfos(); i++)84	{85		VictoryTypes eVictory = (VictoryTypes)i;86		if(game.isVictoryValid(eVictory))87		{88			m_listVictoryTypes.push_back(eVictory);89		}90	}9192	m_eVictoryType = NO_VICTORY;93	m_iNormalizedScore = 0;94	if(NO_PLAYER != eActivePlayer)95	{96		CvPlayer& player = GET_PLAYER(eActivePlayer);97		if(game.getWinner() == player.getTeam())98		{99			m_eVictoryType = game.getVictory();100		}101102		m_iNormalizedScore = player.GetScore(true, player.getTeam() == game.getWinner());103	}104105	//m_eGameType = CvPreGame::getGameType();106107	m_iInitialTurn = game.getStartTurn();108	m_iStartYear = game.getStartYear();109	m_iFinalTurn = game.getGameTurn();110	CvGameTextMgr::setYearStr(m_strFinalDate, m_iFinalTurn, false, game.getCalendar(), game.getStartYear(), game.getGameSpeedType());111112	m_eCalendar = game.getCalendar();113114	m_dataSetMap.clear();115	m_listPlayerDataSets.clear();116	m_listPlayerInfo.clear();117	m_listPlots.clear();118119	std::map<int, int> mapPlayers;120	mapPlayers[-1] = -1;	//account for NO_PLAYER.121122	m_iActivePlayer = -1;123	int iPlayerIndex = 0;124	for(int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; iPlayer++)125	{126		CvPlayer& player = GET_PLAYER((PlayerTypes)iPlayer);127		if(player.isEverAlive())128		{129			//Ensure that final turn is stored.130			player.GatherPerTurnReplayStats(m_iFinalTurn);131132			mapPlayers[iPlayer] = iPlayerIndex;133			if(iPlayer == game.getActivePlayer())134			{135				m_iActivePlayer = iPlayerIndex;136			}137			++iPlayerIndex;138139			PlayerInfo playerInfo;140			playerInfo.m_eLeader = player.getLeaderType();141			playerInfo.m_eCivilization = player.getCivilizationType();142143			playerInfo.m_eDifficulty = player.getHandicapType();144			playerInfo.m_strCustomLeaderName = player.getName();145			playerInfo.m_strCustomCivilizationName = player.getCivilizationDescription();146			playerInfo.m_strCustomCivilizationShortName = player.getCivilizationShortDescription();147			playerInfo.m_strCustomCivilizationAdjective = player.getCivilizationAdjective();148			playerInfo.m_ePlayerColor = player.getPlayerColor();149150151			TurnDataSets dataSet(m_dataSetMap.size());152153			unsigned int uiNumDataSets = player.getNumReplayDataSets();154			for(unsigned int uiPlayerDataSet = 0; uiPlayerDataSet < uiNumDataSets; ++uiPlayerDataSet)155			{156				// First, Locate the index of the dataset157				std::string playerDataSetName = player.getReplayDataSetName(uiPlayerDataSet);158				unsigned int uiDataSet = 0;159				bool bFound = false;160				for(uiDataSet = 0; uiDataSet < m_dataSetMap.size(); ++uiDataSet)161				{162					const std::string& dataSetName = m_dataSetMap[uiDataSet];163					if(dataSetName == playerDataSetName)164					{165						bFound = true;166						break;167					}168				}169170				// Add a new index if one doesn't exist.171				if(!bFound)172				{173					m_dataSetMap.push_back(playerDataSetName);174					dataSet.push_back(TurnData());175					uiDataSet = m_dataSetMap.size() - 1;176				}177178				CvPlayer::TurnData playerData = player.getReplayDataHistory(uiPlayerDataSet);179				TurnData turnData;180181				for(CvPlayer::TurnData::iterator it = playerData.begin(); it != playerData.end(); ++it)182				{183					turnData[(*it).first - m_iInitialTurn] = (*it).second;184				}185186				dataSet[uiDataSet] = turnData;187			}188189			m_listPlayerDataSets.push_back(dataSet);190			m_listPlayerInfo.push_back(playerInfo);191		}192	}193194	m_listReplayMessages.clear();195	const uint nMessages = game.getNumReplayMessages();196	m_listReplayMessages.reserve(nMessages);197198	for(uint i = 0; i < nMessages; ++i)199	{200		const CvReplayMessage* pMessage = game.getReplayMessage(i);201		if(pMessage)202		{203			CvReplayMessage modifiedMessage = (*pMessage);204			modifiedMessage.setPlayer((PlayerTypes)mapPlayers[modifiedMessage.getPlayer()]);205206			m_listReplayMessages.push_back(modifiedMessage);207		}208	}209210	CvMap& kMap = GC.getMap();211212	m_iMapWidth = kMap.getGridWidth();213	m_iMapHeight = kMap.getGridHeight();214215	int numPlots = kMap.numPlots();216	m_listPlots.clear();217	m_listPlots.reserve(numPlots);218219	for(int i = 0; i < numPlots; i++)220	{221		PlotState plotState;222223		CvPlot* pkPlot = kMap.plotByIndexUnchecked(i);224		plotState.m_ePlotType = pkPlot->getPlotType();225		plotState.m_eTerrain = pkPlot->getTerrainType();226		plotState.m_eFeature = pkPlot->getFeatureType();227		plotState.m_bNEOfRiver = pkPlot->isNEOfRiver();228		plotState.m_bWOfRiver = pkPlot->isWOfRiver();229		plotState.m_bNWOfRiver = pkPlot->isNWOfRiver();230231		PlotStatePerTurn plotStatePerTurn;232		plotStatePerTurn[m_iFinalTurn] = plotState;233234		m_listPlots.push_back(plotStatePerTurn);235	}236}

Calls

Called by