1
0
Fork 0

Merge branch 'next' of git://gitorious.org/fg/flightgear into next

This commit is contained in:
Frederic Bouvier 2010-09-05 16:59:26 +02:00
commit 4175619392
6 changed files with 2020 additions and 1882 deletions

View file

@ -101,6 +101,80 @@ using namespace osg;
static osg::ref_ptr<osgViewer::Viewer> viewer; static osg::ref_ptr<osgViewer::Viewer> viewer;
static osg::ref_ptr<osg::Camera> mainCamera; static osg::ref_ptr<osg::Camera> mainCamera;
static void setStereoMode( const char * mode )
{
DisplaySettings::StereoMode stereoMode;
bool stereoOn = true;
if (strcmp(mode,"QUAD_BUFFER")==0)
{
stereoMode = DisplaySettings::QUAD_BUFFER;
}
else if (strcmp(mode,"ANAGLYPHIC")==0)
{
stereoMode = DisplaySettings::ANAGLYPHIC;
}
else if (strcmp(mode,"HORIZONTAL_SPLIT")==0)
{
stereoMode = DisplaySettings::HORIZONTAL_SPLIT;
}
else if (strcmp(mode,"VERTICAL_SPLIT")==0)
{
stereoMode = DisplaySettings::VERTICAL_SPLIT;
}
else if (strcmp(mode,"LEFT_EYE")==0)
{
stereoMode = DisplaySettings::LEFT_EYE;
}
else if (strcmp(mode,"RIGHT_EYE")==0)
{
stereoMode = DisplaySettings::RIGHT_EYE;
}
else if (strcmp(mode,"HORIZONTAL_INTERLACE")==0)
{
stereoMode = DisplaySettings::HORIZONTAL_INTERLACE;
}
else if (strcmp(mode,"VERTICAL_INTERLACE")==0)
{
stereoMode = DisplaySettings::VERTICAL_INTERLACE;
}
else if (strcmp(mode,"CHECKERBOARD")==0)
{
stereoMode = DisplaySettings::CHECKERBOARD;
} else {
stereoOn = false;
}
DisplaySettings::instance()->setStereo( stereoOn );
DisplaySettings::instance()->setStereoMode( stereoMode );
}
static const char * getStereoMode()
{
DisplaySettings::StereoMode stereoMode = DisplaySettings::instance()->getStereoMode();
bool stereoOn = DisplaySettings::instance()->getStereo();
if( !stereoOn ) return "OFF";
if( stereoMode == DisplaySettings::QUAD_BUFFER ) {
return "QUAD_BUFFER";
} else if( stereoMode == DisplaySettings::ANAGLYPHIC ) {
return "ANAGLYPHIC";
} else if( stereoMode == DisplaySettings::HORIZONTAL_SPLIT ) {
return "HORIZONTAL_SPLIT";
} else if( stereoMode == DisplaySettings::VERTICAL_SPLIT ) {
return "VERTICAL_SPLIT";
} else if( stereoMode == DisplaySettings::LEFT_EYE ) {
return "LEFT_EYE";
} else if( stereoMode == DisplaySettings::RIGHT_EYE ) {
return "RIGHT_EYE";
} else if( stereoMode == DisplaySettings::HORIZONTAL_INTERLACE ) {
return "HORIZONTAL_INTERLACE";
} else if( stereoMode == DisplaySettings::VERTICAL_INTERLACE ) {
return "VERTICAL_INTERLACE";
} else if( stereoMode == DisplaySettings::CHECKERBOARD ) {
return "CHECKERBOARD";
}
return "OFF";
}
void fgOSOpenWindow(bool stencil) void fgOSOpenWindow(bool stencil)
{ {
viewer = new osgViewer::Viewer; viewer = new osgViewer::Viewer;
@ -175,8 +249,19 @@ void fgOSOpenWindow(bool stencil)
viewer->setSceneData(new osg::Group); viewer->setSceneData(new osg::Group);
globals->get_renderer()->setViewer(viewer.get()); globals->get_renderer()->setViewer(viewer.get());
CameraGroup::setDefault(cameraGroup); CameraGroup::setDefault(cameraGroup);
DisplaySettings * displaySettings = DisplaySettings::instance();
fgTie("/sim/rendering/osg-displaysettings/eye-separation", displaySettings, &DisplaySettings::getEyeSeparation, &DisplaySettings::setEyeSeparation );
fgTie("/sim/rendering/osg-displaysettings/screen-distance", displaySettings, &DisplaySettings::getScreenDistance, &DisplaySettings::setScreenDistance );
fgTie("/sim/rendering/osg-displaysettings/screen-width", displaySettings, &DisplaySettings::getScreenWidth, &DisplaySettings::setScreenWidth );
fgTie("/sim/rendering/osg-displaysettings/screen-height", displaySettings, &DisplaySettings::getScreenHeight, &DisplaySettings::setScreenHeight );
fgTie("/sim/rendering/osg-displaysettings/stereo-mode", getStereoMode, setStereoMode );
fgTie("/sim/rendering/osg-displaysettings/double-buffer", displaySettings, &DisplaySettings::getDoubleBuffer, &DisplaySettings::setDoubleBuffer );
fgTie("/sim/rendering/osg-displaysettings/depth-buffer", displaySettings, &DisplaySettings::getDepthBuffer, &DisplaySettings::setDepthBuffer );
fgTie("/sim/rendering/osg-displaysettings/rgb", displaySettings, &DisplaySettings::getRGB, &DisplaySettings::setRGB );
} }
static int status = 0; static int status = 0;
void fgOSExit(int code) void fgOSExit(int code)

