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}