Fimbulvetr
Emperor
Well I have reason to believe that m_aBuildingHappyChange is stored, so even if there is a chance that the building might not get the bonus of its own effect the same turn it is built, it would definitely get it the next turn.
(getNumBuilding(eLoopBuilding) [B]+ (eBuilding == eLoopBuilding ? 1 : 0)[/B])
if (((iFocusFlags & BUILDINGFOCUS_HAPPY) || (iPass > 0)) && !isNoUnhappiness())
{
int iBestHappy = 0;
for (iI = 0; iI < GC.getNumHurryInfos(); iI++)
{
if (canHurryBuilding((HurryTypes)iI, eBuilding, true))
{
int iHappyFromHurry = AI_getHappyFromHurry((HurryTypes)iI, eBuilding, true);
if (iHappyFromHurry > iBestHappy)
{
iBestHappy = iHappyFromHurry;
}
}
}
iValue += iBestHappy * 10;
[B] if (kBuilding.isNoUnhappiness())
{
iValue += ((iAngryPopulation * 10) + getPopulation());
}[/B]
[COLOR="Green"]/************************************************************************************************/
/* BETTER_BTS_AI_MOD 02/24/10 jdog5000 */
/* */
/* City AI */
/************************************************************************************************/[/COLOR]
int iGood, iBad = 0;
int iBuildingActualHappiness = getAdditionalHappinessByBuilding(eBuilding,iGood,iBad);
if( iBuildingActualHappiness < 0 )
{
[COLOR="Green"]// Building causes net decrease in city happiness[/COLOR]
iValue -= (-iBuildingActualHappiness + iAngryPopulation) * 6
+ (-iBuildingActualHappiness) * iHappyModifier;
[COLOR="Green"]// BBAI TODO: Check for potential shrink in populatio[/COLOR]n
}
else if( iBuildingActualHappiness > 0 )
{
[COLOR="Green"]// Building causes net increase in city happiness[/COLOR]
iValue += (std::min(iBuildingActualHappiness, iAngryPopulation) * 10)
+ (std::max(0, iBuildingActualHappiness - iAngryPopulation) * iHappyModifier);
}
iValue += (-kBuilding.getHurryAngerModifier() * getHurryPercentAnger()) / 100;
for (iI = 0; iI < NUM_COMMERCE_TYPES; iI++)
{
iValue += (kBuilding.getCommerceHappiness(iI) * iHappyModifier) / 4;
}
int iWarWearinessModifer = kBuilding.getWarWearinessModifier();
if (iWarWearinessModifer != 0)
{
iValue += (-iWarWearinessModifer * iHappyModifier) / 16;
}
iValue += (kBuilding.getAreaHappiness() * (iNumCitiesInArea - 1) * 8);
iValue += (kBuilding.getGlobalHappiness() * iNumCities * 8);
int iWarWearinessPercentAnger = kOwner.getWarWearinessPercentAnger();
[B] int iGlobalWarWearinessModifer = kBuilding.getGlobalWarWearinessModifier();
if (iGlobalWarWearinessModifer != 0)
{
iValue += (-(((iGlobalWarWearinessModifer * iWarWearinessPercentAnger / 100) / GC.getPERCENT_ANGER_DIVISOR())) * iNumCities);[/B]
iValue += (-iGlobalWarWearinessModifer * iHappyModifier) / 16;
[B]}[/B]
for (iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)
{
if (kBuilding.getBuildingHappinessChanges(iI) != 0)
{
iValue += (kBuilding.getBuildingHappinessChanges(iI) * kOwner.getBuildingClassCount((BuildingClassTypes)iI) * 8);
}
}
[COLOR="Green"]/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/[/COLOR]
}
if (((iFocusFlags & BUILDINGFOCUS_HEALTHY) || (iPass > 0)) && !isNoUnhealthyPopulation())
{
[COLOR="Green"]/************************************************************************************************/
/* BETTER_BTS_AI_MOD 02/24/10 jdog5000 & Fuyu */
/* */
/* City AI */
/************************************************************************************************/[/COLOR]
int iGood, iBad = 0;
int iBuildingActualHealth = getAdditionalHealthByBuilding(eBuilding,iGood,iBad);
if( iBuildingActualHealth < 0 )
{
[COLOR="Green"]// Building causes net decrease in city health[/COLOR]
iValue -= (-iBuildingActualHealth + iBadHealth) * 6
+ (-iBuildingActualHealth) * iHealthModifier;
/[COLOR="Green"]/ BBAI TODO: Check for potential shrink in population[/COLOR]
}
else if( iBuildingActualHealth > 0 )
{
[COLOR="Green"]// Building causes net increase in city health[/COLOR]
iValue += (std::min(iBuildingActualHealth, iBadHealth) * 10)
+ (std::max(0, iBuildingActualHealth - iBadHealth) * iHealthModifier);
}
iValue += (kBuilding.getAreaHealth() * (iNumCitiesInArea-1) * 4);
iValue += (kBuilding.getGlobalHealth() * iNumCities * 4);
[COLOR="Green"]/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/[/COLOR]
}
int CvCity::getAdditionalHealthByBuilding(BuildingTypes eBuilding) const
{
int iGood = 0; int iBad = 0; int iSpoiledFood = 0;
return getAdditionalHealthByBuilding(eBuilding, iGood, iBad, iSpoiledFood);
}
int CvCity::getAdditionalHappinessByBuilding(BuildingTypes eBuilding) const
{
int iGood = 0; int iBad = 0; int iAngryPop = 0;
return getAdditionalHappinessByBuilding(eBuilding, iGood, iBad, iAngryPop);
}