Bazaar developer reference

CvEconomicAI::AssignHutsToExplorers()

Defined in
CvEconomicAI.cpp, line 2783
Class
CvEconomicAI
Hook name
CivHooks::CvEconomicAI_AssignHutsToExplorers

Hooks

static bool BeforeCvEconomicAI_AssignHutsToExplorers(CvEconomicAI* self);static void AfterCvEconomicAI_AssignHutsToExplorers(CvEconomicAI* self);static void ReplaceCvEconomicAI_AssignHutsToExplorers(void (*original)(CvEconomicAI*), CvEconomicAI* self);CivRegisterBefore<CivHooks::CvEconomicAI_AssignHutsToExplorers>(host, &BeforeCvEconomicAI_AssignHutsToExplorers);CivRegisterAfter<CivHooks::CvEconomicAI_AssignHutsToExplorers>(host, &AfterCvEconomicAI_AssignHutsToExplorers);CivRegisterReplace<CivHooks::CvEconomicAI_AssignHutsToExplorers>(host, &ReplaceCvEconomicAI_AssignHutsToExplorers);

Code

2783void CvEconomicAI::AssignHutsToExplorers()2784{2785	FFastVector<unsigned int> aiHutIndices;27862787	// Create temporary list of huts2788	for(uint uiGoodyPlots = 0; uiGoodyPlots < m_aiGoodyHutPlots.size(); uiGoodyPlots++)2789	{2790		aiHutIndices.push_back(uiGoodyPlots);2791	}27922793	for(uint uiExplorer = 0; uiExplorer < m_apExplorers.size(); uiExplorer++)2794	{2795		CvUnit* pUnit = m_apExplorers[uiExplorer];2796		uint uiHutIndex = MAX_INT;2797		int iClosestEstimateTurns = MAX_INT;27982799		for(uint uiGoody = 0; uiGoody < aiHutIndices.size(); uiGoody++)2800		{2801			if(m_aiGoodyHutPlots[aiHutIndices[uiGoody]] == -1)2802			{2803				continue;2804			}28052806			CvPlot* pGoodyPlot = GC.getMap().plotByIndex(m_aiGoodyHutPlots[aiHutIndices[uiGoody]]);2807			int iDistance = plotDistance(pUnit->getX(), pUnit->getY(), pGoodyPlot->getX(), pGoodyPlot->getY());28082809			int iEstimateTurns = MAX_INT;2810			if(pUnit->maxMoves() >= 1)2811			{2812				iEstimateTurns = iDistance / (pUnit->maxMoves() / GC.getMOVE_DENOMINATOR());2813			}28142815			if(iEstimateTurns < iClosestEstimateTurns)2816			{2817				// Now check path2818				bool bCanFindPath = GC.getPathFinder().GenerateUnitPath(pUnit, pUnit->getX(), pUnit->getY(), pGoodyPlot->getX(), pGoodyPlot->getY(), MOVE_TERRITORY_NO_ENEMY | MOVE_MAXIMIZE_EXPLORE | MOVE_UNITS_IGNORE_DANGER /*iFlags*/, true/*bReuse*/);2819				if(bCanFindPath)2820				{2821					iClosestEstimateTurns = iEstimateTurns;2822					uiHutIndex = aiHutIndices[uiGoody];2823				}2824			}2825		}28262827		if(uiHutIndex != MAX_INT)2828		{2829			m_aiGoodyHutUnitAssignments[uiHutIndex] = GoodyHutUnitAssignment( pUnit->GetID(), -1);28302831			FFastVector<unsigned int> tempHutIndices = aiHutIndices;2832			aiHutIndices.clear();2833			for(uint uiHut = 0; uiHut < tempHutIndices.size(); uiHut++)2834			{2835				if(tempHutIndices[uiHut] != uiHutIndex)2836				{2837					aiHutIndices.push_back(tempHutIndices[uiHut]);2838				}2839			}2840		}2841	}2842}

Calls

Called by