]> git.mxchange.org Git - flightgear.git/blobdiff - src/ATC/atis.cxx
fix another crash on exit by finally converting the rest of unguarded
[flightgear.git] / src / ATC / atis.cxx
index ea897c18a9ae08416475b8852f57c808306f14e0..c4caefdd6303212fa5d24e21fad2edc1228d3c26 100644 (file)
@@ -17,7 +17,7 @@
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 
 #ifdef HAVE_CONFIG_H
@@ -34,16 +34,10 @@ SG_USING_STD(string);
 #include STL_IOSTREAM
 SG_USING_STD(cout);
 
-//#include <simgear/debug/logstream.hxx>
-//#include <simgear/misc/sgstream.hxx>
 #include <simgear/misc/sg_path.hxx>
 
-#ifdef FG_WEATHERCM
-# include <WeatherCM/FGLocalWeatherDatabase.h>
-#else
-# include <Environment/environment_mgr.hxx>
-# include <Environment/environment.hxx>
-#endif
+#include <Environment/environment_mgr.hxx>
+#include <Environment/environment.hxx>
 
 #include <Main/fg_props.hxx>
 #include <Main/globals.hxx>
@@ -51,33 +45,29 @@ SG_USING_STD(cout);
 
 #include "atis.hxx"
 #include "commlist.hxx"
-//#include "atislist.hxx"
 #include "ATCdisplay.hxx"
 #include "ATCutils.hxx"
 #include "ATCmgr.hxx"
 
-// Constructor
 FGATIS::FGATIS() :
-display(false),
-displaying(false),
-transmission(""),
-trans_ident(""),
-atis_failed(false),
-refname("atis")
-//type(ATIS)
+       transmission(""),
+       trans_ident(""),
+       atis_failed(false),
+       refname("atis")
+       //type(ATIS)
 {
-       vPtr = globals->get_ATC_mgr()->GetVoicePointer(ATIS);
-       voiceOK = (vPtr == NULL ? false : true);
+       _vPtr = globals->get_ATC_mgr()->GetVoicePointer(ATIS);
+       _voiceOK = (_vPtr == NULL ? false : true);
+       _type = ATIS;
 }
 
