From 71cf7c67f7d7126311e1a4200ccdc60a4fd5b5b5 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Tue, 5 Dec 2023 09:11:36 +0100 Subject: [PATCH] Fixed change altitude and speed for helicopters --- src/core/include/aircraft.h | 4 ++++ src/core/include/airunit.h | 1 + src/core/include/helicopter.h | 4 ++++ src/core/src/airunit.cpp | 2 +- src/core/src/helicopter.cpp | 31 +++++++++++++------------------ 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/core/include/aircraft.h b/src/core/include/aircraft.h index a3fa2b2a..c92d3bf6 100644 --- a/src/core/include/aircraft.h +++ b/src/core/include/aircraft.h @@ -1,6 +1,8 @@ #pragma once #include "airunit.h" +#define AIRCRAFT_DEST_DIST_THR 2000 // Meters + class Aircraft : public AirUnit { public: @@ -11,6 +13,8 @@ public: virtual void changeSpeed(string change); virtual void changeAltitude(string change); + virtual double getDestinationReachedThreshold() { return AIRCRAFT_DEST_DIST_THR; } + protected: static json::value database; }; \ No newline at end of file diff --git a/src/core/include/airunit.h b/src/core/include/airunit.h index ffca219e..797a4e0d 100644 --- a/src/core/include/airunit.h +++ b/src/core/include/airunit.h @@ -17,6 +17,7 @@ public: virtual void changeSpeed(string change) = 0; virtual void changeAltitude(string change) = 0; + virtual double getDestinationReachedThreshold() { return AIR_DEST_DIST_THR; } protected: virtual void AIloop(); diff --git a/src/core/include/helicopter.h b/src/core/include/helicopter.h index 5c0246ae..4e547178 100644 --- a/src/core/include/helicopter.h +++ b/src/core/include/helicopter.h @@ -1,6 +1,8 @@ #pragma once #include "airunit.h" +#define HELICOPTER_DEST_DIST_THR 500 // Meters + class Helicopter : public AirUnit { public: @@ -11,6 +13,8 @@ public: virtual void changeSpeed(string change); virtual void changeAltitude(string change); + virtual double getDestinationReachedThreshold() { return HELICOPTER_DEST_DIST_THR; } + protected: static json::value database; }; \ No newline at end of file diff --git a/src/core/src/airunit.cpp b/src/core/src/airunit.cpp index 24080da5..8aa3dabf 100644 --- a/src/core/src/airunit.cpp +++ b/src/core/src/airunit.cpp @@ -221,7 +221,7 @@ void AirUnit::AIloop() goToDestination(enrouteTask); } else { - if (isDestinationReached(AIR_DEST_DIST_THR)) { + if (isDestinationReached(getDestinationReachedThreshold())) { if (updateActivePath(looping) && setActiveDestination()) goToDestination(enrouteTask); else diff --git a/src/core/src/helicopter.cpp b/src/core/src/helicopter.cpp index f12a5d3e..df9c1712 100644 --- a/src/core/src/helicopter.cpp +++ b/src/core/src/helicopter.cpp @@ -41,33 +41,28 @@ void Helicopter::changeSpeed(string change) if (change.compare("stop") == 0) setState(State::IDLE); else if (change.compare("slow") == 0) - desiredSpeed -= knotsToMs(10); + setDesiredSpeed(getDesiredSpeed() - knotsToMs(10)); else if (change.compare("fast") == 0) - desiredSpeed += knotsToMs(10); - if (desiredSpeed < 0) - desiredSpeed = 0; - - goToDestination(); /* Send the command to reach the destination */ + setDesiredSpeed(getDesiredSpeed() + knotsToMs(10)); } void Helicopter::changeAltitude(string change) { if (change.compare("descend") == 0) { - if (desiredAltitude > 100) - desiredAltitude -= ftToM(100); - else if (desiredAltitude > 0) - desiredAltitude -= ftToM(10); + if (getDesiredAltitude() > 100) + setDesiredAltitude(getDesiredAltitude() - ftToM(100)); + else if (getDesiredAltitude() > 0) + setDesiredAltitude(getDesiredAltitude() - ftToM(10)); } else if (change.compare("climb") == 0) { - if (desiredAltitude > 100) - desiredAltitude += ftToM(100); - else if (desiredAltitude >= 0) - desiredAltitude += ftToM(10); + if (getDesiredAltitude() > 100) + setDesiredAltitude(getDesiredAltitude() + ftToM(100)); + else if (getDesiredAltitude() >= 0) + setDesiredAltitude(getDesiredAltitude() + ftToM(10)); } - if (desiredAltitude < 0) - desiredAltitude = 0; - goToDestination(); /* Send the command to reach the destination */ -} + if (getDesiredAltitude() < 0) + setDesiredAltitude(0); +} \ No newline at end of file