Bazaar developer reference

CvUnitCombat::ResolveCombat(const CvCombatInfo &, uint)

Defined in
CvUnitCombat.cpp, line 2904
Class
CvUnitCombat
Hook name
CivHooks::CvUnitCombat_ResolveCombat

Hooks

static bool BeforeCvUnitCombat_ResolveCombat(const CvCombatInfo& kInfo, uint uiParentEventID);static void AfterCvUnitCombat_ResolveCombat(const CvCombatInfo& kInfo, uint uiParentEventID);static void ReplaceCvUnitCombat_ResolveCombat(void (*original)(const CvCombatInfo&, uint), const CvCombatInfo& kInfo, uint uiParentEventID);CivRegisterBefore<CivHooks::CvUnitCombat_ResolveCombat>(host, &BeforeCvUnitCombat_ResolveCombat);CivRegisterAfter<CivHooks::CvUnitCombat_ResolveCombat>(host, &AfterCvUnitCombat_ResolveCombat);CivRegisterReplace<CivHooks::CvUnitCombat_ResolveCombat>(host, &ReplaceCvUnitCombat_ResolveCombat);

Code

2904void CvUnitCombat::ResolveCombat(const CvCombatInfo& kInfo, uint uiParentEventID /* = 0 */)2905{2906	PlayerTypes eAttackingPlayer = NO_PLAYER;2907	// Restore visibility2908	CvUnit* pAttacker = kInfo.getUnit(BATTLE_UNIT_ATTACKER);29092910	const TeamTypes eActiveTeam = GC.getGame().getActiveTeam();29112912	if(pAttacker)2913	{2914		eAttackingPlayer = pAttacker->getOwner();2915		auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(pAttacker));2916		gDLL->GameplayUnitVisibility(pDllUnit.get(), !pAttacker->isInvisible(eActiveTeam, false));2917	}29182919	CvUnit* pDefender = kInfo.getUnit(BATTLE_UNIT_DEFENDER);2920	if(pDefender)2921	{2922		auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(pDefender));2923		gDLL->GameplayUnitVisibility(pDllUnit.get(), !pDefender->isInvisible(eActiveTeam, false));2924	}29252926	CvUnit* pDefenderSupport = kInfo.getUnit(BATTLE_UNIT_INTERCEPTOR);2927	if(pDefenderSupport)2928	{2929		auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(pDefenderSupport));2930		gDLL->GameplayUnitVisibility(pDllUnit.get(), !pDefenderSupport->isInvisible(eActiveTeam, false));2931	}29322933	// Nuclear Mission2934	if(kInfo.getAttackIsNuclear())2935	{2936		ResolveNuclearCombat(kInfo, uiParentEventID);2937	}29382939	// Bombing Mission2940	else if(kInfo.getAttackIsBombingMission())2941	{2942		ResolveAirUnitVsCombat(kInfo, uiParentEventID);2943	}29442945	// Air Sweep Mission2946	else if(kInfo.getAttackIsAirSweep())2947	{2948		ResolveAirSweep(kInfo, uiParentEventID);2949	}29502951	// Ranged Attack2952	else if(kInfo.getAttackIsRanged())2953	{2954		if(kInfo.getUnit(BATTLE_UNIT_ATTACKER))2955		{2956			ResolveRangedUnitVsCombat(kInfo, uiParentEventID);2957			CvPlot *pPlot = kInfo.getPlot();2958			if (kInfo.getUnit(BATTLE_UNIT_ATTACKER) && kInfo.getUnit(BATTLE_UNIT_DEFENDER) && pPlot)2959			{2960				pPlot->AddArchaeologicalRecord(CvTypes::getARTIFACT_BATTLE_RANGED(), kInfo.getUnit(BATTLE_UNIT_ATTACKER)->getOwner(), kInfo.getUnit(BATTLE_UNIT_DEFENDER)->getOwner());2961			}2962		}2963		else2964		{2965			ResolveRangedCityVsUnitCombat(kInfo, uiParentEventID);2966			CvPlot *pPlot = kInfo.getPlot();2967			if (kInfo.getCity(BATTLE_UNIT_ATTACKER) && kInfo.getUnit(BATTLE_UNIT_DEFENDER) && pPlot)2968			{2969				pPlot->AddArchaeologicalRecord(CvTypes::getARTIFACT_BATTLE_RANGED(), kInfo.getCity(BATTLE_UNIT_ATTACKER)->getOwner(), kInfo.getUnit(BATTLE_UNIT_DEFENDER)->getOwner());2970			}2971		}2972	}29732974	// Melee Attack2975	else2976	{2977		if(kInfo.getCity(BATTLE_UNIT_DEFENDER))2978		{2979			ResolveCityMeleeCombat(kInfo, uiParentEventID);2980		}2981		else2982		{2983			ResolveMeleeCombat(kInfo, uiParentEventID);2984			CvPlot *pPlot = kInfo.getPlot();2985			if (kInfo.getUnit(BATTLE_UNIT_ATTACKER) && kInfo.getUnit(BATTLE_UNIT_DEFENDER) && pPlot)2986			{2987				pPlot->AddArchaeologicalRecord(CvTypes::getARTIFACT_BATTLE_MELEE(), kInfo.getUnit(BATTLE_UNIT_ATTACKER)->getOwner(), kInfo.getUnit(BATTLE_UNIT_DEFENDER)->getOwner());2988			}2989		}2990	}29912992	// Clear popup blocking after combat resolves2993	if(eAttackingPlayer == GC.getGame().getActivePlayer())2994	{2995		GC.GetEngineUserInterface()->SetDontShowPopups(false);2996	}2997}

Calls

Called by