]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/runwayprefs.cxx
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / Airports / runwayprefs.cxx
index a6112e44e569252c23bd641d38b2bda4a7df8b9b..8337d31f9fad3e60c7c8ea5430536fa4fe8bed47 100644 (file)
 #endif
 
 #include <math.h>
-//#include <algorithm>
 
 #include <simgear/compiler.h>
 
-//#include <plib/sg.h>
-//#include <plib/ul.h>
-
-//#include <Environment/environment_mgr.hxx>
-//#include <Environment/environment.hxx>
-//#include <simgear/misc/sg_path.hxx>
-//#include <simgear/props/props.hxx>
-//#include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/debug/logstream.hxx>
 #include <Main/globals.hxx>
-//#include <Main/fg_props.hxx>
 #include <Airports/runways.hxx>
 
 #include "runwayprefs.hxx"
@@ -194,7 +184,7 @@ RunwayGroup& RunwayGroup:: operator= (const RunwayGroup &other)
   return *this;
 }
 
-void RunwayGroup::setActive(const string &aptId
+void RunwayGroup::setActive(const FGAirport* airport
                            double windSpeed, 
                            double windHeading, 
                            double maxTail, 
@@ -202,7 +192,7 @@ void RunwayGroup::setActive(const string &aptId,
                            stringVec *currentlyActive)
 {
 
-  FGRunway rwy;
+  FGRunway* rwy;
   int activeRwys = rwyList.size(); // get the number of runways active
   int nrOfPreferences;
   // bool found = true;
@@ -234,16 +224,17 @@ void RunwayGroup::setActive(const string &aptId,
          //
          validSelection = true;
          for (int j = 0; j < activeRwys; j++)
-           {
-            
-             name = rwyList[j].getRwyList(i);
-             //cerr << "Name of Runway: " << name;
-             if (globals->get_runways()->search( aptId, 
-                                                 name, 
-                                                 &rwy))
-               {
-                 //cerr << "Succes" << endl;
-                 hdgDiff = fabs(windHeading - rwy._heading);
+    {
+      string ident(rwyList[j].getRwyList(i));
+      if (!airport->hasRunwayWithIdent(ident)) {
+        SG_LOG(SG_GENERAL, SG_WARN, "no such runway:" << ident << " at " << airport->ident());
+        continue;
+      }
+      
+            rwy = airport->getRunwayByIdent(ident);
+       
+                         //cerr << "Succes" << endl;
+                 hdgDiff = fabs(windHeading - rwy->headingDeg());
                  //cerr << "Wind Heading: " << windHeading << "Runway Heading: " <<rwy._heading << endl;
                  //cerr << "Wind Speed  : " << windSpeed << endl;
                  if (hdgDiff > 180)
@@ -263,12 +254,9 @@ void RunwayGroup::setActive(const string &aptId,
                    {
                      //cerr << ". [Valid] ";
                  }
-               }else {
-               SG_LOG( SG_GENERAL, SG_INFO, "Failed to find runway " << name << " at " << aptId );
-               exit(1);
-             }
-              //cerr << endl;
-           }
+                             //cerr << endl;
+    } // of active runways iteration
+      
          if (validSelection) 
            {
              //cerr << "Valid selection  : " << i << endl;;
@@ -311,15 +299,11 @@ void RunwayGroup::setActive(const string &aptId,
          bool validSelection = true;
          for (int j = 0; j < 2; j++)
            {
-             //cerr << "I J " << i << " " << j << endl;
-             name = rwyList[choice[j]].getRwyList(i);
-             //cerr << "Name of Runway: " << name << endl;
-             if (globals->get_runways()->search( aptId, 
-                                                 name, 
-                                                 &rwy))
-               {
+        name = rwyList[choice[j]].getRwyList(i);
+        rwy = airport->getRunwayByIdent(name);
+        
                  //cerr << "Succes" << endl;
-                 hdgDiff = fabs(windHeading - rwy._heading);
+                 hdgDiff = fabs(windHeading - rwy->headingDeg());
                  if (hdgDiff > 180)
                    hdgDiff = 360 - hdgDiff;
                  hdgDiff *= ((2*M_PI)/360.0); // convert to radians
@@ -327,10 +311,7 @@ void RunwayGroup::setActive(const string &aptId,
                  tailWind  = -windSpeed * cos(hdgDiff);
                  if ((tailWind > maxTail) || (crossWind > maxCross))
                    validSelection = false;
-               }else {
-                 SG_LOG( SG_GENERAL, SG_INFO, "Failed to find runway " << name << " at " << aptId );
-                 exit(1);
-               }
+               
 
            }
          if (validSelection)