Bazaar developer reference

CvTacticalAI::ScoreAssignments(bool)

Defined in
CvTacticalAI.cpp, line 11132
Class
CvTacticalAI
Hook name
CivHooks::CvTacticalAI_ScoreAssignments

Hooks

static bool BeforeCvTacticalAI_ScoreAssignments(CvTacticalAI* self, bool bCanLeaveOpenings, int& result);static void AfterCvTacticalAI_ScoreAssignments(CvTacticalAI* self, bool bCanLeaveOpenings, int& result);static int ReplaceCvTacticalAI_ScoreAssignments(int (*original)(CvTacticalAI*, bool), CvTacticalAI* self, bool bCanLeaveOpenings);CivRegisterBefore<CivHooks::CvTacticalAI_ScoreAssignments>(host, &BeforeCvTacticalAI_ScoreAssignments);CivRegisterAfter<CivHooks::CvTacticalAI_ScoreAssignments>(host, &AfterCvTacticalAI_ScoreAssignments);CivRegisterReplace<CivHooks::CvTacticalAI_ScoreAssignments>(host, &ReplaceCvTacticalAI_ScoreAssignments);

Code

11131/// Score for this set of chosen blocks in m_TemporaryBlocks (-1 if illegal)11132int CvTacticalAI::ScoreAssignments(bool bCanLeaveOpenings)11133{11134	int iScore = 0;1113511136	// Any assignment appear twice?11137	for(unsigned int iI = 0; iI < m_TemporaryBlocks.size(); iI++)11138	{11139		for(unsigned int jJ = iI + 1; jJ < m_TemporaryBlocks.size(); jJ++)11140		{11141			if(m_TemporaryBlocks[iI].GetUnitID() == m_TemporaryBlocks[jJ].GetUnitID())11142			{11143				if(!bCanLeaveOpenings)11144				{11145					return -1;11146				}11147				else11148				{11149					// "Clear" the move with greater distance by setting it to MAX_INT distance11150					if(m_TemporaryBlocks[iI].GetDistanceToTarget() < m_TemporaryBlocks[jJ].GetDistanceToTarget())11151					{11152						m_TemporaryBlocks[jJ].SetDistanceToTarget(MAX_INT);11153					}11154					else11155					{11156						m_TemporaryBlocks[iI].SetDistanceToTarget(MAX_INT);11157					}11158				}11159			}11160		}11161	}1116211163	// Legal, so let's score it11164	for(unsigned int iI = 0; iI < m_TemporaryBlocks.size(); iI++)11165	{11166		if(m_TemporaryBlocks[iI].GetDistanceToTarget() != MAX_INT)11167		{11168			iScore += (10000 - (m_TemporaryBlocks[iI].GetDistanceToTarget() * 1000));11169			iScore += m_pPlayer->getUnit(m_TemporaryBlocks[iI].GetUnitID())->GetPower();11170		}11171	}1117211173	return iScore;11174}

Calls

Called by