CvAIOperation::UnitWasRemoved(int, int)
- Defined in
- CvAIOperation.cpp, line 967
- Class
- CvAIOperation
- Hook name
CivHooks::CvAIOperation_UnitWasRemoved- Overridden by
- CvAIEscortedOperation::UnitWasRemoved(int, int), CvAINavalEscortedOperation::UnitWasRemoved(int, int)
Hooks
static bool BeforeCvAIOperation_UnitWasRemoved(CvAIOperation* self, int iArmyID, int iSlotID);static void AfterCvAIOperation_UnitWasRemoved(CvAIOperation* self, int iArmyID, int iSlotID);static void ReplaceCvAIOperation_UnitWasRemoved(void (*original)(CvAIOperation*, int, int), CvAIOperation* self, int iArmyID, int iSlotID);CivRegisterBefore<CivHooks::CvAIOperation_UnitWasRemoved>(host, &BeforeCvAIOperation_UnitWasRemoved);CivRegisterAfter<CivHooks::CvAIOperation_UnitWasRemoved>(host, &AfterCvAIOperation_UnitWasRemoved);CivRegisterReplace<CivHooks::CvAIOperation_UnitWasRemoved>(host, &ReplaceCvAIOperation_UnitWasRemoved);
Code
966/// Handles notification that a unit in this operation was lost. Can be overridden if needed967void CvAIOperation::UnitWasRemoved(int iArmyID, int iSlotID)968{969 // For now, response is based on phase of operation970 switch(m_eCurrentState)971 {972 case AI_OPERATION_STATE_ABORTED:973 case AI_OPERATION_STATE_SUCCESSFUL_FINISH:974 break;975976 case AI_OPERATION_STATE_RECRUITING_UNITS:977 {978 // If recruiting units, read this unit to the list of what we need979 OperationSlot slotToFill;980981 slotToFill.m_iOperationID = m_iID;982 slotToFill.m_iArmyID = iArmyID;983 slotToFill.m_iSlotID = iSlotID;984 m_viListOfUnitsWeStillNeedToBuild.push_back(slotToFill);985 }986 break;987988 case AI_OPERATION_STATE_GATHERING_FORCES:989 case AI_OPERATION_STATE_MOVING_TO_TARGET:990 case AI_OPERATION_STATE_AT_TARGET:991 {992 // If down below half strength, abort993 CvArmyAI* pThisArmy = GET_PLAYER(m_eOwner).getArmyAI(iArmyID);994 CvMultiUnitFormationInfo* pkFormation = GC.getMultiUnitFormationInfo(pThisArmy->GetFormationIndex());995 if(pkFormation)996 {997 if(pThisArmy->GetNumSlotsFilled() <=0 ||998 pThisArmy->GetNumSlotsFilled() < pkFormation->getNumFormationSlotEntries() / 2)999 {1000 // Abort1001 m_eCurrentState = AI_OPERATION_STATE_ABORTED;1002 m_eAbortReason = AI_ABORT_HALF_STRENGTH;1003 }1004 }1005 }1006 break;1007 };1008}