FAssertMsg(NO_PLAYER != city.getOwnerINLINE(), "City must have an owner");
CvYieldInfo& info = GC.getYieldInfo(YIELD_FOOD);
bool bNeedSubtotal = false;
int iBaseRate = 0;
int i;
// Worked Tiles
int iTileFood = 0;
for (i = 0; i < NUM_CITY_PLOTS; i++)
{
if (city.isWorkingPlot(i))
{
CvPlot* pPlot = city.getCityIndexPlot(i);
if (pPlot != NULL)
{
iTileFood += pPlot->getYield(YIELD_FOOD);
}
}
}
if (iTileFood != 0)
{
szBuffer.append(gDLL->getText("TXT_KEY_MISC_HELP_WORKED_TILES_YIELD", iTileFood, info.getChar()));
iBaseRate += iTileFood;
}
// Trade
int iTradeFood = city.getTradeYield(YIELD_FOOD);
if (iTradeFood != 0)
{
szBuffer.append(NEWLINE);
szBuffer.append(gDLL->getText("TXT_KEY_MISC_HELP_SPECIALIST_COMMERCE", iTradeFood, info.getChar(), L"TXT_KEY_HEADING_TRADEROUTE_LIST"));
iBaseRate += iTradeFood;
bNeedSubtotal = true;
}
// Specialists
int iSpecialistFood = 0;
for (i = 0; i < GC.getNumSpecialistInfos(); i++)
{
iSpecialistFood += GET_PLAYER(city.getOwnerINLINE()).specialistYield((SpecialistTypes)i, YIELD_FOOD) * (city.getSpecialistCount((SpecialistTypes)i) + city.getFreeSpecialistCount((SpecialistTypes)i));
}
if (iSpecialistFood != 0)
{
szBuffer.append(NEWLINE);
szBuffer.append(gDLL->getText("TXT_KEY_MISC_HELP_SPECIALIST_COMMERCE", iSpecialistFood, info.getChar(), L"TXT_KEY_CONCEPT_SPECIALISTS"));
iBaseRate += iSpecialistFood;
bNeedSubtotal = true;
}
// Corporations
int iCorporationFood = city.getCorporationYield(YIELD_FOOD);
if (iCorporationFood != 0)
{
szBuffer.append(NEWLINE);
szBuffer.append(gDLL->getText("TXT_KEY_MISC_HELP_CORPORATION_COMMERCE", iCorporationFood, info.getChar()));
iBaseRate += iCorporationFood;
bNeedSubtotal = true;
}
// Buildings
int iBuildingFood = 0;
for (i = 0; i < GC.getNumBuildingInfos(); i++)
{
int iCount = city.getNumActiveBuilding((BuildingTypes)i);
if (iCount > 0)
{
CvBuildingInfo& kBuilding = GC.getBuildingInfo((BuildingTypes)i);
iBuildingFood += iCount * (kBuilding.getYieldChange(YIELD_FOOD) + city.getBuildingYieldChange((BuildingClassTypes)kBuilding.getBuildingClassType(), YIELD_FOOD));
}
}
if (iBuildingFood != 0)
{
szBuffer.append(NEWLINE);
szBuffer.append(gDLL->getText("TXT_KEY_MISC_HELP_BUILDING_COMMERCE", iBuildingFood, info.getChar()));
iBaseRate += iBuildingFood;
bNeedSubtotal = true;
}