X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FATCDCL%2FATC.hxx;h=2109b697be8c72bf556866d4eb33ad5e2ab5bb9e;hb=b26705d3bef4044ee9ff92bb6e4f0af3c53c49b9;hp=adb62264ec896dad68dad2932a3633e504af758b;hpb=7a14ec7e320bd2786a041e8801b79cd87d6dc1d1;p=flightgear.git diff --git a/src/ATCDCL/ATC.hxx b/src/ATCDCL/ATC.hxx index adb62264e..2109b697b 100644 --- a/src/ATCDCL/ATC.hxx +++ b/src/ATCDCL/ATC.hxx @@ -24,15 +24,19 @@ #include #include +#include #include #include #include +#include #include #include #include "ATCVoice.hxx" +class SGSampleGroup; + // Convert a frequency in MHz to tens of kHz // so we can use it e.g. as an index into commlist_freq // @@ -46,25 +50,6 @@ inline int kHz10(double freq) if (freq > 1000.) return int(freq); return int(freq*100.0 + 0.25); } - -enum plane_type { - UNKNOWN, - GA_SINGLE, - GA_HP_SINGLE, - GA_TWIN, - GA_JET, - MEDIUM, - HEAVY, - MIL_JET -}; - -// PlaneRec - a structure holding ATC-centric details of planes under control -// This might move or change eventually -struct PlaneRec { - plane_type type; - std::string callsign; - int squawkcode; -}; // Possible types of ATC type that the radios may be tuned to. // INVALID implies not tuned in to anything. @@ -76,16 +61,17 @@ enum atc_type { APPROACH, DEPARTURE, ENROUTE, - INVALID /* must be last element; see ATC_NUM_TYPES */ + INVALID /* must be last element; see ATC_NUM_TYPES */ }; const int ATC_NUM_TYPES = 1 + INVALID; // DCL - new experimental ATC data store struct ATCData { + ATCData() : type(INVALID), cart(0, 0, 0), freq(0), range(0) {} atc_type type; - SGGeod geod; - SGVec3d cart; + SGGeod geod; + SGVec3d cart; unsigned short int freq; unsigned short int range; std::string ident; @@ -95,6 +81,7 @@ struct ATCData { // perhaps we could use an FGRunway instead of this. // That wouldn't cache the orthopos though. struct RunwayDetails { + RunwayDetails() : end1ortho(0, 0, 0), end2ortho(0, 0, 0), hdg(0), length(-1), width(-1) {} SGGeod threshold_pos; SGVec3d end1ortho; // ortho projection end1 (the threshold ATM) SGVec3d end2ortho; // ortho projection end2 (the take off end in the current hardwired scheme) @@ -108,13 +95,13 @@ struct RunwayDetails { std::ostream& operator << (std::ostream& os, atc_type atc); class FGATC { - friend class FGATCMgr; + friend class FGATCMgr; public: FGATC(); virtual ~FGATC(); - virtual void Init()=0; + virtual void Init()=0; // Run the internal calculations // Derived classes should call this method from their own Update methods if they @@ -124,12 +111,6 @@ public: // Recieve a coded callback from the ATC menu system based on the user's selection virtual void ReceiveUserCallback(int code); - // Add plane to a stack - virtual void AddPlane(const std::string& pid); - - // Remove plane from stack - virtual int RemovePlane(); - // Indicate that this instance should output to the display if appropriate inline void SetDisplay() { _display = true; } @@ -176,72 +157,65 @@ protected: // Outputs the transmission either on screen or as audio depending on user preference // The refname is a string to identify this sample to the sound manager // The repeating flag indicates whether the message should be repeated continuously or played once. - void Render(std::string& msg, const double volume = 1.0, - const std::string& refname = "", bool repeating = false); + void Render(std::string& msg, const float volume = 1.0, + const std::string& refname = "", bool repeating = false); // Cease rendering all transmission from this station. // Requires the sound manager refname if audio, else "". void NoRender(const std::string& refname); - // Transmit a message when channel becomes free of other dialog - void Transmit(int callback_code = 0); - - // Transmit a message if channel becomes free within timeout (seconds). timeout of zero implies no limit - void ConditionalTransmit(double timeout, int callback_code = 0); - - // Transmit regardless of other dialog on the channel eg emergency - void ImmediateTransmit(int callback_code = 0); - - virtual void ProcessCallback(int code); - SGGeod _geod; SGVec3d _cart; int freq; - std::map active_on; + std::map active_on; int range; - std::string ident; // Code of the airport its at. - std::string name; // Name transmitted in the broadcast. + std::string ident; // Code of the airport its at. + std::string name; // Name transmitted in the broadcast. // Rendering related stuff - bool _voice; // Flag - true if we are using voice - bool _playing; // Indicates a message in progress - bool _voiceOK; // Flag - true if at least one voice has loaded OK + bool _voice; // Flag - true if we are using voice + bool _playing; // Indicates a message in progress + bool _voiceOK; // Flag - true if at least one voice has loaded OK FGATCVoice* _vPtr; + SGSharedPtr _sgr; // default sample group; + - bool freqClear; // Flag to indicate if the frequency is clear of ongoing dialog - bool receiving; // Flag to indicate we are receiving a transmission + bool freqClear; // Flag to indicate if the frequency is clear of ongoing dialog + bool receiving; // Flag to indicate we are receiving a transmission - double responseTime; // Time to take from end of request transmission to beginning of response - // The idea is that this will be slightly random. + double responseTime; // Time to take from end of request transmission to beginning of response + // The idea is that this will be slightly random. - bool respond; // Flag to indicate now is the time to respond - ie set following the count down of the response timer. + bool respond; // Flag to indicate now is the time to respond - ie set following the count down of the response timer. std::string responseID; // ID of the plane to respond to - bool runResponseCounter; // Flag to indicate the response counter should be run - double responseCounter; // counter to implement the above + bool runResponseCounter; // Flag to indicate the response counter should be run + double responseCounter; // counter to implement the above // Derived classes only need monitor this flag, and use the response ID, as long as they call FGATC::Update(...) bool _runReleaseCounter; // A timer for releasing the frequency after giving the message enough time to display - bool responseReqd; // Flag to indicate we should be responding to a request/report + bool responseReqd; // Flag to indicate we should be responding to a request/report double _releaseTime; double _releaseCounter; - atc_type _type; - bool _display; // Flag to indicate whether we should be outputting to the ATC display. - std::string pending_transmission; // derived classes set this string before calling Transmit(...) + atc_type _type; + bool _display; // Flag to indicate whether we should be outputting to the ATC display. + std::string pending_transmission; // derived classes set this string before calling Transmit(...) private: // Transmission timing stuff. double _timeout; - bool _pending; - - int _callback_code; // A callback code to be notified and processed by the derived classes - // A value of zero indicates no callback required + bool _pending; bool _transmit; // we are to transmit bool _transmitting; // we are transmitting double _counter; double _max_count; + + SGPropertyNode_ptr _volume; + SGPropertyNode_ptr _enabled; + SGPropertyNode_ptr _atc_external; + SGPropertyNode_ptr _internal; }; std::istream& operator>> ( std::istream& fin, ATCData& a );