Rename departure cue to departure queue, formatting, document ActiveRunway class
This commit is contained in:
parent
8268cdc5e0
commit
64aa3927a7
3 changed files with 66 additions and 60 deletions
|
@ -179,7 +179,7 @@ private:
|
|||
|
||||
bool needsTaxiClearance;
|
||||
bool _needsGroundElevation;
|
||||
int takeOffStatus; // 1 = joined departure cue; 2 = Passed DepartureHold waypoint; handover control to tower; 0 = any other state.
|
||||
int takeOffStatus; // 1 = joined departure queue; 2 = Passed DepartureHold waypoint; handover control to tower; 0 = any other state.
|
||||
time_t timeElapsed;
|
||||
|
||||
PerformanceData* _performance; // the performance data for this aircraft
|
||||
|
|
|
@ -71,7 +71,8 @@ void clearTrafficControllers(TrafficVector& vec)
|
|||
/***************************************************************************
|
||||
* ActiveRunway
|
||||
**************************************************************************/
|
||||
/*
|
||||
|
||||
/*
|
||||
* Fetch next slot for the active runway
|
||||
* @param eta time of slot requested
|
||||
* @return newEta: next slot available; starts at eta paramater
|
||||
|
@ -196,19 +197,21 @@ void ActiveRunway::slotHousekeeping(time_t newEta)
|
|||
}
|
||||
}
|
||||
|
||||
void ActiveRunway::printDepartureCue()
|
||||
/* Output the contents of the departure queue vector nicely formatted*/
|
||||
void ActiveRunway::printdepartureQueue()
|
||||
{
|
||||
SG_LOG(SG_ATC, SG_DEBUG, "Departure cue for " << rwy << ": ");
|
||||
for (AircraftVecIterator atc = departureCue.begin(); atc != departureCue.end(); atc++) {
|
||||
SG_LOG(SG_ATC, SG_DEBUG, "Departure queue for " << rwy << ": ");
|
||||
for (AircraftVecIterator atc = departureQueue.begin(); atc != departureQueue.end(); atc++) {
|
||||
SG_LOG(SG_ATC, SG_DEBUG, " " << (*atc)->getCallSign() << " " << (*atc)->getTakeOffStatus());
|
||||
SG_LOG(SG_ATC, SG_DEBUG, " " << (*atc)->_getLatitude() << " " << (*atc)->_getLongitude() << (*atc)->getSpeed() << " " << (*atc)->getAltitude());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Fetch the first aircraft in the departure cue with a certain status */
|
||||
FGAIAircraft* ActiveRunway::getFirstOfStatus(int stat)
|
||||
{
|
||||
for (AircraftVecIterator atc =departureCue.begin(); atc != departureCue.end(); atc++) {
|
||||
for (AircraftVecIterator atc =departureQueue.begin(); atc != departureQueue.end(); atc++) {
|
||||
if ((*atc)->getTakeOffStatus() == stat)
|
||||
return (*atc);
|
||||
}
|
||||
|
@ -220,6 +223,7 @@ FGAIAircraft* ActiveRunway::getFirstOfStatus(int stat)
|
|||
/***************************************************************************
|
||||
* FGTrafficRecord
|
||||
**************************************************************************/
|
||||
|
||||
FGTrafficRecord::FGTrafficRecord():
|
||||
id(0), waitsForId(0),
|
||||
currentPos(0),
|
||||
|
@ -273,12 +277,10 @@ FGAIAircraft* FGTrafficRecord::getAircraft() const
|
|||
return aircraft.ptr();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if another aircraft is ahead of the current one, and on the same
|
||||
* return true / false is the is/isn't the case.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
* Check if another aircraft is ahead of the current one, and on the same taxiway
|
||||
* @return true / false if this is/isn't the case.
|
||||
*/
|
||||
bool FGTrafficRecord::checkPositionAndIntentions(FGTrafficRecord & other)
|
||||
{
|
||||
bool result = false;
|
||||
|
@ -511,11 +513,11 @@ bool FGTrafficRecord::pushBackAllowed() const
|
|||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* FGATCInstruction
|
||||
*
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
FGATCInstruction::FGATCInstruction()
|
||||
{
|
||||
holdPattern = false;
|
||||
|
@ -537,17 +539,15 @@ bool FGATCInstruction::hasInstruction() const
|
|||
|| changeAltitude || resolveCircularWait);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* FGATCController
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
FGATCController::FGATCController()
|
||||
{
|
||||
SG_LOG(SG_ATC, SG_DEBUG, "running FGATController constructor");
|
||||
dt_count = 0;
|
||||
available = true;
|
||||
lastTransmission = 0;
|
||||
|
@ -562,6 +562,15 @@ FGATCController::~FGATCController()
|
|||
mgr->removeController(this);
|
||||
}
|
||||
|
||||
void FGATCController::init()
|
||||
{
|
||||
if (!initialized) {
|
||||
FGATCManager *mgr = (FGATCManager*) globals->get_subsystem("ATC");
|
||||
mgr->addController(this);
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
string FGATCController::getGateName(FGAIAircraft * ref)
|
||||
{
|
||||
return ref->atGate();
|
||||
|
@ -630,6 +639,7 @@ void FGATCController::transmit(FGTrafficRecord * rec, FGAirportDynamics *parent,
|
|||
getName() + "-Tower";
|
||||
break;
|
||||
}
|
||||
|
||||
// Swap sender and receiver value in case of a ground to air transmission
|
||||
if (msgDir == ATC_GROUND_TO_AIR) {
|
||||
string tmp = sender;
|
||||
|
@ -637,6 +647,7 @@ void FGATCController::transmit(FGTrafficRecord * rec, FGAirportDynamics *parent,
|
|||
receiver = tmp;
|
||||
ground_to_air=1;
|
||||
}
|
||||
|
||||
switch (msgId) {
|
||||
case MSG_ANNOUNCE_ENGINE_START:
|
||||
text = sender + ". Ready to Start up.";
|
||||
|
@ -790,6 +801,7 @@ void FGATCController::transmit(FGTrafficRecord * rec, FGAirportDynamics *parent,
|
|||
text = text + sender + ". Transmitting unknown Message.";
|
||||
break;
|
||||
}
|
||||
|
||||
if (audible) {
|
||||
double onBoardRadioFreq0 =
|
||||
fgGetDouble("/instrumentation/comm[0]/frequencies/selected-mhz");
|
||||
|
@ -836,10 +848,14 @@ void FGATCController::transmit(FGTrafficRecord * rec, FGAirportDynamics *parent,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Format integer frequency xxxyy as xxx.yy
|
||||
* @param freq - integer value
|
||||
* @return the formatted string
|
||||
*/
|
||||
string FGATCController::formatATCFrequency3_2(int freq)
|
||||
{
|
||||
char buffer[7];
|
||||
char buffer[7]; // does this ever need to be freed?
|
||||
snprintf(buffer, 7, "%3.2f", ((float) freq / 100.0));
|
||||
return string(buffer);
|
||||
}
|
||||
|
@ -858,15 +874,6 @@ string FGATCController::genTransponderCode(const string& fltRules)
|
|||
}
|
||||
}
|
||||
|
||||
void FGATCController::init()
|
||||
{
|
||||
if (!initialized) {
|
||||
FGATCManager *mgr = (FGATCManager*) globals->get_subsystem("ATC");
|
||||
mgr->addController(this);
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
void FGATCController::eraseDeadTraffic(TrafficVector& vec)
|
||||
{
|
||||
auto it = std::remove_if(vec.begin(), vec.end(), [](const FGTrafficRecord& traffic)
|
||||
|
@ -880,10 +887,12 @@ void FGATCController::eraseDeadTraffic(TrafficVector& vec)
|
|||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
* class FGTowerController
|
||||
*
|
||||
* subclass of FGATCController
|
||||
**************************************************************************/
|
||||
|
||||
FGTowerController::FGTowerController(FGAirportDynamics *par) :
|
||||
FGATCController()
|
||||
{
|
||||
|
@ -945,14 +954,14 @@ void FGTowerController::announcePosition(int id,
|
|||
}
|
||||
if (rwy == activeRunways.end()) {
|
||||
ActiveRunway aRwy(intendedRoute->getRunway(), id);
|
||||
aRwy.addToDepartureCue(ref);
|
||||
aRwy.addTodepartureQueue(ref);
|
||||
activeRunways.push_back(aRwy);
|
||||
rwy = (activeRunways.end()-1);
|
||||
} else {
|
||||
rwy->addToDepartureCue(ref);
|
||||
rwy->addTodepartureQueue(ref);
|
||||
}
|
||||
|
||||
SG_LOG(SG_ATC, SG_DEBUG, ref->getTrafficRef()->getCallSign() << " You are number " << rwy->getDepartureCueSize() << " for takeoff ");
|
||||
SG_LOG(SG_ATC, SG_DEBUG, ref->getTrafficRef()->getCallSign() << " You are number " << rwy->getdepartureQueueSize() << " for takeoff ");
|
||||
} else {
|
||||
i->setPositionAndHeading(lat, lon, heading, speed, alt);
|
||||
}
|
||||
|
@ -996,7 +1005,7 @@ void FGTowerController::updateAircraftInformation(int id, double lat, double lon
|
|||
ActiveRunwayVecIterator rwy = activeRunways.begin();
|
||||
//if (parent->getId() == fgGetString("/sim/presets/airport-id")) {
|
||||
// for (rwy = activeRunways.begin(); rwy != activeRunways.end(); rwy++) {
|
||||
// rwy->printDepartureCue();
|
||||
// rwy->printdepartureQueue();
|
||||
// }
|
||||
//}
|
||||
|
||||
|
@ -1010,7 +1019,7 @@ void FGTowerController::updateAircraftInformation(int id, double lat, double lon
|
|||
|
||||
// only bother running the following code if the current aircraft is the
|
||||
// first in line for depature
|
||||
/* if (current.getAircraft() == rwy->getFirstAircraftInDepartureCue()) {
|
||||
/* if (current.getAircraft() == rwy->getFirstAircraftIndepartureQueue()) {
|
||||
if (rwy->getCleared()) {
|
||||
if (id == rwy->getCleared()) {
|
||||
current.setHoldPosition(false);
|
||||
|
@ -1023,7 +1032,7 @@ void FGTowerController::updateAircraftInformation(int id, double lat, double lon
|
|||
}
|
||||
} */
|
||||
// only bother with aircraft that have a takeoff status of 2, since those are essentially under tower control
|
||||
FGAIAircraft* ac= rwy->getFirstAircraftInDepartureCue();
|
||||
FGAIAircraft* ac= rwy->getFirstAircraftIndepartureQueue();
|
||||
if (ac->getTakeOffStatus() == 1) {
|
||||
// transmit takeoff clearance
|
||||
ac->setTakeOffStatus(2);
|
||||
|
@ -1039,7 +1048,7 @@ void FGTowerController::updateAircraftInformation(int id, double lat, double lon
|
|||
current.setHoldPosition(false);
|
||||
}
|
||||
} else {
|
||||
if (current.getAircraft() == rwy->getFirstAircraftInDepartureCue()) {
|
||||
if (current.getAircraft() == rwy->getFirstAircraftIndepartureQueue()) {
|
||||
rwy->setCleared(id);
|
||||
FGAIAircraft *ac = rwy->getFirstOfStatus(1);
|
||||
if (ac)
|
||||
|
@ -1076,7 +1085,7 @@ void FGTowerController::signOff(int id)
|
|||
}
|
||||
if (rwy != activeRunways.end()) {
|
||||
rwy->setCleared(0);
|
||||
rwy->updateDepartureCue();
|
||||
rwy->updatedepartureQueue();
|
||||
} else {
|
||||
SG_LOG(SG_ATC, SG_ALERT,
|
||||
"AI error: Attempting to erase non-existing runway clearance record in FGTowerController::signoff at " << SG_ORIGIN);
|
||||
|
@ -1163,7 +1172,7 @@ void FGTowerController::update(double dt)
|
|||
|
||||
/***************************************************************************
|
||||
* class FGStartupController
|
||||
*
|
||||
* subclass of FGATCController
|
||||
**************************************************************************/
|
||||
FGStartupController::FGStartupController(FGAirportDynamics *par):
|
||||
FGATCController()
|
||||
|
@ -1628,8 +1637,9 @@ void FGStartupController::update(double dt)
|
|||
|
||||
/***************************************************************************
|
||||
* class FGApproachController
|
||||
*
|
||||
* subclass of FGATCController
|
||||
**************************************************************************/
|
||||
|
||||
FGApproachController::FGApproachController(FGAirportDynamics *par):
|
||||
FGATCController()
|
||||
{
|
||||
|
@ -1830,8 +1840,6 @@ void FGApproachController::render(bool visible) {
|
|||
SG_LOG(SG_ATC, SG_BULK, "FGApproachController::render function not yet implemented");
|
||||
}
|
||||
|
||||
|
||||
|
||||
string FGApproachController::getName() {
|
||||
return string(parent->getId() + "-approach");
|
||||
}
|
||||
|
|
|
@ -74,8 +74,8 @@ private:
|
|||
double heading;
|
||||
double alt;
|
||||
public:
|
||||
|
||||
FGATCInstruction();
|
||||
|
||||
bool hasInstruction () const;
|
||||
bool getHoldPattern () const {
|
||||
return holdPattern;
|
||||
|
@ -92,7 +92,10 @@ public:
|
|||
bool getChangeAltitude() const {
|
||||
return changeAltitude;
|
||||
};
|
||||
|
||||
bool getCheckForCircularWait() const {
|
||||
return resolveCircularWait;
|
||||
};
|
||||
|
||||
double getSpeed () const {
|
||||
return speed;
|
||||
};
|
||||
|
@ -103,10 +106,6 @@ public:
|
|||
return alt;
|
||||
};
|
||||
|
||||
bool getCheckForCircularWait() const {
|
||||
return resolveCircularWait;
|
||||
};
|
||||
|
||||
void setHoldPattern (bool val) {
|
||||
holdPattern = val;
|
||||
};
|
||||
|
@ -122,11 +121,10 @@ public:
|
|||
void setChangeAltitude(bool val) {
|
||||
changeAltitude = val;
|
||||
};
|
||||
|
||||
void setResolveCircularWait (bool val) {
|
||||
resolveCircularWait = val;
|
||||
};
|
||||
|
||||
|
||||
void setSpeed (double val) {
|
||||
speed = val;
|
||||
};
|
||||
|
@ -324,7 +322,7 @@ private:
|
|||
int currentlyCleared;
|
||||
double distanceToFinal;
|
||||
TimeVector estimatedArrivalTimes;
|
||||
AircraftVec departureCue;
|
||||
AircraftVec departureQueue;
|
||||
|
||||
public:
|
||||
ActiveRunway(const std::string& r, int cc) {
|
||||
|
@ -345,8 +343,8 @@ public:
|
|||
//time_t getEstApproachTime() { return estimatedArrival; };
|
||||
|
||||
//void setEstApproachTime(time_t time) { estimatedArrival = time; };
|
||||
void addToDepartureCue(FGAIAircraft *ac) {
|
||||
departureCue.push_back(ac);
|
||||
void addTodepartureQueue(FGAIAircraft *ac) {
|
||||
departureQueue.push_back(ac);
|
||||
};
|
||||
void setCleared(int number) {
|
||||
currentlyCleared = number;
|
||||
|
@ -354,17 +352,17 @@ public:
|
|||
time_t requestTimeSlot(time_t eta);
|
||||
//time_t requestTimeSlot(time_t eta, std::string wakeCategory);
|
||||
void slotHousekeeping(time_t newEta);
|
||||
int getDepartureCueSize() {
|
||||
return departureCue.size();
|
||||
int getdepartureQueueSize() {
|
||||
return departureQueue.size();
|
||||
};
|
||||
FGAIAircraft* getFirstAircraftInDepartureCue() {
|
||||
return departureCue.size() ? *(departureCue.begin()) : NULL;
|
||||
FGAIAircraft* getFirstAircraftIndepartureQueue() {
|
||||
return departureQueue.size() ? *(departureQueue.begin()) : NULL;
|
||||
};
|
||||
FGAIAircraft* getFirstOfStatus(int stat);
|
||||
void updateDepartureCue() {
|
||||
departureCue.erase(departureCue.begin());
|
||||
void updatedepartureQueue() {
|
||||
departureQueue.erase(departureQueue.begin());
|
||||
}
|
||||
void printDepartureCue();
|
||||
void printdepartureQueue();
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue