示例#1
0
void CThreatMap::DelEnemyUnit(const CEnemyUnit* e)
{
	CCircuitDef* cdef = e->GetCircuitDef();
	if (cdef == nullptr) {
		DelEnemyUnitAll(e);
		return;
	}

	if (cdef->HasAntiAir()) {
		DelEnemyAir(e);
	}
	if (cdef->HasAntiLand() || cdef->HasAntiWater()) {
		DelEnemyAmph(e);
	}
	DelDecloaker(e);
}
示例#2
0
void CThreatMap::SetEnemyUnitRange(CEnemyUnit* e) const
{
	CCircuitDef* cdef = e->GetCircuitDef();
	assert(cdef != nullptr);

	const int slack = DEFAULT_SLACK * (cdef->IsMobile() ? 4 : 2);
	int range;
	int maxRange;

	range = cdef->HasAntiAir() ? ((int)cdef->GetMaxRange(CCircuitDef::RangeType::AIR) + slack) / squareSize : 0;
	e->SetRange(CEnemyUnit::RangeType::AIR, range);
	maxRange = range;

	range = cdef->HasAntiLand() ? ((int)cdef->GetMaxRange(CCircuitDef::RangeType::LAND) + slack) / squareSize : 0;
	e->SetRange(CEnemyUnit::RangeType::LAND, range);
	maxRange = std::max(maxRange, range);

	range = cdef->HasAntiWater() ? ((int)cdef->GetMaxRange(CCircuitDef::RangeType::WATER) + slack) / squareSize : 0;
	e->SetRange(CEnemyUnit::RangeType::WATER, range);
	maxRange = std::max(maxRange, range);

	e->SetRange(CEnemyUnit::RangeType::MAX, maxRange);
	e->SetRange(CEnemyUnit::RangeType::CLOAK, GetCloakRange(e));
}