X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FATCDCL%2Fground.cxx;h=8f309e370264fa1c15c6595c3c4dc0f51b7ced70;hb=1df8130bddbbc3bc590c37c31f5256470f839cfb;hp=4adfa9958c821c83c51f6b54467f2773b573cb0c;hpb=aacebaf4b8f101dbad17f20e5136f50cd6991a6f;p=flightgear.git diff --git a/src/ATCDCL/ground.cxx b/src/ATCDCL/ground.cxx index 4adfa9958..8f309e370 100644 --- a/src/ATCDCL/ground.cxx +++ b/src/ATCDCL/ground.cxx @@ -22,6 +22,8 @@ # include #endif +#include + #include #include #include @@ -30,15 +32,15 @@ #include
#include -#include STL_FSTREAM +#include #include "ground.hxx" #include "ATCutils.hxx" #include "AILocalTraffic.hxx" #include "ATCmgr.hxx" -SG_USING_STD(ifstream); -SG_USING_STD(cout); +using std::ifstream; +using std::cout; node::node() { } @@ -358,53 +360,42 @@ void FGGround::Update(double dt) { // will be initialised before ground so we can't do that. void FGGround::DoRwyDetails() { //cout << "GetRwyDetails called" << endl; - - // Based on the airport-id and wind get the active runway - - //wind - double hdg = wind_from_hdg->getDoubleValue(); - double speed = wind_speed_knots->getDoubleValue(); - hdg = (speed == 0.0 ? 270.0 : hdg); - //cout << "Heading = " << hdg << '\n'; - - FGRunway runway; - bool rwyGood = globals->get_runways()->search(ident, int(hdg), &runway); - if(rwyGood) { - activeRwy = runway._rwy_no; - rwy.rwyID = runway._rwy_no; - SG_LOG(SG_ATC, SG_INFO, "In FGGround, active runway for airport " << ident << " is " << activeRwy); - // Get the threshold position - double other_way = runway._heading - 180.0; - while(other_way <= 0.0) { - other_way += 360.0; - } - // move to the +l end/center of the runway - //cout << "Runway center is at " << runway._lon << ", " << runway._lat << '\n'; - Point3D origin = Point3D(runway._lon, runway._lat, aptElev); - Point3D ref = origin; - double tshlon, tshlat, tshr; - double tolon, tolat, tor; - rwy.length = runway._length * SG_FEET_TO_METER; - geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), other_way, - rwy.length / 2.0 - 25.0, &tshlat, &tshlon, &tshr ); - geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), runway._heading, - rwy.length / 2.0 - 25.0, &tolat, &tolon, &tor ); - // Note - 25 meters in from the runway end is a bit of a hack to put the plane ahead of the user. - // now copy what we need out of runway into rwy - rwy.threshold_pos = Point3D(tshlon, tshlat, aptElev); - Point3D takeoff_end = Point3D(tolon, tolat, aptElev); - //cout << "Threshold position = " << tshlon << ", " << tshlat << ", " << aptElev << '\n'; - //cout << "Takeoff position = " << tolon << ", " << tolat << ", " << aptElev << '\n'; - rwy.hdg = runway._heading; - // Set the projection for the local area based on this active runway - ortho.Init(rwy.threshold_pos, rwy.hdg); - rwy.end1ortho = ortho.ConvertToLocal(rwy.threshold_pos); // should come out as zero - rwy.end2ortho = ortho.ConvertToLocal(takeoff_end); - } else { - SG_LOG(SG_ATC, SG_ALERT, "Help - can't get good runway in FGTower!!"); - activeRwy = "NN"; - } + const FGAirport* apt = fgFindAirportID(ident); + assert(apt); + FGRunway* runway = apt->getActiveRunwayForUsage(); + + activeRwy = runway->ident(); + rwy.rwyID = runway->ident(); + SG_LOG(SG_ATC, SG_INFO, "In FGGround, active runway for airport " << ident << " is " << activeRwy); + + // Get the threshold position + double other_way = runway->headingDeg() - 180.0; + while(other_way <= 0.0) { + other_way += 360.0; + } + // move to the +l end/center of the runway + //cout << "Runway center is at " << runway._lon << ", " << runway._lat << '\n'; + Point3D origin = Point3D(runway->longitude(), runway->latitude(), aptElev); + Point3D ref = origin; + double tshlon, tshlat, tshr; + double tolon, tolat, tor; + rwy.length = runway->lengthM(); + geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), other_way, + rwy.length / 2.0 - 25.0, &tshlat, &tshlon, &tshr ); + geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), runway->headingDeg(), + rwy.length / 2.0 - 25.0, &tolat, &tolon, &tor ); + // Note - 25 meters in from the runway end is a bit of a hack to put the plane ahead of the user. + // now copy what we need out of runway into rwy + rwy.threshold_pos = Point3D(tshlon, tshlat, aptElev); + Point3D takeoff_end = Point3D(tolon, tolat, aptElev); + //cout << "Threshold position = " << tshlon << ", " << tshlat << ", " << aptElev << '\n'; + //cout << "Takeoff position = " << tolon << ", " << tolat << ", " << aptElev << '\n'; + rwy.hdg = runway->headingDeg(); + // Set the projection for the local area based on this active runway + ortho.Init(rwy.threshold_pos, rwy.hdg); + rwy.end1ortho = ortho.ConvertToLocal(rwy.threshold_pos); // should come out as zero + rwy.end2ortho = ortho.ConvertToLocal(takeoff_end); } // Return a random gate ID of an unused gate.