X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAirports%2Fgroundnetwork.hxx;h=fe83d4df25cd51b4db5e2b4fcac2001b9836628d;hb=386aefe69358ce41a11c9afeb8f56e26758fe56b;hp=3ed63e8c9b4b47118a34bf7e6be3b28051cdfb45;hpb=b452234cb203c3336cfc5299be8ff4789a0eb416;p=flightgear.git diff --git a/src/Airports/groundnetwork.hxx b/src/Airports/groundnetwork.hxx index 3ed63e8c9..fe83d4df2 100644 --- a/src/Airports/groundnetwork.hxx +++ b/src/Airports/groundnetwork.hxx @@ -27,15 +27,15 @@ #include #include -#include STL_STRING +#include #include -SG_USING_STD(string); -SG_USING_STD(vector); +using std::string; +using std::vector; #include "gnnode.hxx" #include "parking.hxx" -#include "trafficcontrol.hxx" +#include 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 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);