Bazaar developer reference

CvPlayerCulture::FillBuilding(vector<CvGreatWorkBuildingInMyEmpire>::const_iterator, vector<CvGreatWorkInMyEmpire> &, vector<CvGreatWorkInMyEmpire> &)

Defined in
CvCultureClasses.cpp, line 1896
Class
CvPlayerCulture
Hook name
CivHooks::CvPlayerCulture_FillBuilding

Hooks

static bool BeforeCvPlayerCulture_FillBuilding(CvPlayerCulture* self, vector<CvGreatWorkBuildingInMyEmpire>::const_iterator buildingIt, vector<CvGreatWorkInMyEmpire> & works1, vector<CvGreatWorkInMyEmpire> & works2, bool& result);static void AfterCvPlayerCulture_FillBuilding(CvPlayerCulture* self, vector<CvGreatWorkBuildingInMyEmpire>::const_iterator buildingIt, vector<CvGreatWorkInMyEmpire> & works1, vector<CvGreatWorkInMyEmpire> & works2, bool& result);static bool ReplaceCvPlayerCulture_FillBuilding(bool (*original)(CvPlayerCulture*, vector<CvGreatWorkBuildingInMyEmpire>::const_iterator, vector<CvGreatWorkInMyEmpire> &, vector<CvGreatWorkInMyEmpire> &), CvPlayerCulture* self, vector<CvGreatWorkBuildingInMyEmpire>::const_iterator buildingIt, vector<CvGreatWorkInMyEmpire> & works1, vector<CvGreatWorkInMyEmpire> & works2);CivRegisterBefore<CivHooks::CvPlayerCulture_FillBuilding>(host, &BeforeCvPlayerCulture_FillBuilding);CivRegisterAfter<CivHooks::CvPlayerCulture_FillBuilding>(host, &AfterCvPlayerCulture_FillBuilding);CivRegisterReplace<CivHooks::CvPlayerCulture_FillBuilding>(host, &ReplaceCvPlayerCulture_FillBuilding);

Code

1895/// Simple version of ThemeBuilding() which just fills in a building with ANY Great Works, not ones that provide a theming bonus1896bool CvPlayerCulture::FillBuilding(vector<CvGreatWorkBuildingInMyEmpire>::const_iterator buildingIt, vector<CvGreatWorkInMyEmpire> &works1, vector<CvGreatWorkInMyEmpire> &works2)1897{1898	// CUSTOMLOG("Fill building %i in city %i", ((int) (buildingIt->m_eBuilding)), buildingIt->m_iCityID);1899	CvBuildingEntry *pkEntry = GC.getBuildingInfo(buildingIt->m_eBuilding);1900	if (!pkEntry)1901	{1902		return false;1903	}19041905	int iCountSlots = pkEntry->GetGreatWorkCount();1906	if (iCountSlots < 1)1907	{1908		return false;19091910	}19111912	vector<CvGreatWorkInMyEmpire> worksToConsider;1913	vector<int> aWorksChosen;19141915	worksToConsider = works1;1916	vector<CvGreatWorkInMyEmpire>::const_iterator it;1917	for (it = works2.begin(); it != works2.end(); it++)1918	{1919		worksToConsider.push_back(*it);1920	}19211922	it = worksToConsider.begin();1923	for (int iI = 0; iI < iCountSlots && it != worksToConsider.end(); iI++, it++)1924	{1925		aWorksChosen.push_back(worksToConsider[iI].m_iGreatWorkIndex);1926		// CUSTOMLOG("  filling slot %i with Great Work %i", iI, worksToConsider[iI].m_iGreatWorkIndex);1927		MoveWorkIntoSlot(worksToConsider[iI], buildingIt->m_iCityID, buildingIt->m_eBuilding, iI);1928	}19291930	// Remove these works from those to consider later1931	if (aWorksChosen.size() > 0)1932	{1933		vector<CvGreatWorkInMyEmpire>::iterator it2;1934		vector<CvGreatWorkInMyEmpire> tempWorks;19351936		tempWorks.clear();1937		for (it2 = works1.begin(); it2 != works1.end(); it2++)1938		{1939			// Copy it over if not chosen, updating its location1940			if (find(aWorksChosen.begin(), aWorksChosen.end(), it2->m_iGreatWorkIndex) == aWorksChosen.end())1941			{1942				GetGreatWorkLocation(it2->m_iGreatWorkIndex, it2->m_iCityID, it2->m_eBuilding, it2->m_iSlot);1943				tempWorks.push_back(*it2);1944			}1945		}1946		works1 = tempWorks;19471948		tempWorks.clear();1949		for (it2 = works2.begin(); it2 != works2.end(); it2++)1950		{1951			// Copy it over if not chosen, updating its location1952			if (find(aWorksChosen.begin(), aWorksChosen.end(), it2->m_iGreatWorkIndex) == aWorksChosen.end())1953			{1954				GetGreatWorkLocation(it2->m_iGreatWorkIndex, it2->m_iCityID, it2->m_eBuilding, it2->m_iSlot);1955				tempWorks.push_back(*it2);1956			}1957		}1958		works2 = tempWorks;1959	}1960	return true;1961}

Calls

Called by