X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAirports%2Fdynamics.cxx;h=d608043b478bee48b05c9e6c6dc56b8f2e33f056;hb=e16f772e54216b0088ca9cb3f3b0fb062be8bfdb;hp=a323d809c97e4d5abd7b4d63c40db02da914c9fe;hpb=ca9078f2bc268ae9f51c95177a65e582fafe2264;p=flightgear.git diff --git a/src/Airports/dynamics.cxx b/src/Airports/dynamics.cxx index a323d809c..d608043b4 100644 --- a/src/Airports/dynamics.cxx +++ b/src/Airports/dynamics.cxx @@ -26,8 +26,6 @@ #include -#include - #include #include #include @@ -325,17 +323,21 @@ bool FGAirportDynamics::innerGetActiveRunway(const string & trafficType, takeoff.clear(); lastUpdate = dayStart; prevTrafficType = trafficType; - + /* FGEnvironment stationweather = ((FGEnvironmentMgr *) globals->get_subsystem("environment")) ->getEnvironment(getLatitude(), getLongitude(), getElevation()); - - windSpeed = stationweather.get_wind_speed_kt(); - windHeading = stationweather.get_wind_from_heading_deg(); + */ + windSpeed = fgGetInt("/environment/metar/base-wind-speed-kt"); //stationweather.get_wind_speed_kt(); + windHeading = fgGetInt("/environment/metar/base-wind-dir-deg"); + //stationweather.get_wind_from_heading_deg(); string scheduleName; - //cerr << "finding active Runway for" << _ap->getId() << endl; + //cerr << "finding active Runway for : " << _ap->getId() << endl; + //cerr << "Wind Heading : " << windHeading << endl; + //cerr << "Wind Speed : " << windSpeed << endl; + //cerr << "Nr of seconds since day start << " << dayStart << endl; ScheduleTime *currSched; @@ -347,7 +349,7 @@ bool FGAirportDynamics::innerGetActiveRunway(const string & trafficType, scheduleName = currSched->getName(dayStart); maxTail = currSched->getTailWind(); maxCross = currSched->getCrossWind(); - //cerr << "SChedule anme = " << scheduleName << endl; + //cerr << "Current Schedule = : " << scheduleName << endl; if (scheduleName.empty()) return false; //cerr << "C"<< endl; @@ -371,6 +373,13 @@ bool FGAirportDynamics::innerGetActiveRunway(const string & trafficType, currentlyActive = &ulActive; } + //cerr << "Durrently active selection for " << trafficType << ": "; + for (stringVecIterator it = currentlyActive->begin(); + it != currentlyActive->end(); it++) { + //cerr << (*it) << " "; + } + //cerr << endl; + currRunwayGroup->setActive(_ap, windSpeed, windHeading, @@ -432,6 +441,12 @@ string FGAirportDynamics::chooseRwyByHeading(stringVec rwys, double rwyHeading, headingError; string runway; for (stringVecIterator i = rwys.begin(); i != rwys.end(); i++) { + if (!_ap->hasRunwayWithIdent(*i)) { + SG_LOG(SG_ATC, SG_WARN, "chooseRwyByHeading: runway " << *i << + " not found at " << _ap->ident()); + continue; + } + FGRunway *rwy = _ap->getRunwayByIdent((*i)); rwyHeading = rwy->headingDeg(); headingError = fabs(heading - rwyHeading); @@ -520,6 +535,32 @@ int FGAirportDynamics::getGroundFrequency(unsigned leg) return groundFreq; } +int FGAirportDynamics::getTowerFrequency(unsigned nr) +{ + int towerFreq = 0; + if (nr < 2) { + SG_LOG(SG_ATC, SG_ALERT, + "Leg value is smaller than two at " << SG_ORIGIN); + } + if (freqTower.size() == 0) { + return 0; + } + if ((freqTower.size() > nr - 1) && (nr > 1)) { + towerFreq = freqTower[nr - 1]; + } + if ((freqTower.size() < nr - 1) && (nr > 1)) { + towerFreq = + (freqTower.size() < + (nr - 1)) ? freqTower[freqTower.size() - + 1] : freqTower[nr - 2]; + } + if ((freqTower.size() >= nr - 1) && (nr > 1)) { + towerFreq = freqTower[nr - 2]; + } + return towerFreq; +} + + FGAIFlightPlan *FGAirportDynamics::getSID(string activeRunway, double heading) {