Bazaar developer reference

CvHomelandAI::ExecuteWorkerMove(CvUnit *, bool)

Defined in
CvHomelandAI.cpp, line 5969
Class
CvHomelandAI
Hook name
CivHooks::CvHomelandAI_ExecuteWorkerMove

Hooks

static bool BeforeCvHomelandAI_ExecuteWorkerMove(CvHomelandAI* self, CvUnit* pUnit, bool bSecondary, bool& result);static void AfterCvHomelandAI_ExecuteWorkerMove(CvHomelandAI* self, CvUnit* pUnit, bool bSecondary, bool& result);static bool ReplaceCvHomelandAI_ExecuteWorkerMove(bool (*original)(CvHomelandAI*, CvUnit*, bool), CvHomelandAI* self, CvUnit* pUnit, bool bSecondary);CivRegisterBefore<CivHooks::CvHomelandAI_ExecuteWorkerMove>(host, &BeforeCvHomelandAI_ExecuteWorkerMove);CivRegisterAfter<CivHooks::CvHomelandAI_ExecuteWorkerMove>(host, &AfterCvHomelandAI_ExecuteWorkerMove);CivRegisterReplace<CivHooks::CvHomelandAI_ExecuteWorkerMove>(host, &ReplaceCvHomelandAI_ExecuteWorkerMove);

Code

