Hooks
static bool BeforeCvCityManager_cpp_AddToSortedList(std::vector<CvCity *> & kCityList, int iFromX, int iFromY, CvCity * pkAddCity);static void AfterCvCityManager_cpp_AddToSortedList(std::vector<CvCity *> & kCityList, int iFromX, int iFromY, CvCity * pkAddCity);static void ReplaceCvCityManager_cpp_AddToSortedList(void (*original)(std::vector<CvCity *> &, int, int, CvCity *), std::vector<CvCity *> & kCityList, int iFromX, int iFromY, CvCity * pkAddCity);CivRegisterBefore<CivHooks::CvCityManager_cpp_AddToSortedList>(host, &BeforeCvCityManager_cpp_AddToSortedList);CivRegisterAfter<CivHooks::CvCityManager_cpp_AddToSortedList>(host, &AfterCvCityManager_cpp_AddToSortedList);CivRegisterReplace<CivHooks::CvCityManager_cpp_AddToSortedList>(host, &ReplaceCvCityManager_cpp_AddToSortedList);
Code
32static void AddToSortedList(CvCityManager::CityList &kCityList, int iFromX, int iFromY, CvCity* pkAddCity)33{34 if (kCityList.size() == 0)35 {36 // First one37 kCityList.push_back(pkAddCity);38 }39 else40 {41 // Add to the pre-sorted list.42 int iAddDistance = plotDistance(iFromX, iFromY, pkAddCity->getX(), pkAddCity->getY());43 bool bAdded = false;44 for (CvCityManager::CityList::iterator itrNearby = kCityList.begin(); itrNearby != kCityList.end(); ++itrNearby)45 {46 CvCity* pkNearbyCity = (*itrNearby);47 int iDistance = plotDistance(iFromX, iFromY, pkNearbyCity->getX(), pkNearbyCity->getY());48 if (iAddDistance <= iDistance)49 {50 kCityList.insert(itrNearby, pkAddCity);51 bAdded = true;52 break;53 }54 }5556 if (!bAdded)57 kCityList.push_back(pkAddCity);58 }59}