Bazaar developer reference

CvUnitMission::AutoMission(UnitHandle)

Defined in
CvUnitMission.cpp, line 62
Class
CvUnitMission
Hook name
CivHooks::CvUnitMission_AutoMission

Hooks

static bool BeforeCvUnitMission_AutoMission(UnitHandle hUnit);static void AfterCvUnitMission_AutoMission(UnitHandle hUnit);static void ReplaceCvUnitMission_AutoMission(void (*original)(UnitHandle), UnitHandle hUnit);CivRegisterBefore<CivHooks::CvUnitMission_AutoMission>(host, &BeforeCvUnitMission_AutoMission);CivRegisterAfter<CivHooks::CvUnitMission_AutoMission>(host, &AfterCvUnitMission_AutoMission);CivRegisterReplace<CivHooks::CvUnitMission_AutoMission>(host, &ReplaceCvUnitMission_AutoMission);

Code

61/// Perform automated mission62void CvUnitMission::AutoMission(UnitHandle hUnit)63{64	CvAssert(hUnit->getOwner() != NO_PLAYER);6566	const MissionQueueNode* pkMissionNode = HeadMissionQueueNode(hUnit->m_missionQueue);67	if(pkMissionNode != NULL)68	{69		if(!hUnit->IsBusy() && !hUnit->isDelayedDeath())70		{71			// Builders which are being escorted shouldn't wake up every turn... this is annoying!72			bool bEscortedBuilder = false;73			if(pkMissionNode->eMissionType == CvTypes::getMISSION_BUILD())74			{75				if(hUnit->plot()->getNumDefenders(hUnit->getOwner()) > 0)76				{77					bEscortedBuilder = true;78				}79			}8081#if defined(MOD_BUGFIX_WORKERS_VISIBLE_DANGER)82			bool bAbortMission = (!bEscortedBuilder && !hUnit->IsIgnoringDangerWakeup());83			// Remove the line below to have combat units behave like workers, waking at every opportunity!84			bAbortMission = (bAbortMission && !hUnit->IsCombatUnit());8586			// Only change human player's units' behaviour87			if (GET_PLAYER(hUnit->getOwner()).isHuman() && MOD_BUGFIX_WORKERS_VISIBLE_DANGER) {88				// Stop only if the worker can actually see the enemy89				bAbortMission = (bAbortMission && hUnit->SentryAlert(true));90			} else {91				// Stop if there is any hint of an enemy92				bAbortMission = (bAbortMission && GET_PLAYER(hUnit->getOwner()).IsPlotUnderImmediateThreat(*(hUnit->plot())));93			}9495			if(bAbortMission)96#else97			if(!bEscortedBuilder && !hUnit->IsIgnoringDangerWakeup() && !hUnit->IsCombatUnit() && GET_PLAYER(hUnit->getOwner()).IsPlotUnderImmediateThreat(*(hUnit->plot())))98#endif99			{100				hUnit->ClearMissionQueue();101				hUnit->SetIgnoreDangerWakeup(true);102			}103			else104			{105				if(hUnit->GetActivityType() == ACTIVITY_MISSION)106				{107					ContinueMission(hUnit);108				}109				else110				{111					StartMission(hUnit);112				}113			}114		}115	}116117	hUnit.ignoreDestruction(true);118	hUnit->doDelayedDeath();119}

Calls

Called by