-// Destructor
 FGATIS::~FGATIS() {
 }
 
 // Main update function - checks whether we are displaying or not the correct message.
 void FGATIS::Update(double dt) {
-       if(display) {
-               if(displaying) {
+       if(_display) {
+               if(_displaying) {
                        // Check if we need to update the message
                        // - basically every hour and if the weather changes significantly at the station
                        //globals->get_ATC_display()->ChangeRepeatingMessage(transmission);
@@ -86,14 +76,14 @@ void FGATIS::Update(double dt) {
                        UpdateTransmission();
                        //cout << "ATIS.CXX - calling ATCMgr to render transmission..." << endl;
                        Render(transmission, refname, true);
-                       displaying = true;
+                       _displaying = true;
                }
        } else {
                // We shouldn't be displaying
-               if(displaying) {
+               if(_displaying) {
                        //cout << "ATIS.CXX - calling NoRender()..." << endl;
                        NoRender(refname);
-                       displaying = false;
+                       _displaying = false;
                }
        }
 }
@@ -108,14 +98,9 @@ void FGATIS::UpdateTransmission() {
        int hours;
        // int minutes;
        
-       #ifdef FG_WEATHERCM
-       sgVec3 position = { lat, lon, elev };
-       FGPhysicalProperty stationweather = WeatherDatabase->get(position);
-       #else
        FGEnvironment stationweather =
             ((FGEnvironmentMgr *)globals->get_subsystem("environment"))
-              ->getEnvironment(lat, lon, elev);
-       #endif
+              ->getEnvironment(lat, lon, 0.0);
        
        transmission = "";
        
@@ -145,11 +130,7 @@ void FGATIS::UpdateTransmission() {
        
        // Get the temperature
        int temp;
-       #ifdef FG_WEATHERCM
-       temp = int(stationweather.Temperature - 273.15);
-       #else
        temp = (int)stationweather.get_temperature_degc();
-       #endif
        
        // HACK ALERT - at the moment the new environment subsystem returns bogus temperatures
        // FIXME - take out this hack when this gets fixed upstream
@@ -168,11 +149,7 @@ void FGATIS::UpdateTransmission() {
        transmission += " degrees_Celsius";
        
        // Get the visibility
-       #ifdef FG_WEATHERCM
-       visibility = fgGetDouble("/environment/visibility-m");
-       #else
        visibility = stationweather.get_visibility_m();
-       #endif
        sprintf(buf, "%i", int(visibility/1600));
        transmission += " / Visibility ";
        tempstr1 = buf;
@@ -203,53 +180,20 @@ void FGATIS::UpdateTransmission() {
        }
        
        // Get the pressure / altimeter
-       
-       #ifndef FG_WEATHERCM
-       double altimeter = stationweather.get_pressure_sea_level_inhg();
-       sprintf(buf, "%.2f", altimeter);
+       double P = fgGetDouble("/environment/pressure-sea-level-inhg");
+       if(ident.substr(0,2) == "EG" && fgGetBool("/sim/atc/use-millibars") == true) {
+               // Convert to millibars for the UK!
+               P *= 33.864;
+               sprintf(buf, "%.0f", P);
+       } else {
+               sprintf(buf, "%.2f", P);
+       }               
        transmission += " / Altimeter ";
        tempstr1 = buf;
        transmission += ConvertNumToSpokenDigits(tempstr1);
-       #endif
        
        // Based on the airport-id and wind get the active runway
        //FGRunway *r;
-       SGPath path( globals->get_fg_root() );
-       path.append( "Airports" );
-       path.append( "runways.mk4" );
-       FGRunways runways( path.c_str() );
-       
-       #ifdef FG_WEATHERCM
-       //Set the heading to into the wind
-       double wind_x = stationweather.Wind[0];
-       double wind_y = stationweather.Wind[1];
-       
-       double speed = sqrt( wind_x*wind_x + wind_y*wind_y ) * SG_METER_TO_NM / (60.0*60.0);
-       double hdg;
-       
-       //If no wind use 270degrees
-       if(speed == 0) {
-               hdg = 270;
-               transmission += " / Winds_light_and_variable";
-       } else {
-               // //normalize the wind to get the direction
-               //wind_x /= speed; wind_y /= speed;
-               
-               hdg = - atan2 ( wind_x, wind_y ) * SG_RADIANS_TO_DEGREES ;
-               if (hdg < 0.0)
-                       hdg += 360.0;
-               
-               //add a description of the wind to the transmission
-               char buf5[10];
-               char buf6[10];
-               sprintf(buf5, "%i", int(speed));
-               sprintf(buf6, "%i", int(hdg));
-               tempstr1 = buf5;
-               tempstr2 = buf6;
-               transmission = transmission + " / Winds " + ConvertNumToSpokenDigits(tempstr1) + " knots from "
-                                           + ConvertNumToSpokenDigits(tempstr2) + " degrees";
-       }
-       #else
        double speed = stationweather.get_wind_speed_kt();
        double hdg = stationweather.get_wind_from_heading_deg();
        if (speed == 0) {
@@ -267,10 +211,9 @@ void FGATIS::UpdateTransmission() {
                transmission = transmission + " / Winds " + ConvertNumToSpokenDigits(tempstr1) + " knots from "
                                            + ConvertNumToSpokenDigits(tempstr2) + " degrees";
        }
-       #endif
        
-       string rwy_no = runways.search(ident, int(hdg));
-       if(rwy_no != (string)"NN") {
+       string rwy_no = globals->get_runways()->search(ident, int(hdg));
+       if(rwy_no != "NN") {
                transmission += " / Landing_and_departing_runway ";
                transmission += ConvertRwyNumToSpokenString(atoi(rwy_no.c_str()));
                //cout << "in atis.cxx, r.rwy_no = " << rwy_no << " r.id = " << r->id << " r.heading = " << r->heading << endl;