X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FATC%2Ftrafficcontrol.hxx;h=fcbaf9bf07a2a029a1bdd3c47b25991294074ab1;hb=ed434d9967b0b23e4abb172d699ef956246f4bf9;hp=2550f7cb6adbee7d53820a2a0a6ed76a03197241;hpb=52b0baace1d3ef636b4e1c8f8f1bd047f8d0b023;p=flightgear.git diff --git a/src/ATC/trafficcontrol.hxx b/src/ATC/trafficcontrol.hxx index 2550f7cb6..fcbaf9bf0 100644 --- a/src/ATC/trafficcontrol.hxx +++ b/src/ATC/trafficcontrol.hxx @@ -26,6 +26,10 @@ # error This library requires C++ #endif +#include +#include +#include +#include #include // There is probably a better include than sg_geodesy to get the SG_NM_TO_METER... @@ -34,8 +38,6 @@ #include #include - - #include #include @@ -50,6 +52,7 @@ typedef vector::iterator intVecIterator; class FGAIFlightPlan; // forward reference class FGGroundNetwork; // forward reference class FGAIAircraft; // forward reference +class FGAirportDynamics; /************************************************************************************** * class FGATCInstruction @@ -184,6 +187,8 @@ public: void allowRepeatedTransmissions () { allowTransmission=true; }; void nextFrequency() { frequencyId++; }; int getNextFrequency() { return frequencyId; }; + intVec& getIntentions() { return intentions; }; + int getCurrentPosition() { return currentPos; }; }; typedef vector TrafficVector; @@ -225,15 +230,19 @@ typedef vector::iterator ActiveRunwayVecIterator; *************************************************************************************/ class FGATCController { +private: + bool initialized; + protected: bool available; time_t lastTransmission; double dt_count; - + osg::Group* group; string formatATCFrequency3_2(int ); string genTransponderCode(string fltRules); + bool isUserAircraft(FGAIAircraft*); public: typedef enum { @@ -260,6 +269,8 @@ public: ATC_GROUND_TO_AIR } AtcMsgDir; FGATCController(); virtual ~FGATCController(); + void init(); + virtual void announcePosition(int id, FGAIFlightPlan *intendedRoute, int currentRoute, double lat, double lon, double hdg, double spd, double alt, double radius, int leg, @@ -272,8 +283,15 @@ public: double getDt() { return dt_count; }; void setDt(double dt) { dt_count = dt;}; - void transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir msgDir); + void transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir msgDir, bool audible); string getGateName(FGAIAircraft *aircraft); + virtual void render(bool) = 0; + virtual string getName() = 0; + + +private: + + AtcMsgDir lastTransmissionDirection; }; /****************************************************************************** @@ -284,9 +302,10 @@ class FGTowerController : public FGATCController private: TrafficVector activeTraffic; ActiveRunwayVec activeRunways; + FGAirportDynamics *parent; public: - FGTowerController(); + FGTowerController(FGAirportDynamics *parent); virtual ~FGTowerController() {}; virtual void announcePosition(int id, FGAIFlightPlan *intendedRoute, int currentRoute, double lat, double lon, @@ -298,6 +317,8 @@ public: virtual bool hasInstruction(int id); virtual FGATCInstruction getInstruction(int id); + virtual void render(bool); + virtual string getName(); bool hasActiveTraffic() { return activeTraffic.size() != 0; }; TrafficVector &getActiveTraffic() { return activeTraffic; }; }; @@ -312,9 +333,10 @@ class FGStartupController : public FGATCController private: TrafficVector activeTraffic; //ActiveRunwayVec activeRunways; + FGAirportDynamics *parent; public: - FGStartupController(); + FGStartupController(FGAirportDynamics *parent); virtual ~FGStartupController() {}; virtual void announcePosition(int id, FGAIFlightPlan *intendedRoute, int currentRoute, double lat, double lon, @@ -326,9 +348,16 @@ public: virtual bool hasInstruction(int id); virtual FGATCInstruction getInstruction(int id); + virtual void render(bool); + virtual string getName(); + bool hasActiveTraffic() { return activeTraffic.size() != 0; }; TrafficVector &getActiveTraffic() { return activeTraffic; }; + // Hpoefully, we can move this function to the base class, but I need to verify what is needed for the other controllers before doing so. + bool checkTransmissionState(int st, time_t now, time_t startTime, TrafficVectorIterator i, AtcMsgId msgId, + AtcMsgDir msgDir); + }; /****************************************************************************** @@ -339,10 +368,11 @@ class FGApproachController : public FGATCController private: TrafficVector activeTraffic; ActiveRunwayVec activeRunways; + FGAirportDynamics *parent; public: - FGApproachController(); - virtual ~FGApproachController() {}; + FGApproachController(FGAirportDynamics * parent); + virtual ~FGApproachController() { }; virtual void announcePosition(int id, FGAIFlightPlan *intendedRoute, int currentRoute, double lat, double lon, double hdg, double spd, double alt, double radius, int leg, @@ -353,6 +383,9 @@ public: virtual bool hasInstruction(int id); virtual FGATCInstruction getInstruction(int id); + virtual void render(bool); + virtual string getName(); + ActiveRunway* getRunway(string name); bool hasActiveTraffic() { return activeTraffic.size() != 0; };