Added a function to get a path from a gate to a runway threshold, also removed some couts
This commit is contained in:
parent
4d437eb16c
commit
f930c93ddb
2 changed files with 54 additions and 10 deletions
|
@ -133,28 +133,29 @@ bool FGGround::LoadNetwork() {
|
|||
} else if(!strcmp(buf, "H")) {
|
||||
np->type = HOLD;
|
||||
} else {
|
||||
cout << "**** ERROR ***** Unknown node type in taxi network...\n";
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "**** ERROR ***** Unknown node type in taxi network...\n");
|
||||
delete np;
|
||||
return(false);
|
||||
}
|
||||
fin >> buf; // rwy exit information - gets parsed later - FRAGILE - will break if buf is reused.
|
||||
// Now the name
|
||||
fin >> ch; // strip the leading " off
|
||||
np->name = "";
|
||||
while(1) {
|
||||
fin.unsetf(ios::skipws);
|
||||
fin >> ch;
|
||||
np->name += ch;
|
||||
if((ch == '"') || (ch == 0x0A)) {
|
||||
break;
|
||||
} // we shouldn't need the 0x0A but it makes a nice safely in case someone leaves off the "
|
||||
np->name += ch;
|
||||
}
|
||||
fin.setf(ios::skipws);
|
||||
network.push_back(np);
|
||||
// FIXME - fragile - replies on buf not getting modified from exits read to here
|
||||
// see if we also need to push it onto the runway exit list
|
||||
cout << "strlen(buf) = " << strlen(buf) << endl;
|
||||
//cout << "strlen(buf) = " << strlen(buf) << endl;
|
||||
if(strlen(buf) > 2) {
|
||||
cout << "Calling ParseRwyExits for " << buf << endl;
|
||||
//cout << "Calling ParseRwyExits for " << buf << endl;
|
||||
ParseRwyExits(np, buf);
|
||||
}
|
||||
} else if(!strcmp(buf, "A")) {
|
||||
|
@ -170,7 +171,7 @@ bool FGGround::LoadNetwork() {
|
|||
} else if(!strcmp(buf, "T")) {
|
||||
ap->type = TAXIWAY;
|
||||
} else {
|
||||
cout << "**** ERROR ***** Unknown arc type in taxi network...\n";
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "**** ERROR ***** Unknown arc type in taxi network...\n");
|
||||
delete ap;
|
||||
return(false);
|
||||
}
|
||||
|
@ -181,7 +182,7 @@ bool FGGround::LoadNetwork() {
|
|||
} else if(!strcmp(buf, "N")) {
|
||||
ap->directed = false;
|
||||
} else {
|
||||
cout << "**** ERROR ***** Unknown arc directed value in taxi network - should be Y/N !!!\n";
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "**** ERROR ***** Unknown arc directed value in taxi network - should be Y/N !!!\n");
|
||||
delete ap;
|
||||
return(false);
|
||||
}
|
||||
|
@ -233,7 +234,7 @@ bool FGGround::LoadNetwork() {
|
|||
gateCount++;
|
||||
} else {
|
||||
// Something has gone seriously pear-shaped
|
||||
cout << "********* ERROR - unknown ground network element type... aborting read of " << path.c_str() << '\n';
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "********* ERROR - unknown ground network element type... aborting read of " << path.c_str() << '\n');
|
||||
return(false);
|
||||
}
|
||||
|
||||
|
@ -315,6 +316,31 @@ Gate* FGGround::GetGateNode() {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// WARNING - This is hardwired to my prototype logical network format
|
||||
// and will almost certainly change when Bernie's stuff comes on-line.
|
||||
node* FGGround::GetThresholdNode(string rwyID) {
|
||||
// For now go through all the nodes and parse their names
|
||||
// Maybe in the future we'll map threshold nodes by ID
|
||||
//cout << "Size of network is " << network.size() << '\n';
|
||||
for(unsigned int i=0; i<network.size(); ++i) {
|
||||
//cout << "Name = " << network[i]->name << '\n';
|
||||
if(network[i]->name.size()) {
|
||||
string s = network[i]->name;
|
||||
// Warning - the next bit is fragile and dependent on my current naming scheme
|
||||
//cout << "substr = " << s.substr(0,3) << '\n';
|
||||
//cout << "size of s = " << s.size() << '\n';
|
||||
if(s.substr(0,3) == "rwy") {
|
||||
//cout << "subsubstr = " << s.substr(4, s.size() - 4) << '\n';
|
||||
if(s.substr(4, s.size() - 4) == rwyID) {
|
||||
return network[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get a path from a point on a runway to a gate
|
||||
// TODO !!
|
||||
|
||||
|
@ -326,6 +352,17 @@ ground_network_path_type FGGround::GetPath(node* A, node* B) {
|
|||
return(GetShortestPath(A, B));
|
||||
};
|
||||
|
||||
// Get a path from a node to a runway threshold
|
||||
ground_network_path_type FGGround::GetPath(node* A, string rwyID) {
|
||||
node* b = GetThresholdNode(rwyID);
|
||||
if(b == NULL) {
|
||||
SG_LOG(SG_GENERAL, SG_ALERT, "ERROR - unable to find path to runway theshold in ground.cxx\n");
|
||||
ground_network_path_type emptyPath;
|
||||
emptyPath.erase(emptyPath.begin(), emptyPath.end());
|
||||
return(emptyPath);
|
||||
}
|
||||
return GetShortestPath(A, b);
|
||||
}
|
||||
|
||||
// A shortest path algorithm from memory (ie. I can't find the bl&*dy book again!)
|
||||
// I'm sure there must be enchancements that we can make to this, such as biasing the
|
||||
|
|
|
@ -101,7 +101,7 @@ struct node : public ground_network_element {
|
|||
unsigned int nodeID; //each node in an airport needs a unique ID number - this is ZERO-BASED to match array position
|
||||
Point3D pos;
|
||||
Point3D orthoPos;
|
||||
char* name;
|
||||
string name;
|
||||
node_type type;
|
||||
arc_array_type arcs;
|
||||
double max_turn_radius;
|
||||
|
@ -116,7 +116,7 @@ struct Gate : public node {
|
|||
int max_weight; //units??
|
||||
//airline_code airline; //For the future - we don't have any airline codes ATM
|
||||
int id; // The gate number in the logical scheme of things
|
||||
string sid; // The real-world gate letter/number
|
||||
string name; // The real-world gate letter/number
|
||||
//node* pNode;
|
||||
bool used;
|
||||
double heading; // The direction the parked-up plane should point in degrees
|
||||
|
@ -248,7 +248,10 @@ public:
|
|||
node_array_type GetExits(int rwyID);
|
||||
|
||||
// Get a path from one node to another
|
||||
ground_network_path_type GetPath(node* A, node* B);
|
||||
ground_network_path_type GetPath(node* A, node* B);
|
||||
|
||||
// Get a path from a node to a runway threshold
|
||||
ground_network_path_type GetPath(node* A, string rwyID);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -310,6 +313,10 @@ private:
|
|||
// TODO - modify to return a suitable gate based on aircraft size/weight.
|
||||
int GetRandomGateID();
|
||||
|
||||
// Return a pointer to the node at a runway threshold
|
||||
// Returns NULL if unsuccessful.
|
||||
node* GetThresholdNode(string rwyID);
|
||||
|
||||
// A shortest path algorithm sort of from memory (I can't find the bl&*dy book again!)
|
||||
ground_network_path_type GetShortestPath(node* A, node* B);
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue