Fix a possible crash
This commit is contained in:
parent
3d65e2dac9
commit
738b81dc49
1 changed files with 16 additions and 2 deletions
|
@ -599,17 +599,19 @@ void FGTower::ProcessDownwindReport(TowerPlaneRec* t) {
|
||||||
int a = 0; // Count of preceding planes on approach
|
int a = 0; // Count of preceding planes on approach
|
||||||
bool cf = false; // conflicting traffic on final
|
bool cf = false; // conflicting traffic on final
|
||||||
bool cc = false; // preceding traffic in circuit
|
bool cc = false; // preceding traffic in circuit
|
||||||
|
TowerPlaneRec* tc;
|
||||||
for(tower_plane_rec_list_iterator twrItr = circuitList.begin(); twrItr != circuitList.end(); twrItr++) {
|
for(tower_plane_rec_list_iterator twrItr = circuitList.begin(); twrItr != circuitList.end(); twrItr++) {
|
||||||
if((*twrItr)->plane.callsign == responseID) break;
|
if((*twrItr)->plane.callsign == responseID) break;
|
||||||
|
tc = *twrItr;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
if(i > 1) { cc = true; }
|
if(i > 1) { cc = true; }
|
||||||
doThresholdETACalc();
|
doThresholdETACalc();
|
||||||
TowerPlaneRec* tt;
|
TowerPlaneRec* tf;
|
||||||
for(tower_plane_rec_list_iterator twrItr = appList.begin(); twrItr != appList.end(); twrItr++) {
|
for(tower_plane_rec_list_iterator twrItr = appList.begin(); twrItr != appList.end(); twrItr++) {
|
||||||
if((*twrItr)->eta < (t->eta + 45)) {
|
if((*twrItr)->eta < (t->eta + 45)) {
|
||||||
a++;
|
a++;
|
||||||
tt = *twrItr;
|
tf = *twrItr;
|
||||||
cf = true;
|
cf = true;
|
||||||
// This should set the flagged plane to be the last conflicting one, and hence the one to follow.
|
// This should set the flagged plane to be the last conflicting one, and hence the one to follow.
|
||||||
// It ignores the fact that we might have problems slotting into the approach traffic behind it -
|
// It ignores the fact that we might have problems slotting into the approach traffic behind it -
|
||||||
|
@ -621,11 +623,23 @@ void FGTower::ProcessDownwindReport(TowerPlaneRec* t) {
|
||||||
trns += ConvertNumToSpokenDigits(i + a);
|
trns += ConvertNumToSpokenDigits(i + a);
|
||||||
// This assumes that the number spoken is landing position, not circuit position, since some of the traffic might be on straight-in final.
|
// This assumes that the number spoken is landing position, not circuit position, since some of the traffic might be on straight-in final.
|
||||||
trns += " ";
|
trns += " ";
|
||||||
|
TowerPlaneRec* tt;
|
||||||
if((i == 1) && (!rwyList.size()) && (t->nextOnRwy) && (!cf)) { // Unfortunately nextOnRwy currently doesn't handle circuit/straight-in ordering properly at present, hence the cf check below.
|
if((i == 1) && (!rwyList.size()) && (t->nextOnRwy) && (!cf)) { // Unfortunately nextOnRwy currently doesn't handle circuit/straight-in ordering properly at present, hence the cf check below.
|
||||||
trns += "Cleared to land"; // TODO - clear for the option if appropriate
|
trns += "Cleared to land"; // TODO - clear for the option if appropriate
|
||||||
t->clearedToLand = true;
|
t->clearedToLand = true;
|
||||||
if(!t->isUser) t->planePtr->RegisterTransmission(7);
|
if(!t->isUser) t->planePtr->RegisterTransmission(7);
|
||||||
} else if((i+a) > 1) {
|
} else if((i+a) > 1) {
|
||||||
|
//First set tt to point to the correct preceding plane - final or circuit
|
||||||
|
if(i > 1 && a > 0) {
|
||||||
|
tt = (tf->eta < tc->eta ? tf : tc);
|
||||||
|
} else if(i > 1) {
|
||||||
|
tt = tc;
|
||||||
|
} else if(a > 0) {
|
||||||
|
tt = tf;
|
||||||
|
} else {
|
||||||
|
// We should never get here!
|
||||||
|
SG_LOG(SG_ATC, SG_ALERT, "ALERT - Logic error in FGTower::ProcessDownwindReport");
|
||||||
|
}
|
||||||
trns += "Follow the ";
|
trns += "Follow the ";
|
||||||
string s = tt->plane.callsign;
|
string s = tt->plane.callsign;
|
||||||
int p = s.find('-');
|
int p = s.find('-');
|
||||||
|
|
Loading…
Add table
Reference in a new issue