]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/groundnetwork.hxx
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / Airports / groundnetwork.hxx
index 3ed63e8c9b4b47118a34bf7e6be3b28051cdfb45..fe83d4df25cd51b4db5e2b4fcac2001b9836628d 100644 (file)
 #include <simgear/compiler.h>
 #include <simgear/route/waypoint.hxx>
 
-#include STL_STRING
+#include <string>
 #include <vector>
 
-SG_USING_STD(string);
-SG_USING_STD(vector);
+using std::string;
+using std::vector;
 
 #include "gnnode.hxx"
 #include "parking.hxx"
-#include "trafficcontrol.hxx"
+#include <ATC/trafficcontrol.hxx>
 
 class FGTaxiSegment; // forward reference
 class FGAIFlightPlan; // forward reference
@@ -59,6 +59,7 @@ private:
   double course;
   double headingDiff;
   bool isActive;
+  bool isPushBackRoute;
   FGTaxiNode *start;
   FGTaxiNode *end;
   int index;
@@ -67,8 +68,51 @@ private:
  
 
 public:
-  FGTaxiSegment();
-  //FGTaxiSegment(FGTaxiNode *, FGTaxiNode *, int);
+  FGTaxiSegment() :
+      startNode(0),
+      endNode(0),
+      length(0),
+      course(0),
+      headingDiff(0),
+      isActive(0),
+      isPushBackRoute(0),
+      start(0),
+      end(0),
+      index(0),
+      oppositeDirection(0)
+  {
+  };
+
+  FGTaxiSegment         (const FGTaxiSegment &other) :
+      startNode         (other.startNode),
+      endNode           (other.endNode),
+      length            (other.length),
+      course            (other.course),
+      headingDiff       (other.headingDiff),
+      isActive          (other.isActive),
+      isPushBackRoute   (other.isPushBackRoute),
+      start             (other.start),
+      end               (other.end),
+      index             (other.index),
+      oppositeDirection (other.oppositeDirection)
+  {
+  };
+
+  FGTaxiSegment& operator=(const FGTaxiSegment &other)
+  {
+      startNode          = other.startNode;
+      endNode            = other.endNode;
+      length             = other.length;
+      course             = other.course;
+      headingDiff        = other.headingDiff;
+      isActive           = other.isActive;
+      isPushBackRoute    = other.isPushBackRoute;
+      start              = other.start;
+      end                = other.end;
+      index              = other.index;
+      oppositeDirection  = other.oppositeDirection;
+      return *this;
+  };
 
   void setIndex        (int val) { index     = val; };
   void setStartNodeRef (int val) { startNode = val; };
@@ -78,14 +122,19 @@ public:
 
   void setStart(FGTaxiNodeVector *nodes);
   void setEnd  (FGTaxiNodeVector *nodes);
+  void setPushBackType(bool val) { isPushBackRoute = val; };
   void setTrackDistance();
 
   FGTaxiNode * getEnd() { return end;};
   FGTaxiNode * getStart() { return start; };
   double getLength() { return length; };
   int getIndex() { return index; };
+  
+  bool isPushBack() { return isPushBackRoute; };
 
- FGTaxiSegment *getAddress() { return this;};
+  int getPenalty(int nGates);
+
+  FGTaxiSegment *getAddress() { return this;};
 
   bool operator<(const FGTaxiSegment &other) const { return index < other.index; };
   bool hasSmallerHeadingDiff (const FGTaxiSegment &other) const { return headingDiff < other.headingDiff; };
@@ -113,7 +162,7 @@ private:
   intVec nodes;
   intVec routes;
   double distance;
-  int depth;
+//  int depth;
   intVecIterator currNode;
   intVecIterator currRoute;
 
@@ -124,14 +173,14 @@ public:
     routes = rts;
     distance = dist; 
     currNode = nodes.begin();
-    depth = dpth;
+//    depth = dpth;
   };
 
   FGTaxiRoute& operator= (const FGTaxiRoute &other) {
     nodes = other.nodes;
     routes = other.routes;
     distance = other.distance;
-    depth = other.depth;
+//    depth = other.depth;
     currNode = nodes.begin();
     currRoute = routes.begin();
     return *this;
@@ -141,7 +190,7 @@ public:
     nodes(copy.nodes),
     routes(copy.routes),
     distance(copy.distance),
-    depth(copy.depth),
+//    depth(copy.depth),
     currNode(nodes.begin()),
     currRoute(routes.begin())
   {};
@@ -154,7 +203,7 @@ public:
   
   void first() { currNode = nodes.begin(); currRoute = routes.begin(); };
   int size() { return nodes.size(); };
-  int getDepth() { return depth; };
+//  int getDepth() { return depth; };
 };
 
 typedef vector<FGTaxiRoute> TaxiRouteVector;
@@ -170,28 +219,28 @@ private:
   //int maxDepth;
   int count;
   FGTaxiNodeVector    nodes;
+  FGTaxiNodeVector    pushBackNodes;
   FGTaxiSegmentVector segments;
   //intVec route;
-  intVec nodesStack;
-  intVec routesStack;
+  //intVec nodesStack;
+  //intVec routesStack;
   TaxiRouteVector routes;
   TrafficVector activeTraffic;
   TrafficVectorIterator currTraffic;
-  SGWayPoint destination;
-  
+
   bool foundRoute;
   double totalDistance, maxDistance;
   FGTowerController *towerController;
   FGAirport *parent;
-  
 
-  void printRoutingError(string);
+
+  //void printRoutingError(string);
 
   void checkSpeedAdjustment(int id, double lat, double lon, 
                            double heading, double speed, double alt);
   void checkHoldPosition(int id, double lat, double lon, 
                         double heading, double speed, double alt);
-  
+
 public:
   FGGroundNetwork();
   ~FGGroundNetwork();
@@ -203,17 +252,22 @@ public:
   void init();
   bool exists() { return hasNetwork; };
   void setTowerController(FGTowerController *twrCtrlr) { towerController = twrCtrlr; };
+
   int findNearestNode(double lat, double lon);
-  FGTaxiNode *findNode(int idx);
-  FGTaxiSegment *findSegment(int idx);
-  FGTaxiRoute findShortestRoute(int start, int end);
+  int findNearestNode(const SGGeod& aGeod);
+
+  FGTaxiNode *findNode(unsigned idx);
+  FGTaxiSegment *findSegment(unsigned idx);
+  FGTaxiRoute findShortestRoute(int start, int end, bool fullSearch=true);
   //void trace(FGTaxiNode *, int, int, double dist);
 
+  int getNrOfNodes() { return nodes.size(); };
+
   void setParent(FGAirport *par) { parent = par; };
 
   virtual void announcePosition(int id, FGAIFlightPlan *intendedRoute, int currentRoute, 
                                double lat, double lon, double hdg, double spd, double alt, 
-                               double radius, int leg, string callsign);
+                               double radius, int leg, FGAIAircraft *aircraft);
   virtual void signOff(int id);
   virtual void update(int id, double lat, double lon, double heading, double speed, double alt, double dt);
   virtual bool hasInstruction(int id);