]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/groundnetwork.cxx
- Added ultra-light traffic is now a separate traffic class that can have its
[flightgear.git] / src / Airports / groundnetwork.cxx
index 32a51692a3f7125ba9b50b0ec7389eea7ed26137..9e26374aa52903c069eb10c426f2d0d0308f8f22 100644 (file)
 
 #include "groundnetwork.hxx"
 
-SG_USING_STD(sort);
-
-/*****************************************************************************
- * Helper function for parsing position string
- ****************************************************************************/
-double processPosition(const string &pos)
-{
-  string prefix;
-  string subs;
-  string degree;
-  string decimal;
-  int sign = 1;
-  double value;
-  subs = pos;
-  prefix= subs.substr(0,1);
-  if (prefix == string("S") || (prefix == string("W")))
-    sign = -1;
-  subs    = subs.substr(1, subs.length());
-  degree  = subs.substr(0, subs.find(" ",0));
-  decimal = subs.substr(subs.find(" ",0), subs.length());
-  
-             
-  //cerr << sign << " "<< degree << " " << decimal << endl;
-  value = sign * (atof(degree.c_str()) + atof(decimal.c_str())/60.0);
-  //cerr << value <<endl;
-  //exit(1);
-  return value;
-}
-
-/**************************************************************************
- * FGTaxiNode
- *************************************************************************/
-FGTaxiNode::FGTaxiNode()
-{
-}
-
-void FGTaxiNode::sortEndSegments(bool byLength)
-{
-  if (byLength)
-    sort(next.begin(), next.end(), sortByLength);
-  else
-    sort(next.begin(), next.end(), sortByHeadingDiff);
-}
-
-
-bool compare_nodes(FGTaxiNode *a, FGTaxiNode *b) {
-return (*a) < (*b);
-}
-
 /***************************************************************************
  * FGTaxiSegment
  **************************************************************************/
@@ -159,17 +110,7 @@ void FGTaxiSegment::setCourseDiff(double crse)
     headingDiff = fabs(headingDiff - 360);
 }
 
-bool compare_segments(FGTaxiSegment *a, FGTaxiSegment *b) {
-return (*a) < (*b);
-}
 
-bool sortByHeadingDiff(FGTaxiSegment *a, FGTaxiSegment *b) {
-  return a->hasSmallerHeadingDiff(*b);
-}
-
-bool sortByLength(FGTaxiSegment *a, FGTaxiSegment *b) {
-  return a->getLength() > b->getLength();
-}
 /***************************************************************************
  * FGTaxiRoute
  **************************************************************************/
@@ -249,6 +190,13 @@ void FGTaxiRoute::rewind(int route)
 /***************************************************************************
  * FGGroundNetwork()
  **************************************************************************/
+bool compare_nodes(FGTaxiNode *a, FGTaxiNode *b) {
+return (*a) < (*b);
+}
+
+bool compare_segments(FGTaxiSegment *a, FGTaxiSegment *b) {
+return (*a) < (*b);
+}
 
 FGGroundNetwork::FGGroundNetwork()
 {
@@ -1063,7 +1011,6 @@ bool FGGroundNetwork::checkForCircularWaits(int id)
    TrafficVectorIterator i = activeTraffic.begin();
    int trafficSize = activeTraffic.size();
    if (trafficSize)  {
-        //while ((i->getId() != id) && i != activeTraffic.end()) 
         while (i != activeTraffic.end()) {
         if (i->getId() == id) {
            break;
@@ -1073,7 +1020,7 @@ bool FGGroundNetwork::checkForCircularWaits(int id)
   }
   else {
       return false;
-  } 
+  }
   if (i == activeTraffic.end() || (trafficSize == 0)) {
     SG_LOG(SG_GENERAL, SG_ALERT, "AI error: Trying to access non-existing aircraft in FGGroundNetwork::checkForCircularWaits");
   }
@@ -1082,6 +1029,13 @@ bool FGGroundNetwork::checkForCircularWaits(int id)
    target = current->getWaitsForId();
    //bool printed = false; // Note that this variable is for debugging purposes only.
    int counter = 0;
+
+   if (id == target) {
+       //cerr << "aircraft waits for user" << endl;
+       return false;
+   }
+
+
    while ((target > 0) && (target != id) && counter++ < trafficSize) {
     //printed = true;
      TrafficVectorIterator i = activeTraffic.begin();
@@ -1126,10 +1080,18 @@ bool FGGroundNetwork::checkForCircularWaits(int id)
     //     << " (" << other->getId()  << "); " << endl;;
     //current = other;
    }
+
+
+
+
+
+
    //if (printed)
    //   cerr << "[done] " << endl << endl;;
    if (id == target) {
-       SG_LOG(SG_GENERAL, SG_INFO, "Detected circular wait condition");
+       SG_LOG(SG_GENERAL, SG_ALERT, "Detected circular wait condition");
+       cerr << "Id = " << id << endl;
+       cerr << "target = " << target << endl;
        return true;
    } else {
    return false;