diff --git a/backend/core/include/unitsmanager.h b/backend/core/include/unitsmanager.h index b3e0f6e7..d318e746 100644 --- a/backend/core/include/unitsmanager.h +++ b/backend/core/include/unitsmanager.h @@ -23,8 +23,8 @@ public: void deleteUnit(unsigned int ID, bool explosion, string explosionType, bool immediate); void acquireControl(unsigned int ID); void loadDatabases(); - Unit* getClosestUnit(Unit* unit, unsigned char coalition, vector categories, double &distance); - map getUnitsInRange(Unit* unit, unsigned char coalition, vector categories, double range); + Unit* getClosestUnit(Unit* unit, unsigned char coalition, vector categories, double &distance, bool airborneOnly = true); + map getUnitsInRange(Unit* unit, unsigned char coalition, vector categories, double range, bool airborneOnly = true); private: map units; diff --git a/backend/core/src/unitsmanager.cpp b/backend/core/src/unitsmanager.cpp index 0e175f4c..3f0a27f5 100644 --- a/backend/core/src/unitsmanager.cpp +++ b/backend/core/src/unitsmanager.cpp @@ -151,7 +151,7 @@ void UnitsManager::deleteUnit(unsigned int ID, bool explosion, string explosionT } } -Unit* UnitsManager::getClosestUnit(Unit* unit, unsigned char coalition, vector categories, double &distance) { +Unit* UnitsManager::getClosestUnit(Unit* unit, unsigned char coalition, vector categories, double &distance, bool airborneOnly) { Unit* closestUnit = nullptr; distance = 0; @@ -167,6 +167,9 @@ Unit* UnitsManager::getClosestUnit(Unit* unit, unsigned char coalition, vectorgetCoalition() == coalition && p.second->getAlive()) { + /* Check if the unit is airborne */ + if (airborneOnly && !p.second->getAirborne()) + continue; /* Compute the distance from the unit to the tested unit */ double dist; double bearing1; @@ -194,10 +197,13 @@ Unit* UnitsManager::getClosestUnit(Unit* unit, unsigned char coalition, vector UnitsManager::getUnitsInRange(Unit* unit, unsigned char coalition, vector categories, double range) { +map UnitsManager::getUnitsInRange(Unit* unit, unsigned char coalition, vector categories, double range, bool airborneOnly) { map unitsInRange; for (auto const& p : units) { + if (airborneOnly && !p.second->getAirborne()) + continue; + /* Check if the units category is of the correct type */ bool requestedCategory = false; for (auto const& category : categories) { diff --git a/frontend/react/src/unit/unit.ts b/frontend/react/src/unit/unit.ts index f28c96d2..777b01c1 100644 --- a/frontend/react/src/unit/unit.ts +++ b/frontend/react/src/unit/unit.ts @@ -1970,7 +1970,7 @@ export abstract class Unit extends CustomMarker { } #drawRacetrack() { - if (getApp().getMap().getOptions().showRacetracks) { + if (getApp().getMap().getOptions().showRacetracks && this.getAirborne()) { let groundspeed = this.#speed; // Determine racetrack length