X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAirports%2Frunwayprefs.cxx;h=af715ac3552b98a791d8486f522b98968be44ae7;hb=ca2afa9e512e31937ff8c041722547fc422fe662;hp=60e7f0710456fcbf78baf1e029b396e81e0ae3e5;hpb=885f3f9b3a2a97b65ad427340fcabb56a41dfe08;p=flightgear.git diff --git a/src/Airports/runwayprefs.cxx b/src/Airports/runwayprefs.cxx index 60e7f0710..af715ac35 100644 --- a/src/Airports/runwayprefs.cxx +++ b/src/Airports/runwayprefs.cxx @@ -26,24 +26,15 @@ #endif #include -//#include #include -//#include -//#include - -//#include -//#include -//#include -//#include -//#include #include #include
-//#include
#include #include "runwayprefs.hxx" +#include "simple.hxx" /****************************************************************************** * ScheduleTime @@ -117,7 +108,7 @@ string ScheduleTime::getName(time_t dayStart) //couldn't find one so return 0; //cerr << "Returning 0 " << endl; } - return string(0); + return string(""); } /****************************************************************************** * RunwayList @@ -193,7 +184,7 @@ RunwayGroup& RunwayGroup:: operator= (const RunwayGroup &other) return *this; } -void RunwayGroup::setActive(const string &aptId, +void RunwayGroup::setActive(const FGAirport* airport, double windSpeed, double windHeading, double maxTail, @@ -201,7 +192,7 @@ void RunwayGroup::setActive(const string &aptId, stringVec *currentlyActive) { - FGRunway rwy; + FGRunway* rwy; int activeRwys = rwyList.size(); // get the number of runways active int nrOfPreferences; // bool found = true; @@ -233,16 +224,11 @@ void RunwayGroup::setActive(const string &aptId, // validSelection = true; for (int j = 0; j < activeRwys; j++) - { - - name = rwyList[j].getRwyList(i); - //cerr << "Name of Runway: " << name << endl; - if (globals->get_runways()->search( aptId, - name, - &rwy)) - { - //cerr << "Succes" << endl; - hdgDiff = fabs(windHeading - rwy._heading); + { + rwy = airport->getRunwayByIdent(rwyList[j].getRwyList(i)); + + //cerr << "Succes" << endl; + hdgDiff = fabs(windHeading - rwy->headingDeg()); //cerr << "Wind Heading: " << windHeading << "Runway Heading: " < 180) @@ -251,36 +237,34 @@ void RunwayGroup::setActive(const string &aptId, hdgDiff *= ((2*M_PI)/360.0); // convert to radians crossWind = windSpeed * sin(hdgDiff); tailWind = -windSpeed * cos(hdgDiff); - //cerr << "Tailwind : " << tailWind << endl; - //cerr << "Crosswnd : " << crossWind << endl; + //cerr << ". Tailwind : " << tailWind; + //cerr << ". Crosswnd : " << crossWind; if ((tailWind > maxTail) || (crossWind > maxCross)) { - //cerr << "Invalid : "; + //cerr << ". [Invalid] " << endl; validSelection = false; } else { - //cerr << "Valid : "; + //cerr << ". [Valid] "; } - }else { - SG_LOG( SG_GENERAL, SG_INFO, "Failed to find runway " << name << " at " << aptId ); - exit(1); - } - } + //cerr << endl; + } // of active runways iteration + if (validSelection) { - //cerr << "Valid : "; + //cerr << "Valid selection : " << i << endl;; foundValidSelection = true; for (stringVecIterator it = currentlyActive->begin(); it != currentlyActive->end(); it++) { if ((*it) == name) match++; - if (match >= bestMatch) { - bestMatch = match; - bestChoice = i; - } } + if (match >= bestMatch) { + bestMatch = match; + bestChoice = i; + } } //cerr << "Preference " << i << " bestMatch " << bestMatch << " choice " << bestChoice << endl; } @@ -309,15 +293,11 @@ void RunwayGroup::setActive(const string &aptId, bool validSelection = true; for (int j = 0; j < 2; j++) { - //cerr << "I J " << i << " " << j << endl; - name = rwyList[choice[j]].getRwyList(i); - //cerr << "Name of Runway: " << name << endl; - if (globals->get_runways()->search( aptId, - name, - &rwy)) - { + name = rwyList[choice[j]].getRwyList(i); + rwy = airport->getRunwayByIdent(name); + //cerr << "Succes" << endl; - hdgDiff = fabs(windHeading - rwy._heading); + hdgDiff = fabs(windHeading - rwy->headingDeg()); if (hdgDiff > 180) hdgDiff = 360 - hdgDiff; hdgDiff *= ((2*M_PI)/360.0); // convert to radians @@ -325,10 +305,7 @@ void RunwayGroup::setActive(const string &aptId, tailWind = -windSpeed * cos(hdgDiff); if ((tailWind > maxTail) || (crossWind > maxCross)) validSelection = false; - }else { - SG_LOG( SG_GENERAL, SG_INFO, "Failed to find runway " << name << " at " << aptId ); - exit(1); - } + } if (validSelection) @@ -364,7 +341,8 @@ void RunwayGroup::getActive(int i, string &name, string &type) /***************************************************************************** * FGRunway preference ****************************************************************************/ -FGRunwayPreference::FGRunwayPreference() +FGRunwayPreference::FGRunwayPreference(FGAirport* ap) : + _ap(ap) { //cerr << "Running default Constructor" << endl; initialized = false; @@ -373,16 +351,11 @@ FGRunwayPreference::FGRunwayPreference() FGRunwayPreference::FGRunwayPreference(const FGRunwayPreference &other) { initialized = other.initialized; - value = other.value; - scheduleName = other.scheduleName; comTimes = other.comTimes; // Commercial Traffic; genTimes = other.genTimes; // General Aviation; milTimes = other.milTimes; // Military Traffic; - currTimes= other.currTimes; // Needed for parsing; - rwyList = other.rwyList; - rwyGroup = other.rwyGroup; PreferenceListConstIterator i; for (i = other.preferences.begin(); i != other.preferences.end(); i++) preferences.push_back(*i); @@ -391,16 +364,11 @@ FGRunwayPreference::FGRunwayPreference(const FGRunwayPreference &other) FGRunwayPreference & FGRunwayPreference::operator= (const FGRunwayPreference &other) { initialized = other.initialized; - value = other.value; - scheduleName = other.scheduleName; comTimes = other.comTimes; // Commercial Traffic; genTimes = other.genTimes; // General Aviation; milTimes = other.milTimes; // Military Traffic; - currTimes= other.currTimes; // Needed for parsing; - rwyList = other.rwyList; - rwyGroup = other.rwyGroup; PreferenceListConstIterator i; preferences.clear(); for (i = other.preferences.begin(); i != other.preferences.end(); i++) @@ -435,140 +403,6 @@ RunwayGroup *FGRunwayPreference::getGroup(const string &groupName) return 0; } -void FGRunwayPreference::startXML () { - // cout << "Start XML" << endl; -} - -void FGRunwayPreference::endXML () { - cout << "End XML" << endl; -} - -void FGRunwayPreference::startElement (const char * name, const XMLAttributes &atts) { - //cout << "StartElement " << name << endl; - value = string(""); - if (!(strcmp(name, "wind"))) { - //cerr << "Will be processing Wind" << endl; - for (int i = 0; i < atts.size(); i++) - { - //cout << " " << atts.getName(i) << '=' << atts.getValue(i) << endl; - //attname = atts.getName(i); - if (atts.getName(i) == string("tail")) { - //cerr << "Tail Wind = " << atts.getValue(i) << endl; - currTimes.setTailWind(atof(atts.getValue(i))); - } - if (atts.getName(i) == string("cross")) { - //cerr << "Cross Wind = " << atts.getValue(i) << endl; - currTimes.setCrossWind(atof(atts.getValue(i))); - } - } - } - if (!(strcmp(name, "time"))) { - //cerr << "Will be processing time" << endl; - for (int i = 0; i < atts.size(); i++) - { - if (atts.getName(i) == string("start")) { - //cerr << "Start Time = " << atts.getValue(i) << endl; - currTimes.addStartTime(processTime(atts.getValue(i))); - } - if (atts.getName(i) == string("end")) { - //cerr << "End time = " << atts.getValue(i) << endl; - currTimes.addEndTime(processTime(atts.getValue(i))); - } - if (atts.getName(i) == string("schedule")) { - //cerr << "Schedule Name = " << atts.getValue(i) << endl; - currTimes.addScheduleName(atts.getValue(i)); - } - } - } - if (!(strcmp(name, "takeoff"))) { - rwyList.clear(); - } - if (!(strcmp(name, "landing"))) - { - rwyList.clear(); - } - if (!(strcmp(name, "schedule"))) { - for (int i = 0; i < atts.size(); i++) - { - //cout << " " << atts.getName(i) << '=' << atts.getValue(i) << endl; - //attname = atts.getName(i); - if (atts.getName(i) == string("name")) { - //cerr << "Schedule name = " << atts.getValue(i) << endl; - scheduleName = atts.getValue(i); - } - } - } -} - -//based on a string containing hour and minute, return nr seconds since day start. -time_t FGRunwayPreference::processTime(const string &tme) -{ - string hour = tme.substr(0, tme.find(":",0)); - string minute = tme.substr(tme.find(":",0)+1, tme.length()); - - //cerr << "hour = " << hour << " Minute = " << minute << endl; - return (atoi(hour.c_str()) * 3600 + atoi(minute.c_str()) * 60); -} - -void FGRunwayPreference::endElement (const char * name) { - //cout << "End element " << name << endl; - if (!(strcmp(name, "rwyuse"))) { - initialized = true; - } - if (!(strcmp(name, "com"))) { // Commercial Traffic - //cerr << "Setting time table for commerical traffic" << endl; - comTimes = currTimes; - currTimes.clear(); - } - if (!(strcmp(name, "gen"))) { // General Aviation - //cerr << "Setting time table for general aviation" << endl; - genTimes = currTimes; - currTimes.clear(); - } - if (!(strcmp(name, "mil"))) { // Military Traffic - //cerr << "Setting time table for military traffic" << endl; - genTimes = currTimes; - currTimes.clear(); - } - - if (!(strcmp(name, "takeoff"))) { - //cerr << "Adding takeoff: " << value << endl; - rwyList.set(name, value); - rwyGroup.add(rwyList); - } - if (!(strcmp(name, "landing"))) { - //cerr << "Adding landing: " << value << endl; - rwyList.set(name, value); - rwyGroup.add(rwyList); - } - if (!(strcmp(name, "schedule"))) { - //cerr << "Adding schedule" << scheduleName << endl; - rwyGroup.setName(scheduleName); - //rwyGroup.addRunways(rwyList); - preferences.push_back(rwyGroup); - rwyGroup.clear(); - //exit(1); - } -} - -void FGRunwayPreference::data (const char * s, int len) { - string token = string(s,len); - //cout << "Character data " << string(s,len) << endl; - //if ((token.find(" ") == string::npos && (token.find('\n')) == string::npos)) - // value += token; - //else - // value = string(""); - value += token; -} - -void FGRunwayPreference::pi (const char * target, const char * data) { - //cout << "Processing instruction " << target << ' ' << data << endl; -} - -void FGRunwayPreference::warning (const char * message, int line, int column) { - SG_LOG(SG_IO, SG_WARN, "Warning: " << message << " (" << line << ',' << column << ')'); -} - -void FGRunwayPreference::error (const char * message, int line, int column) { - SG_LOG(SG_IO, SG_ALERT, "Error: " << message << " (" << line << ',' << column << ')'); -} + string FGRunwayPreference::getId() { + return _ap->getId(); + };