Bazaar developer reference

CvGameQueries::AreUnitsSameType(UnitTypes, UnitTypes)

Defined in
CvGameQueries.cpp, line 200
Class
CvGameQueries
Hook name
CivHooks::CvGameQueries_AreUnitsSameType

Hooks

static bool BeforeCvGameQueries_AreUnitsSameType(UnitTypes eFirstUnitType, UnitTypes eSecondUnitType, bool& result);static void AfterCvGameQueries_AreUnitsSameType(UnitTypes eFirstUnitType, UnitTypes eSecondUnitType, bool& result);static bool ReplaceCvGameQueries_AreUnitsSameType(bool (*original)(UnitTypes, UnitTypes), UnitTypes eFirstUnitType, UnitTypes eSecondUnitType);CivRegisterBefore<CivHooks::CvGameQueries_AreUnitsSameType>(host, &BeforeCvGameQueries_AreUnitsSameType);CivRegisterAfter<CivHooks::CvGameQueries_AreUnitsSameType>(host, &AfterCvGameQueries_AreUnitsSameType);CivRegisterReplace<CivHooks::CvGameQueries_AreUnitsSameType>(host, &ReplaceCvGameQueries_AreUnitsSameType);

Code

200bool CvGameQueries::AreUnitsSameType(UnitTypes eFirstUnitType, UnitTypes eSecondUnitType)201{202	CvUnitEntry* pkFirstUnitInfo = GC.getUnitInfo(eFirstUnitType);203	CvUnitEntry* pkSecondUnitInfo = GC.getUnitInfo(eSecondUnitType);204205	if(pkFirstUnitInfo == NULL || pkSecondUnitInfo == NULL)206		return false;207208	int eFirstDomain = pkFirstUnitInfo->GetDomainType();209	int eSecondDomain = pkSecondUnitInfo->GetDomainType();210211	// antonjs: Added for Smoky Skies scenario. 212	// If unit is DOMAIN_HOVER, its effective domain is a wildcard, equal to the other unit's domain. This prevents HOVER units from disobeying 1UPT.213	if (eFirstDomain == DOMAIN_HOVER && eSecondDomain == DOMAIN_HOVER)214	{215		// Already a match216	}217	else if (eFirstDomain == DOMAIN_HOVER)218	{219		eFirstDomain = eSecondDomain; // Make it a match220	}221	else if (eSecondDomain == DOMAIN_HOVER)222	{223		eSecondDomain = eFirstDomain; // Make it a match224	}225226	// Must be in the same domain227	if(eFirstDomain == eSecondDomain)228	{229		// Conversely air units can always stack230		if(eFirstDomain == DOMAIN_AIR)231		{232			return false;233		}234235		bool bUnit1Combat = false;236		bool bUnit2Combat = false;237238		// Unit 1 is a combat unit?239		if(pkFirstUnitInfo->GetCombat() > 0 || pkFirstUnitInfo->GetRange() > 0)240		{241			bUnit1Combat = true;242		}243244#if defined(MOD_GLOBAL_BREAK_CIVILIAN_1UPT)245		if(MOD_GLOBAL_BREAK_CIVILIAN_1UPT && !bUnit1Combat)246			return false;247#endif248249		// Unit 2 is a combat unit?250		if(pkSecondUnitInfo->GetCombat() > 0 || pkSecondUnitInfo->GetRange() > 0)251		{252			bUnit2Combat = true;253		}254255		// Looped unit matches combat or non-combat type?256		if(bUnit1Combat == bUnit2Combat)257		{258			// Unit is the same domain & combat type, so we have a match259			return true;260		}261	}262263	return false;264}

Calls

Called by