5968#if defined(MOD_AI_SECONDARY_WORKERS)5969bool CvHomelandAI::ExecuteWorkerMove(CvUnit* pUnit, bool bSecondary)5970#else5971bool CvHomelandAI::ExecuteWorkerMove(CvUnit* pUnit)5972#endif5973{5974#if defined(MOD_AI_SECONDARY_WORKERS)5975	// if (bSecondary) CUSTOMLOG("ExecuteWorkerMove(secondary) for %s at (%i, %i)", pUnit->getName().c_str(), pUnit->plot()->getX(), pUnit->plot()->getY());5976#endif5977	const UINT ciDirectiveSize = 1;5978	BuilderDirective aDirective[ ciDirectiveSize ];59795980	// evaluator5981#if defined(MOD_AI_SECONDARY_WORKERS)5982	bool bHasDirective = m_pPlayer->GetBuilderTaskingAI()->EvaluateBuilder(pUnit, aDirective, ciDirectiveSize, false, false, bSecondary);5983#else5984	bool bHasDirective = m_pPlayer->GetBuilderTaskingAI()->EvaluateBuilder(pUnit, aDirective, ciDirectiveSize);5985#endif5986	if(bHasDirective)5987	{5988		switch(aDirective[0].m_eDirective)5989		{5990		case BuilderDirective::BUILD_IMPROVEMENT_ON_RESOURCE:5991		case BuilderDirective::BUILD_IMPROVEMENT:5992		case BuilderDirective::REPAIR:5993		case BuilderDirective::BUILD_ROUTE:5994		case BuilderDirective::CHOP:5995		case BuilderDirective::REMOVE_ROAD:5996		{5997			CvPlot* pPlot = GC.getMap().plot(aDirective[0].m_sX, aDirective[0].m_sY);5998			MissionTypes eMission = NO_MISSION;5999			if(pUnit->getX() == aDirective[0].m_sX && pUnit->getY() == aDirective[0].m_sY)6000			{6001#if defined(MOD_AI_SECONDARY_WORKERS)6002				// if (bSecondary) CUSTOMLOG("  ... build %i", ((int) aDirective[0].m_eDirective));6003#endif6004				eMission = CvTypes::getMISSION_BUILD();6005			}6006			else6007			{6008#if defined(MOD_AI_SECONDARY_WORKERS)6009				// if (bSecondary) CUSTOMLOG("  ... move to (%i, %i)", ((int) aDirective[0].m_sX), ((int) aDirective[0].m_sY));6010#endif6011				eMission = CvTypes::getMISSION_MOVE_TO();6012			}60136014			if(GC.getLogging() && GC.GetBuilderAILogging())6015			{6016				// Open the log file6017				CvString strFileName = "BuilderTaskingLog.csv";6018				FILogFile* pLog;6019				pLog = LOGFILEMGR.GetLog(strFileName, FILogFile::kDontTimeStamp);60206021				// write in data6022				CvString strLog;6023				CvString strTemp;60246025				CvString strPlayerName;6026				strPlayerName = m_pPlayer->getCivilizationShortDescription();6027				strLog += strPlayerName;6028				strLog += ",";60296030				strTemp.Format("%d,", GC.getGame().getGameTurn()); // turn6031				strLog += strTemp;60326033				strTemp.Format("%d,", pUnit->GetID()); // unit id6034				strLog += strTemp;60356036				switch(aDirective[0].m_eDirective)6037				{6038				case BuilderDirective::BUILD_IMPROVEMENT_ON_RESOURCE:6039					strLog += "On resource,";6040					break;6041				case BuilderDirective::BUILD_IMPROVEMENT:6042					strLog += "On plot,";6043					break;6044				case BuilderDirective::REPAIR:6045					strLog += "Repairing,";6046					break;6047				case BuilderDirective::BUILD_ROUTE:6048					strLog += "Building route,";6049					break;6050				case BuilderDirective::CHOP:6051					strLog += "Removing resource for production,";6052					break;6053				case BuilderDirective::REMOVE_ROAD:6054					strLog += "Removing road,";6055					break;6056				}60576058				if(eMission == CvTypes::getMISSION_BUILD())6059				{6060					if(aDirective[0].m_eDirective == BuilderDirective::REPAIR)6061					{6062						if(pPlot->IsImprovementPillaged())6063						{6064							strLog += "Repairing improvement";6065						}6066						else6067						{6068							strLog += "Repairing route";6069						}6070					}6071					else if(aDirective[0].m_eDirective == BuilderDirective::BUILD_ROUTE)6072					{6073						strLog += "Building route,";6074					}6075					else if(aDirective[0].m_eDirective == BuilderDirective::BUILD_IMPROVEMENT || aDirective[0].m_eDirective == BuilderDirective::BUILD_IMPROVEMENT_ON_RESOURCE)6076					{6077						strLog += "Building improvement,";6078					}6079					else if(aDirective[0].m_eDirective == BuilderDirective::CHOP)6080					{6081						strLog += "Removing feature for production,";6082					}6083					else6084					{6085						strLog += "Removing road,";6086					}6087				}6088				else6089				{6090					strLog += "Moving to location,";6091				}60926093				pLog->Msg(strLog);6094			}60956096			if(eMission == CvTypes::getMISSION_BUILD())6097			{6098				// check to see if we already have this mission as the unit's head mission6099				bool bPushMission = true;6100				const MissionData* pkMissionData = pUnit->GetHeadMissionData();6101				if(pkMissionData != NULL)6102				{6103					if(pkMissionData->eMissionType == eMission && pkMissionData->iData1 == aDirective[0].m_eBuild)6104					{6105						bPushMission = false;6106					}6107				}61086109				if(bPushMission)6110				{6111					pUnit->PushMission(CvTypes::getMISSION_BUILD(), aDirective[0].m_eBuild, -1, 0, (pUnit->GetLengthMissionQueue() > 0), false, MISSIONAI_BUILD, pPlot);6112				}61136114				CvAssertMsg(!pUnit->ReadyToMove(), "Worker did not do their mission this turn. Could cause game to hang.");6115				if(pUnit->ReadyToMove())6116				{6117					pUnit->finishMoves();6118				}6119				UnitProcessed(pUnit->GetID());6120			}6121			else6122			{6123				pUnit->PushMission(CvTypes::getMISSION_MOVE_TO(), aDirective[0].m_sX, aDirective[0].m_sY, 0, false, false, MISSIONAI_BUILD, pPlot);6124				pUnit->finishMoves();6125				UnitProcessed(pUnit->GetID());6126			}61276128			return true;6129		}6130		break;6131		}6132	}6133	else6134	{6135		if(GC.getLogging() && GC.GetBuilderAILogging())6136		{6137			CvString strFileName = "BuilderTaskingLog.csv";6138			FILogFile* pLog;6139			pLog = LOGFILEMGR.GetLog(strFileName, FILogFile::kDontTimeStamp);6140			pLog->Msg("builder has no directive");6141		}6142	}61436144	return false;6145}

Calls

Called by