johnny_cash
Chieftain
so i got the yield input\outputs working great, but the bonus outputs are not showing. e.g. building is inputting 2 yield a turn, and is supposed to produce 2 iron. the 2 yield deduction is applied, but i get 0 iron production. here is the code:
and BonusStock
Also, I am thinking of handling the bonus stockpile changes with a vector the way BuildingYieldChange is handled. I've been looking at some tutorials online, but I'm wondering, how would i declare m_aBuildingBonusStockChange? this is very new for me.
Once again, thanks so much for the help!
Code:
void CvCity::doIndustry(BuildingTypes eIndex)
{
CvBuildingInfo& kBuilding = GC.getBuildingInfo(eIndex);
int iI;
int iHighestOrSource = 0;
BonusTypes eHighestOrBonus = NO_BONUS;
int iContendingSource;
int iRate;
bool bLevelOkay = true;
int iOldValue;
if (eIndex == NO_BUILDING)
{
return;
}
for (iRate = getBuildingOutputRate(eIndex); iRate >= 0; iRate--)
{
for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
{
if (kBuilding.getYieldInput(iI) > 0)
{
if (getYieldRate((YieldTypes) iI) < (iRate*(kBuilding.getYieldInput(iI))))
{
bLevelOkay = false;
break;
}
}
}
if (bLevelOkay)
{
for (iI = 0; iI <GC.getNumBonusInfos(); iI++)
{
if (kBuilding.getOrBonusInput(iI) > 0)
{
if (getOverallBonusStock((BonusTypes) iI) >= (iRate*(GC.getBuildingInfo(eIndex).getOrBonusInput(iI))))
{
bLevelOkay = true;
break;
}
else
{
bLevelOkay = false;
}
}
}
}
if (bLevelOkay)
{
for (iI = 0; iI < GC.getNumBonusInfos(); iI++)
{
if (kBuilding.getOrBonusInput(iI) > 0)
{
if (getOverallBonusStock((BonusTypes) iI) < (iRate*(GC.getBuildingInfo(eIndex).getAndBonusInput(iI))))
{
bool bLevelOkay = false;
break;
}
}
}
}
if (bLevelOkay == true)
{
break;
}
}
setBuildingOutputRate(eIndex, iRate);
for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
{
iOldValue = getBuildingYieldChange( (BuildingClassTypes) kBuilding.getBuildingClassType(), (YieldTypes) iI);
if (kBuilding.getYieldOutput(iI) > 0)
{
changeBuildingYieldChange( (BuildingClassTypes) kBuilding.getBuildingClassType(), (YieldTypes) iI, -iOldValue + (iRate*kBuilding.getYieldOutput(iI)) );
}
if (kBuilding.getYieldInput(iI) > 0)
{
changeBuildingYieldChange( (BuildingClassTypes) kBuilding.getBuildingClassType(), (YieldTypes) iI, -(iOldValue + (iRate*kBuilding.getYieldInput(iI))) );
}
}
for (iI = 0; iI < GC.getNumBonusInfos(); iI++)
{
if (kBuilding.getBonusOutput(iI) > 0)
{
changeBonusStock( (BonusTypes) iI, iRate*kBuilding.getBonusOutput(iI));
}
if (kBuilding.getAndBonusInput(iI) > 0)
{
changeOverallBonusStock( (BonusTypes) iI, -(iRate*kBuilding.getAndBonusInput(iI)));
}
if (kBuilding.getOrBonusInput(iI) > 0)
{
iContendingSource = getOverallBonusStock((BonusTypes) iI) - (iRate*kBuilding.getOrBonusInput(iI));
if ( iContendingSource >= iHighestOrSource)
{
iContendingSource = iHighestOrSource;
eHighestOrBonus = (BonusTypes) iI;
}
}
}
if (eHighestOrBonus != NO_BONUS)
{
changeOverallBonusStock(eHighestOrBonus, -(iRate*kBuilding.getOrBonusInput(eHighestOrBonus)));
}
}
and BonusStock
Code:
int CvCity::getBonusStock(BonusTypes eBonus)
{
return m_aiBonusStock != NULL ? m_aiBonusStock[(int) eBonus] : 0;
}
void CvCity::setBonusStock(BonusTypes eBonus, int iValue)
{
if (m_aiBonusStock != NULL)
{
if (iValue > 0)
{
m_aiBonusStock[(int) eBonus] = iValue;
}
else
{
m_aiBonusStock[(int) eBonus] = 0;
}
}
}
void CvCity::changeBonusStock(BonusTypes eBonus, int iChange)
{
setBonusStock(eBonus, getBonusStock(eBonus) + iChange);
}
Also, I am thinking of handling the bonus stockpile changes with a vector the way BuildingYieldChange is handled. I've been looking at some tutorials online, but I'm wondering, how would i declare m_aBuildingBonusStockChange? this is very new for me.
Once again, thanks so much for the help!