X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FAIModel%2FAIFlightPlan.hxx;h=bfd445b27b54ef4ff33064953c7ced2493178ac3;hb=d70e26d87b5294315ca6d67b8c11fabe51abbc4b;hp=aef864841187d6e4720398edb8dfa4b56bf4e72c;hpb=c6062ad93cf3bfbffb6dec63cd6844167bb56980;p=flightgear.git diff --git a/src/AIModel/AIFlightPlan.hxx b/src/AIModel/AIFlightPlan.hxx index aef864841..bfd445b27 100644 --- a/src/AIModel/AIFlightPlan.hxx +++ b/src/AIModel/AIFlightPlan.hxx @@ -14,28 +14,24 @@ // // 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 St, Fifth Floor, Boston, MA 02110-1301, USA. #ifndef _FG_AIFLIGHTPLAN_HXX #define _FG_AIFLIGHTPLAN_HXX -#include #include #include - -class FGTaxiRoute; -class FGRunway; -class FGAIAircraft; -class FGAirport; -class SGGeod; +#include +#include +#include +#include +#include class FGAIWaypoint { private: std::string name; - double latitude; - double longitude; - double altitude; + SGGeod pos; double speed; double crossat; bool finished; @@ -50,10 +46,11 @@ private: public: FGAIWaypoint(); ~FGAIWaypoint() {}; - void setName (std::string nam) { name = nam; }; - void setLatitude (double lat) { latitude = lat; }; - void setLongitude (double lon) { longitude = lon; }; - void setAltitude (double alt) { altitude = alt; }; + void setName (const std::string& nam) { name = nam; }; + void setLatitude (double lat); + void setLongitude (double lon); + void setAltitude (double alt); + void setPos (const SGGeod& aPos) { pos = aPos; } void setSpeed (double spd) { speed = spd; }; void setCrossat (double val) { crossat = val; }; void setFinished (bool fin) { finished = fin; }; @@ -63,14 +60,15 @@ public: void setRouteIndex (int rte) { routeIndex = rte; }; void setTime_sec (double ts ) { time_sec = ts; }; void setTrackLength (double tl ) { trackLength = tl; }; - void setTime (std::string tme) { time = tme; }; + void setTime (const std::string& tme) { time = tme; }; - bool contains(std::string name); + bool contains(const std::string& name); - std::string getName () { return name; }; - double getLatitude () { return latitude; }; - double getLongitude () { return longitude; }; - double getAltitude () { return altitude; }; + const std::string& getName() { return name; }; + const SGGeod& getPos () { return pos; }; + double getLatitude (); + double getLongitude (); + double getAltitude (); double getSpeed () { return speed; }; double getCrossat () { return crossat; }; @@ -81,7 +79,7 @@ public: bool isFinished () { return finished; }; double getTime_sec () { return time_sec; }; double getTrackLength() { return trackLength; }; - std::string getTime () { return time; }; + const std::string& getTime () { return time; }; }; @@ -122,20 +120,20 @@ public: void setLeadDistance(double distance_ft); double getLeadDistance( void ) const {return lead_distance;} double getBearing(FGAIWaypoint* previous, FGAIWaypoint* next) const; - double getBearing(double lat, double lon, FGAIWaypoint* next) const; - double checkTrackLength(std::string wptName); + double getBearing(const SGGeod& aPos, FGAIWaypoint* next) const; + + double checkTrackLength(const std::string& wptName) const; time_t getStartTime() const { return start_time; } time_t getArrivalTime() const { return arrivalTime; } bool create(FGAIAircraft *, FGAirport *dep, FGAirport *arr, int leg, double alt, double speed, double lat, double lon, bool firstLeg, double radius, const std::string& fltType, const std::string& aircraftType, const std::string& airline, double distance); - bool createPushBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&); + bool createPushBack(FGAIAircraft *, bool, FGAirport*, double radius, const std::string&, const std::string&, const std::string&); bool createTakeOff(FGAIAircraft *, bool, FGAirport *, double, const std::string&); void setLeg(int val) { leg = val;} void setTime(time_t st) { start_time = st; } - int getGate() const { return gateId; } - void setGate(int id) { gateId = id; }; + double getLeadInAngle() const { return leadInAngle; } const std::string& getRunway() const; @@ -144,21 +142,21 @@ public: bool getRepeat(void) const { return repeat; } void restart(void); int getNrOfWayPoints() { return waypoints.size(); } - int getRouteIndex(int i); // returns the AI related index of this current routes. - FGTaxiRoute *getTaxiRoute() { return taxiRoute; } - void deleteTaxiRoute(); - std::string getRunway() { return activeRunway; } + + int getRouteIndex(int i); // returns the AI related index of this current routes. + + const std::string& getRunway() { return activeRunway; } bool isActive(time_t time) {return time >= this->getStartTime();} void incrementLeg() { leg++;}; - void setRunway(std::string rwy) { activeRunway = rwy; }; - std::string getRunwayClassFromTrafficType(std::string fltType); + void setRunway(const std::string& rwy) { activeRunway = rwy; }; + const char* getRunwayClassFromTrafficType(const std::string& fltType); void addWaypoint(FGAIWaypoint* wpt) { waypoints.push_back(wpt); }; - void setName(std::string n) { name = n; }; - std::string getName() { return name; }; + void setName(const std::string& n) { name = n; }; + const std::string& getName() { return name; }; void setSID(FGAIFlightPlan* fp) { sid = fp;}; FGAIFlightPlan* getSID() { return sid; }; @@ -167,6 +165,9 @@ public: void shortenToFirst(unsigned int number, std::string name); + void setGate(const ParkingAssignment& pka); + FGParking* getParkingGate(); + private: FGAIFlightPlan *sid; typedef std::vector wpt_vector_type; @@ -183,14 +184,15 @@ private: time_t start_time; time_t arrivalTime; // For AI/ATC purposes. int leg; - int gateId, lastNodeVisited; + ParkingAssignment gate; + PositionedID lastNodeVisited; std::string activeRunway; - FGTaxiRoute *taxiRoute; std::string name; bool isValid; - - void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double, double, double, const std::string&, const std::string&, const std::string&); - bool createClimb(FGAIAircraft *, bool, FGAirport *, double, double, const std::string&); + FGAirportRef departure, arrival; + + void createPushBackFallBack(FGAIAircraft *, bool, FGAirport*, double radius, const std::string&, const std::string&, const std::string&); + bool createClimb(FGAIAircraft *, bool, FGAirport *, FGAirport* arrival, double, double, const std::string&); bool createCruise(FGAIAircraft *, bool, FGAirport*, FGAirport*, double, double, double, double, const std::string&); bool createDescent(FGAIAircraft *, FGAirport *, double latitude, double longitude, double speed, double alt,const std::string&, double distance); bool createLanding(FGAIAircraft *, FGAirport *, const std::string&); @@ -215,6 +217,28 @@ private: //void createCruiseFallback(bool, FGAirport*, FGAirport*, double, double, double, double); void evaluateRoutePart(double deplat, double deplon, double arrlat, double arrlon); + + /** + * look for and parse an PropertyList flight-plan file - essentially + * a flat list waypoint objects, encoded to properties + */ + bool parseProperties(const std::string& filename); + + void createWaypoints(FGAIAircraft *ac, + double course, + time_t start, + FGAirport *dep, + FGAirport *arr, + bool firstLeg, + double radius, + double alt, + double lat, + double lon, + double speed, + const std::string& fltType, + const std::string& acType, + const std::string& airline); + public: wpt_vector_iterator getFirstWayPoint() { return waypoints.begin(); }; wpt_vector_iterator getLastWayPoint() { return waypoints.end(); };