View file

@ -364,10 +364,12 @@ void FGAISchedule::scheduleFlights()
currentDestination = flight->getArrivalAirport()->getId(); currentDestination = flight->getArrivalAirport()->getId();
if (!initialized) { if (!initialized) {
string departurePort = flight->getDepartureAirport()->getId(); string departurePort = flight->getDepartureAirport()->getId();
//cerr << "Scheduled " << registration << " " << score << " for Flight "
// << flight-> getCallSign() << " from " << departurePort << " to " << currentDestination << endl;
if (fgGetString("/sim/presets/airport-id") == departurePort) { if (fgGetString("/sim/presets/airport-id") == departurePort) {
hits++; hits++;
} }
runCount++; //runCount++;
initialized = true; initialized = true;
} }
@ -508,6 +510,7 @@ void FGAISchedule::setScore ()
score = 0.0; score = 0.0;
} }
} }
runCount++;
} }
bool compareSchedules(FGAISchedule*a, FGAISchedule*b) bool compareSchedules(FGAISchedule*a, FGAISchedule*b)

View file

@ -107,7 +107,8 @@ FGTrafficManager:: ~FGTrafficManager()
cachefile.open(cacheData.str().c_str()); cachefile.open(cacheData.str().c_str());
} }
} }
for (ScheduleVectorIterator sched = scheduledAircraft.begin(); sched != scheduledAircraft.end(); sched++) { for (ScheduleVectorIterator sched = scheduledAircraft.begin();
sched != scheduledAircraft.end(); sched++) {
if (saveData) { if (saveData) {
cachefile << (*sched)->getRegistration() << " " cachefile << (*sched)->getRegistration() << " "
<< (*sched)->getRunCount() << " " << (*sched)->getRunCount() << " "
@ -127,20 +128,19 @@ void FGTrafficManager::init()
{ {
ulDir *d, *d2; ulDir *d, *d2;
ulDirEnt *dent, *dent2; ulDirEnt *dent, *dent2;
SGPath aircraftDir = globals->get_fg_root();
SGPath path = aircraftDir;
heuristicsVector heuristics; heuristicsVector heuristics;
HeuristicMap heurMap; HeuristicMap heurMap;
if (string(fgGetString("/sim/traffic-manager/datafile")) == string("")) {
SGPath aircraftDir = globals->get_fg_root();
SGPath path = aircraftDir;
aircraftDir.append("AI/Traffic"); aircraftDir.append("AI/Traffic");
if ((d = ulOpenDir(aircraftDir.c_str())) != NULL) if ((d = ulOpenDir(aircraftDir.c_str())) != NULL) {
{
while ((dent = ulReadDir(d)) != NULL) { while ((dent = ulReadDir(d)) != NULL) {
if (string(dent->d_name) != string(".") && if (string(dent->d_name) != string(".") &&
string(dent->d_name) != string("..") && string(dent->d_name) != string("..") && dent->d_isdir) {
dent->d_isdir)
{
SGPath currACDir = aircraftDir; SGPath currACDir = aircraftDir;
currACDir.append(dent->d_name); currACDir.append(dent->d_name);
if ((d2 = ulOpenDir(currACDir.c_str())) == NULL) if ((d2 = ulOpenDir(currACDir.c_str())) == NULL)
@ -148,11 +148,12 @@ void FGTrafficManager::init()
while ((dent2 = ulReadDir(d2)) != NULL) { while ((dent2 = ulReadDir(d2)) != NULL) {
SGPath currFile = currACDir; SGPath currFile = currACDir;
currFile.append(dent2->d_name); currFile.append(dent2->d_name);
if (currFile.extension() == string("xml")) if (currFile.extension() == string("xml")) {
{
SGPath currFile = currACDir; SGPath currFile = currACDir;
currFile.append(dent2->d_name); currFile.append(dent2->d_name);
SG_LOG(SG_GENERAL, SG_DEBUG, "Scanning " << currFile.str() << " for traffic"); SG_LOG(SG_GENERAL, SG_DEBUG,
"Scanning " << currFile.
str() << " for traffic");
readXML(currFile.str(), *this); readXML(currFile.str(), *this);
} }
} }
@ -161,6 +162,25 @@ void FGTrafficManager::init()
} }
ulCloseDir(d); ulCloseDir(d);
} }
} else {
fgSetBool("/sim/traffic-manager/heuristics", false);
SGPath path = string(fgGetString("/sim/traffic-manager/datafile"));
string ext = path.extension();
if (path.extension() == "xml") {
if (path.exists()) {
readXML(path.str(), *this);
}
} else if (path.extension() == "conf") {
if (path.exists()) {
readTimeTableFromFile(path);
}
} else {
SG_LOG(SG_GENERAL, SG_ALERT,
"Unknown data format " << path.str()
<< " for traffic");
}
//exit(1);
}
if (fgGetBool("/sim/traffic-manager/heuristics")) { if (fgGetBool("/sim/traffic-manager/heuristics")) {
//cerr << "Processing Heuristics" << endl; //cerr << "Processing Heuristics" << endl;
// Load the heuristics data // Load the heuristics data
@ -176,38 +196,46 @@ void FGTrafficManager::init()
if (cacheData.exists()) { if (cacheData.exists()) {
ifstream data(cacheData.c_str()); ifstream data(cacheData.c_str());
while (1) { while (1) {
Heuristic *h = new Heuristic; Heuristic h; // = new Heuristic;
data >> h->registration >> h->runCount >> h->hits; data >> h.registration >> h.runCount >> h.hits;
if (data.eof()) if (data.eof())
break; break;
heurMap[h->registration] = h; HeuristicMapIterator itr = heurMap.find(h.registration);
if (itr != heurMap.end()) {
SG_LOG(SG_GENERAL, SG_WARN,"Traffic Manager Warning: found duplicate tailnumber " <<
h.registration << " for AI aircraft");
}
heurMap[h.registration] = h;
heuristics.push_back(h); heuristics.push_back(h);
} }
} }
} }
for (currAircraft = scheduledAircraft.begin(); for (currAircraft = scheduledAircraft.begin();
currAircraft != scheduledAircraft.end(); currAircraft != scheduledAircraft.end(); currAircraft++) {
currAircraft++) {
string registration = (*currAircraft)->getRegistration(); string registration = (*currAircraft)->getRegistration();
HeuristicMapIterator itr = heurMap.find(registration); HeuristicMapIterator itr = heurMap.find(registration);
//cerr << "Processing heuristics for" << (*currAircraft)->getRegistration() << endl; //cerr << "Processing heuristics for" << (*currAircraft)->getRegistration() << endl;
if (itr == heurMap.end()) { if (itr == heurMap.end()) {
//cerr << "No heuristics found for " << registration << endl; //cerr << "No heuristics found for " << registration << endl;
} else { } else {
(*currAircraft)->setrunCount(itr->second->runCount); (*currAircraft)->setrunCount(itr->second.runCount);
(*currAircraft)->setHits (itr->second->hits); (*currAircraft)->setHits(itr->second.hits);
(*currAircraft)->setScore();
//cerr <<"Runcount " << itr->second->runCount << ".Hits " << itr->second->hits << endl; //cerr <<"Runcount " << itr->second->runCount << ".Hits " << itr->second->hits << endl;
} }
} }
//cerr << "Done" << endl; //cerr << "Done" << endl;
for (heuristicsVectorIterator hvi = heuristics.begin(); //for (heuristicsVectorIterator hvi = heuristics.begin();
hvi != heuristics.end(); // hvi != heuristics.end(); hvi++) {
hvi++) { // delete(*hvi);
delete (*hvi); //}
} }
sort (scheduledAircraft.begin(), scheduledAircraft.end(), compareSchedules); // Do sorting and scoring separately, to take advantage of the "homeport| variable
for (currAircraft = scheduledAircraft.begin();
currAircraft != scheduledAircraft.end(); currAircraft++) {
(*currAircraft)->setScore();
} }
sort(scheduledAircraft.begin(), scheduledAircraft.end(),
compareSchedules);
currAircraft = scheduledAircraft.begin(); currAircraft = scheduledAircraft.begin();
currAircraftClosest = scheduledAircraft.begin(); currAircraftClosest = scheduledAircraft.begin();
} }
@ -222,17 +250,16 @@ void FGTrafficManager::update(double /*dt*/)
return; return;
} }
SGVec3d userCart = SGVec3d::fromGeod(SGGeod::fromDeg( SGVec3d userCart =
fgGetDouble("/position/longitude-deg"), SGVec3d::fromGeod(SGGeod::
fromDeg(fgGetDouble("/position/longitude-deg"),
fgGetDouble("/position/latitude-deg"))); fgGetDouble("/position/latitude-deg")));
if(currAircraft == scheduledAircraft.end()) if (currAircraft == scheduledAircraft.end()) {
{
currAircraft = scheduledAircraft.begin(); currAircraft = scheduledAircraft.begin();
} }
//cerr << "Processing << " << (*currAircraft)->getRegistration() << " with score " << (*currAircraft)->getScore() << endl; //cerr << "Processing << " << (*currAircraft)->getRegistration() << " with score " << (*currAircraft)->getScore() << endl;
if (!((*currAircraft)->update(now, userCart))) if (!((*currAircraft)->update(now, userCart))) {
{
// NOTE: With traffic manager II, this statement below is no longer true // NOTE: With traffic manager II, this statement below is no longer true
// after proper initialization, we shouldnt get here. // after proper initialization, we shouldnt get here.
// But let's make sure // But let's make sure
@ -249,10 +276,8 @@ void FGTrafficManager::release(int id)
bool FGTrafficManager::isReleased(int id) bool FGTrafficManager::isReleased(int id)
{ {
IdListIterator i = releaseList.begin(); IdListIterator i = releaseList.begin();
while (i != releaseList.end()) while (i != releaseList.end()) {
{ if ((*i) == id) {
if ((*i) == id)
{
releaseList.erase(i); releaseList.erase(i);
return true; return true;
} }
@ -260,7 +285,8 @@ bool FGTrafficManager::isReleased(int id)
} }
return false; return false;
} }
/*
void FGTrafficManager::readTimeTableFromFile(SGPath infileName) void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
{ {
string model; string model;
@ -316,9 +342,10 @@ void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
FlightType = tokens[9]; FlightType = tokens[9];
radius = atof(tokens[8].c_str()); radius = atof(tokens[8].c_str());
offset = atof(tokens[7].c_str());; offset = atof(tokens[7].c_str());;
//cerr << "Found AC string " << model << " " << livery << " " << homePort << " " SG_LOG(SG_GENERAL, SG_ALERT, "Adding Aircraft" << model << " " << livery << " " << homePort << " "
// << registration << " " << flightReq << " " << isHeavy << " " << acType << " " << airline << " " << m_class << registration << " " << flightReq << " " << isHeavy
// << " " << FlightType << " " << radius << " " << offset << endl; << " " << acType << " " << airline << " " << m_class
<< " " << FlightType << " " << radius << " " << offset);
scheduledAircraft.push_back(new FGAISchedule(model, scheduledAircraft.push_back(new FGAISchedule(model,
livery, livery,
homePort, homePort,
@ -350,7 +377,7 @@ void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
string requiredAircraft = tokens[9]; string requiredAircraft = tokens[9];
if (weekdays.size() != 7) { if (weekdays.size() != 7) {
cerr << "Found misconfigured weekdays string" << weekdays << endl; SG_LOG(SG_GENERAL, SG_ALERT, "Found misconfigured weekdays string" << weekdays);
exit(1); exit(1);
} }
depTime.clear(); depTime.clear();
@ -365,23 +392,24 @@ void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
arrivalWeekdayNeedsIncrement = true; arrivalWeekdayNeedsIncrement = true;
} }
for (int i = 0; i < 7; i++) { for (int i = 0; i < 7; i++) {
int j = i+1;
if (weekdays[i] != '.') { if (weekdays[i] != '.') {
char buffer[4]; char buffer[4];
snprintf(buffer, 4, "%d/", i); snprintf(buffer, 4, "%d/", j);
string departureTime = string(buffer) + depTimeGen + string(":00"); string departureTime = string(buffer) + depTimeGen + string(":00");
string arrivalTime; string arrivalTime;
if (!arrivalWeekdayNeedsIncrement) { if (!arrivalWeekdayNeedsIncrement) {
arrivalTime = string(buffer) + arrTimeGen + string(":00"); arrivalTime = string(buffer) + arrTimeGen + string(":00");
} }
if (arrivalWeekdayNeedsIncrement && i != 6 ) { if (arrivalWeekdayNeedsIncrement && i != 6 ) {
snprintf(buffer, 4, "%d/", i+1); snprintf(buffer, 4, "%d/", j+1);
arrivalTime = string(buffer) + arrTimeGen + string(":00"); arrivalTime = string(buffer) + arrTimeGen + string(":00");
} }
if (arrivalWeekdayNeedsIncrement && i == 6 ) { if (arrivalWeekdayNeedsIncrement && i == 6 ) {
snprintf(buffer, 4, "%d/", 0); snprintf(buffer, 4, "%d/", 0);
arrivalTime = string(buffer) + arrTimeGen + string(":00"); arrivalTime = string(buffer) + arrTimeGen + string(":00");
} }
cerr << "Adding flight: " << callsign << " " SG_LOG(SG_GENERAL, SG_ALERT, "Adding flight " << callsign << " "
<< fltrules << " " << fltrules << " "
<< departurePort << " " << departurePort << " "
<< arrivalPort << " " << arrivalPort << " "
@ -389,7 +417,7 @@ void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
<< departureTime << " " << departureTime << " "
<< arrivalTime << " " << arrivalTime << " "
<< repeat << " " << repeat << " "
<< requiredAircraft << endl; << requiredAircraft);
flights[requiredAircraft].push_back(new FGScheduledFlight(callsign, flights[requiredAircraft].push_back(new FGScheduledFlight(callsign,
fltrules, fltrules,
@ -407,9 +435,9 @@ void FGTrafficManager::readTimeTableFromFile(SGPath infileName)
} }
//exit(1); //exit(1);
}*/ }
/*
void FGTrafficManager::Tokenize(const string& str, void FGTrafficManager::Tokenize(const string& str,
vector<string>& tokens, vector<string>& tokens,
const string& delimiters) const string& delimiters)
@ -429,30 +457,32 @@ void FGTrafficManager::Tokenize(const string& str,
pos = str.find_first_of(delimiters, lastPos); pos = str.find_first_of(delimiters, lastPos);
} }
} }
*/
void FGTrafficManager::startXML () {
void FGTrafficManager::startXML()
{
//cout << "Start XML" << endl; //cout << "Start XML" << endl;
requiredAircraft = ""; requiredAircraft = "";
homePort = ""; homePort = "";
} }
void FGTrafficManager::endXML () { void FGTrafficManager::endXML()
{
//cout << "End XML" << endl; //cout << "End XML" << endl;
} }
void FGTrafficManager::startElement (const char * name, const XMLAttributes &atts) { void FGTrafficManager::startElement(const char *name,
const XMLAttributes & atts)
{
const char *attval; const char *attval;
//cout << "Start element " << name << endl; //cout << "Start element " << name << endl;
//FGTrafficManager temp; //FGTrafficManager temp;
//for (int i = 0; i < atts.size(); i++) //for (int i = 0; i < atts.size(); i++)
// if (string(atts.getName(i)) == string("include")) // if (string(atts.getName(i)) == string("include"))
attval = atts.getValue("include"); attval = atts.getValue("include");
if (attval != 0) if (attval != 0) {
{
//cout << "including " << attval << endl; //cout << "including " << attval << endl;
SGPath path = SGPath path = globals->get_fg_root();
globals->get_fg_root();
path.append("/Traffic/"); path.append("/Traffic/");
path.append(attval); path.append(attval);
readXML(path.str(), *this); readXML(path.str(), *this);
@ -461,7 +491,8 @@ void FGTrafficManager::startElement (const char * name, const XMLAttributes &at
// cout << " " << atts.getName(i) << '=' << atts.getValue(i) << endl; // cout << " " << atts.getName(i) << '=' << atts.getValue(i) << endl;
} }
void FGTrafficManager::endElement (const char * name) { void FGTrafficManager::endElement(const char *name)
{
//cout << "End element " << name << endl; //cout << "End element " << name << endl;
const string & value = elementValueStack.back(); const string & value = elementValueStack.back();
@ -487,14 +518,12 @@ void FGTrafficManager::endElement (const char * name) {
offset = atoi(value.c_str()); offset = atoi(value.c_str());
else if (!strcmp(name, "performance-class")) else if (!strcmp(name, "performance-class"))
m_class = value; m_class = value;
else if (!strcmp(name, "heavy")) else if (!strcmp(name, "heavy")) {
{
if (value == string("true")) if (value == string("true"))
heavy = true; heavy = true;
else else
heavy = false; heavy = false;
} } else if (!strcmp(name, "callsign"))
else if (!strcmp(name, "callsign"))
callsign = value; callsign = value;
else if (!strcmp(name, "fltrules")) else if (!strcmp(name, "fltrules"))
fltrules = value; fltrules = value;
@ -502,22 +531,17 @@ void FGTrafficManager::endElement (const char * name) {
port = value; port = value;
else if (!strcmp(name, "time")) else if (!strcmp(name, "time"))
timeString = value; timeString = value;
else if (!strcmp(name, "departure")) else if (!strcmp(name, "departure")) {
{
departurePort = port; departurePort = port;
departureTime = timeString; departureTime = timeString;
} } else if (!strcmp(name, "cruise-alt"))
else if (!strcmp(name, "cruise-alt"))
cruiseAlt = atoi(value.c_str()); cruiseAlt = atoi(value.c_str());
else if (!strcmp(name, "arrival")) else if (!strcmp(name, "arrival")) {
{
arrivalPort = port; arrivalPort = port;
arrivalTime = timeString; arrivalTime = timeString;
} } else if (!strcmp(name, "repeat"))
else if (!strcmp(name, "repeat"))
repeat = value; repeat = value;
else if (!strcmp(name, "flight")) else if (!strcmp(name, "flight")) {
{
// We have loaded and parsed all the information belonging to this flight // We have loaded and parsed all the information belonging to this flight
// so we temporarily store it. // so we temporarily store it.
//cerr << "Pusing back flight " << callsign << endl; //cerr << "Pusing back flight " << callsign << endl;
@ -547,10 +571,18 @@ void FGTrafficManager::endElement (const char * name) {
<< arrivalPort << " " << arrivalPort << " "
<< cruiseAlt << " " << cruiseAlt << " "
<< departureTime << " " << departureTime << " "
<< arrivalTime << " " << arrivalTime << " " << repeat << " " << requiredAircraft);
<< repeat << " " // For database maintainance purposes, it may be convenient to
<< requiredAircraft); //
if (fgGetBool("/sim/traffic-manager/dumpdata") == true) {
SG_LOG(SG_GENERAL, SG_ALERT, "Traffic Dump FLIGHT," << callsign << ","
<< fltrules << ","
<< departurePort << ","
<< arrivalPort << ","
<< cruiseAlt << ","
<< departureTime << ","
<< arrivalTime << "," << repeat << "," << requiredAircraft);
}
flights[requiredAircraft].push_back(new FGScheduledFlight(callsign, flights[requiredAircraft].push_back(new FGScheduledFlight(callsign,
fltrules, fltrules,
departurePort, departurePort,
@ -561,12 +593,26 @@ void FGTrafficManager::endElement (const char * name) {
repeat, repeat,
requiredAircraft)); requiredAircraft));
requiredAircraft = ""; requiredAircraft = "";
} else if (!strcmp(name, "aircraft")) {
string isHeavy;
if (heavy) {
isHeavy = "true";
} else {
isHeavy = "false";
} }
else if (!strcmp(name, "aircraft")) /*
{ cerr << "Traffic Dump AC," << homePort << "," << registration << "," << requiredAircraft
int proportion = (int) (fgGetDouble("/sim/traffic-manager/proportion") * 100); << "," << acType << "," << livery << ","
<< airline << "," << offset << "," << radius << "," << flighttype << "," << isHeavy << "," << mdl << endl;*/
int proportion =
(int) (fgGetDouble("/sim/traffic-manager/proportion") * 100);
int randval = rand() & 100; int randval = rand() & 100;
if (randval < proportion) { if (randval <= proportion) {
if (fgGetBool("/sim/traffic-manager/dumpdata") == true) {
SG_LOG(SG_GENERAL, SG_ALERT, "Traffic Dump AC," << homePort << "," << registration << "," << requiredAircraft
<< "," << acType << "," << livery << ","
<< airline << "," << offset << "," << radius << "," << flighttype << "," << isHeavy << "," << mdl);
}
//scheduledAircraft.push_back(new FGAISchedule(mdl, //scheduledAircraft.push_back(new FGAISchedule(mdl,
// livery, // livery,
// registration, // registration,
@ -597,12 +643,13 @@ void FGTrafficManager::endElement (const char * name) {
airline, airline,
m_class, m_class,
flighttype, flighttype,
radius, radius, offset));
offset));
// while(flights.begin() != flights.end()) { // while(flights.begin() != flights.end()) {
// flights.pop_back(); // flights.pop_back();
// } // }
} else {
cerr << "Skipping : " << randval;
} }
acCounter++; acCounter++;
requiredAircraft = ""; requiredAircraft = "";
@ -613,29 +660,32 @@ void FGTrafficManager::endElement (const char * name) {
// } // }
//flights.clear(); //flights.clear();
SG_LOG(SG_GENERAL, SG_BULK, "Reading aircraft : " SG_LOG(SG_GENERAL, SG_BULK, "Reading aircraft : "
<< registration << registration << " with prioritization score " << score);
<< " with prioritization score "
<< score);
score = 0; score = 0;
} }
elementValueStack.pop_back(); elementValueStack.pop_back();
} }
void FGTrafficManager::data (const char * s, int len) { void FGTrafficManager::data(const char *s, int len)
{
string token = string(s, len); string token = string(s, len);
//cout << "Character data " << string(s,len) << endl; //cout << "Character data " << string(s,len) << endl;
elementValueStack.back() += token; elementValueStack.back() += token;
} }
void FGTrafficManager::pi (const char * target, const char * data) { void FGTrafficManager::pi(const char *target, const char *data)
{
//cout << "Processing instruction " << target << ' ' << data << endl; //cout << "Processing instruction " << target << ' ' << data << endl;
} }
void FGTrafficManager::warning (const char * message, int line, int column) { void FGTrafficManager::warning(const char *message, int line, int column)
SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')'); {
SG_LOG(SG_IO, SG_WARN,
"Warning: " << message << " (" << line << ',' << column << ')');
} }
void FGTrafficManager::error (const char * message, int line, int column) { void FGTrafficManager::error(const char *message, int line, int column)
SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')'); {
SG_LOG(SG_IO, SG_ALERT,
"Error: " << message << " (" << line << ',' << column << ')');
} }

View file

@ -65,10 +65,10 @@ public:
unsigned int hits; unsigned int hits;
}; };
typedef vector<Heuristic*> heuristicsVector; typedef vector<Heuristic> heuristicsVector;
typedef vector<Heuristic*>::iterator heuristicsVectorIterator; typedef vector<Heuristic>::iterator heuristicsVectorIterator;
typedef std::map < std::string, Heuristic *> HeuristicMap; typedef std::map < std::string, Heuristic> HeuristicMap;
typedef HeuristicMap::iterator HeuristicMapIterator; typedef HeuristicMap::iterator HeuristicMapIterator;
@ -93,8 +93,8 @@ private:
FGScheduledFlightMap flights; FGScheduledFlightMap flights;
//void readTimeTableFromFile(SGPath infilename); void readTimeTableFromFile(SGPath infilename);
//void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " "); void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ");
public: public:
FGTrafficManager(); FGTrafficManager();