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); }
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)); }