X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FTraffic%2FSchedule.hxx;h=bfda8c0fe4e4ea532d7febf14628b60d3e1e325e;hb=b090d3dabce3ad1261fb4b514cb71ed0c8a4d29b;hp=a79585e0bf12ddc2a81fa1482a089deb371504d8;hpb=8c2e595ff0d913af24ee3ef88777137163ea6d3c;p=flightgear.git diff --git a/src/Traffic/Schedule.hxx b/src/Traffic/Schedule.hxx index a79585e0b..bfda8c0fe 100644 --- a/src/Traffic/Schedule.hxx +++ b/src/Traffic/Schedule.hxx @@ -29,69 +29,107 @@ #ifndef _FGSCHEDULE_HXX_ #define _FGSCHEDULE_HXX_ -#define TRAFFICTOAIDIST 150.0 +#define TRAFFICTOAIDISTTOSTART 150.0 +#define TRAFFICTOAIDISTTODIE 200.0 class FGAISchedule { private: string modelPath; + string homePort; string livery; string registration; string airline; string acType; string m_class; string flightType; + string flightIdentifier; + string currentDestination; bool heavy; FGScheduledFlightVec flights; - float lat; - float lon; + SGGeod position; double radius; double groundOffset; double distanceToUser; int AIManagerRef; - int score; + double score; + unsigned int runCount; + unsigned int hits; bool firstRun; + double courseToDest; + bool initialized; - + void scheduleFlights(); + + /** + * Transition this schedule from distant mode to AI mode; + * create the AIAircraft (and flight plan) and register with the AIManager + */ + bool createAIAircraft(FGScheduledFlight* flight, double speedKnots, time_t deptime); + public: FGAISchedule(); // constructor - FGAISchedule(string, string, string, bool, string, string, string, string, double, double, - int, FGScheduledFlightVec); // construct & init + FGAISchedule(string model, + string livery, + string homePort, + string registration, + string flightId, + bool heavy, + string acType, + string airline, + string m_class, + string flight_type, + double radius, + double offset); // construct & init FGAISchedule(const FGAISchedule &other); // copy constructor + + ~FGAISchedule(); //destructor - bool update(time_t now); + bool update(time_t now, const SGVec3d& userCart); bool init(); double getSpeed (); //void setClosestDistanceToUser(); - void next(); // forces the schedule to move on to the next flight. + bool next(); // forces the schedule to move on to the next flight. - time_t getDepartureTime () { return flights.begin()->getDepartureTime (); }; - FGAirport * getDepartureAirport () { return flights.begin()->getDepartureAirport(); }; - FGAirport * getArrivalAirport () { return flights.begin()->getArrivalAirport (); }; - int getCruiseAlt () { return flights.begin()->getCruiseAlt (); }; + // TODO: rework these four functions + time_t getDepartureTime () { return (*flights.begin())->getDepartureTime (); }; + FGAirport * getDepartureAirport () { return (*flights.begin())->getDepartureAirport(); }; + FGAirport * getArrivalAirport () { return (*flights.begin())->getArrivalAirport (); }; + int getCruiseAlt () { return (*flights.begin())->getCruiseAlt (); }; double getRadius () { return radius; }; double getGroundOffset () { return groundOffset;}; const string& getFlightType () { return flightType;}; const string& getAirline () { return airline; }; const string& getAircraft () { return acType; }; - const string& getCallSign () { return flights.begin()->getCallSign (); }; + const string& getCallSign () { return (*flights.begin())->getCallSign (); }; const string& getRegistration () { return registration;}; + const string& getFlightRules () { return (*flights.begin())->getFlightRules (); }; bool getHeavy () { return heavy; }; + double getCourse () { return courseToDest; }; + unsigned int getRunCount () { return runCount; }; + unsigned int getHits () { return hits; }; + + void setrunCount(unsigned int count) { runCount = count; }; + void setHits (unsigned int count) { hits = count; }; + void setScore () { score = runCount ? ((double) hits / (double) runCount) : 0; }; + double getScore () { return score; }; + FGScheduledFlight*findAvailableFlight (const string ¤tDestination, const string &req); // used to sort in decending order of score: I've probably found a better way to // decending order sorting, but still need to test that. bool operator< (const FGAISchedule &other) const { return (score > other.score); }; //void * getAiRef () { return AIManagerRef; }; //FGAISchedule* getAddress () { return this;}; - // More member functions follow later }; -typedef vector ScheduleVector; -typedef vector::iterator ScheduleVectorIterator; +typedef vector ScheduleVector; +typedef vector::iterator ScheduleVectorIterator; + +bool compareSchedules(FGAISchedule*a, FGAISchedule*b); #endif