Added some interface function to traffic manager related classes and added a traffic record that mimicks the users aircraft's traffic intentions.
This commit is contained in:
parent
493661a2dc
commit
c597f72158
7 changed files with 33 additions and 12 deletions
|
@ -76,6 +76,7 @@ public:
|
||||||
void setTaxiClearanceRequest(bool arg) { needsTaxiClearance = arg; };
|
void setTaxiClearanceRequest(bool arg) { needsTaxiClearance = arg; };
|
||||||
bool getTaxiClearanceRequest() { return needsTaxiClearance; };
|
bool getTaxiClearanceRequest() { return needsTaxiClearance; };
|
||||||
FGAISchedule * getTrafficRef() { return trafficRef; };
|
FGAISchedule * getTrafficRef() { return trafficRef; };
|
||||||
|
void setTrafficRef(FGAISchedule *ref) { trafficRef = ref; };
|
||||||
|
|
||||||
virtual const char* getTypeString(void) const { return "aircraft"; }
|
virtual const char* getTypeString(void) const { return "aircraft"; }
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include <simgear/math/SGMath.hxx>
|
#include <simgear/math/SGMath.hxx>
|
||||||
#include <Airports/dynamics.hxx>
|
#include <Airports/dynamics.hxx>
|
||||||
#include <Airports/simple.hxx>
|
#include <Airports/simple.hxx>
|
||||||
|
|
||||||
#include "atc_mgr.hxx"
|
#include "atc_mgr.hxx"
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +68,6 @@ void FGATCManager::init() {
|
||||||
double speed = fgGetDouble("/velocities/groundspeed-kt");
|
double speed = fgGetDouble("/velocities/groundspeed-kt");
|
||||||
double aircraftRadius = 40; // note that this is currently hardcoded to a one-size-fits all JumboJet value. Should change later;
|
double aircraftRadius = 40; // note that this is currently hardcoded to a one-size-fits all JumboJet value. Should change later;
|
||||||
|
|
||||||
// Next,
|
|
||||||
|
|
||||||
ai_ac.setCallSign ( callsign );
|
ai_ac.setCallSign ( callsign );
|
||||||
ai_ac.setLongitude( longitude );
|
ai_ac.setLongitude( longitude );
|
||||||
|
@ -78,8 +76,19 @@ void FGATCManager::init() {
|
||||||
ai_ac.setPerformance("jet_transport");
|
ai_ac.setPerformance("jet_transport");
|
||||||
|
|
||||||
// NEXT UP: Create a traffic Schedule and fill that with appropriate information. This we can use to flight plannign.
|
// NEXT UP: Create a traffic Schedule and fill that with appropriate information. This we can use to flight plannign.
|
||||||
|
FGAISchedule *trafficRef = new FGAISchedule;
|
||||||
|
trafficRef->setFlightType("gate");
|
||||||
|
|
||||||
|
FGScheduledFlight *flight = new FGScheduledFlight;
|
||||||
|
flight->setDepartureAirport(airport);
|
||||||
|
flight->setArrivalAirport(airport);
|
||||||
|
flight->initializeAirports();
|
||||||
|
flight->setFlightRules("IFR");
|
||||||
|
flight->setCallSign(callsign);
|
||||||
|
|
||||||
|
trafficRef->assign(flight);
|
||||||
FGAIFlightPlan *fp = new FGAIFlightPlan;
|
FGAIFlightPlan *fp = new FGAIFlightPlan;
|
||||||
|
ai_ac.setTrafficRef(trafficRef);
|
||||||
|
|
||||||
string flightPlanName = airport + "-" + airport + ".xml";
|
string flightPlanName = airport + "-" + airport + ".xml";
|
||||||
double cruiseAlt = 100; // Doesn't really matter right now.
|
double cruiseAlt = 100; // Doesn't really matter right now.
|
||||||
|
|
|
@ -1034,14 +1034,7 @@ void FGStartupController::updateAircraftInformation(int id, double lat, double l
|
||||||
|
|
||||||
// The user controlled aircraft should have crased here, because it doesn't have a traffic reference.
|
// The user controlled aircraft should have crased here, because it doesn't have a traffic reference.
|
||||||
// NOTE: if we create a traffic schedule for the user aircraft, we can use this to plan a flight.
|
// NOTE: if we create a traffic schedule for the user aircraft, we can use this to plan a flight.
|
||||||
time_t startTime = 0;
|
time_t startTime = i->getAircraft()->getTrafficRef()->getDepartureTime();
|
||||||
if (isUserAircraft(i->getAircraft())) {
|
|
||||||
cerr << i->getAircraft->getCallSign() << " is user aircraft " << endl;
|
|
||||||
} else {
|
|
||||||
time_t startTime =
|
|
||||||
i->getAircraft()->getTrafficRef()->getDepartureTime();
|
|
||||||
|
|
||||||
}
|
|
||||||
time_t now = time(NULL) + fgGetLong("/sim/time/warp");
|
time_t now = time(NULL) + fgGetLong("/sim/time/warp");
|
||||||
//cerr << i->getAircraft()->getTrafficRef()->getCallSign()
|
//cerr << i->getAircraft()->getTrafficRef()->getCallSign()
|
||||||
// << " is scheduled to depart in " << startTime-now << " seconds. Available = " << available
|
// << " is scheduled to depart in " << startTime-now << " seconds. Available = " << available
|
||||||
|
|
|
@ -74,8 +74,12 @@
|
||||||
|
|
||||||
FGScheduledFlight::FGScheduledFlight()
|
FGScheduledFlight::FGScheduledFlight()
|
||||||
{
|
{
|
||||||
initialized = false;
|
departureTime = 0;
|
||||||
available = true;
|
arrivalTime = 0;
|
||||||
|
cruiseAltitude = 0;
|
||||||
|
repeatPeriod = 0;
|
||||||
|
initialized = false;
|
||||||
|
available = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FGScheduledFlight::FGScheduledFlight(const FGScheduledFlight &other)
|
FGScheduledFlight::FGScheduledFlight(const FGScheduledFlight &other)
|
||||||
|
|
|
@ -90,6 +90,8 @@ public:
|
||||||
time_t getDepartureTime() { return departureTime; };
|
time_t getDepartureTime() { return departureTime; };
|
||||||
time_t getArrivalTime () { return arrivalTime; };
|
time_t getArrivalTime () { return arrivalTime; };
|
||||||
|
|
||||||
|
void setDepartureAirport(string port) { depId = port; };
|
||||||
|
void setArrivalAirport (string port) { arrId = port; };
|
||||||
FGAirport *getDepartureAirport();
|
FGAirport *getDepartureAirport();
|
||||||
FGAirport *getArrivalAirport ();
|
FGAirport *getArrivalAirport ();
|
||||||
|
|
||||||
|
@ -109,6 +111,9 @@ public:
|
||||||
void release() { available = true; };
|
void release() { available = true; };
|
||||||
|
|
||||||
bool isAvailable() { return available; };
|
bool isAvailable() { return available; };
|
||||||
|
|
||||||
|
void setCallSign(string val) { callsign = val; };
|
||||||
|
void setFlightRules(string val) { fltRules = val; };
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef vector<FGScheduledFlight*> FGScheduledFlightVec;
|
typedef vector<FGScheduledFlight*> FGScheduledFlightVec;
|
||||||
|
|
|
@ -344,6 +344,12 @@ bool FGAISchedule::createAIAircraft(FGScheduledFlight* flight, double speedKnots
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create an initial heading for user controlled aircraft.
|
||||||
|
void FGAISchedule::setHeading()
|
||||||
|
{
|
||||||
|
courseToDest = SGGeodesy::courseDeg((*flights.begin())->getDepartureAirport()->geod(), (*flights.begin())->getArrivalAirport()->geod());
|
||||||
|
}
|
||||||
|
|
||||||
void FGAISchedule::scheduleFlights()
|
void FGAISchedule::scheduleFlights()
|
||||||
{
|
{
|
||||||
if (!flights.empty()) {
|
if (!flights.empty()) {
|
||||||
|
|
|
@ -117,6 +117,9 @@ class FGAISchedule
|
||||||
void setHits (unsigned int count) { hits = count; };
|
void setHits (unsigned int count) { hits = count; };
|
||||||
void setScore ();
|
void setScore ();
|
||||||
double getScore () { return score; };
|
double getScore () { return score; };
|
||||||
|
void setHeading ();
|
||||||
|
void assign (FGScheduledFlight *ref) { flights.push_back(ref); };
|
||||||
|
void setFlightType (string val ) { flightType = val; };
|
||||||
FGScheduledFlight*findAvailableFlight (const string ¤tDestination, const string &req);
|
FGScheduledFlight*findAvailableFlight (const string ¤tDestination, const string &req);
|
||||||
// used to sort in decending order of score: I've probably found a better way to
|
// 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.
|
// decending order sorting, but still need to test that.
|
||||||
|
|
Loading…
Reference in a new issue