From 514acc9f5fa8aa9bdb2b64b36c905d9b695a05ef Mon Sep 17 00:00:00 2001 From: durk Date: Sun, 10 Jun 2007 06:06:57 +0000 Subject: [PATCH] Changed formatting to K&R/4 by "popular demand". --- src/AIModel/AIAircraft.cxx | 619 ++++++++++++++----------------------- 1 file changed, 225 insertions(+), 394 deletions(-) diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index 7002bbeaf..ea0637bf2 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -51,24 +51,22 @@ static string tempReg; // cruise_speed, descent_speed, land_speed // -const FGAIAircraft::PERF_STRUCT FGAIAircraft::settings[] = -{ - // light aircraft - {2.0, 2.0, 450.0, 1000.0, 70.0, 80.0, 100.0, 80.0, 60.0}, - // ww2_fighter - {4.0, 2.0, 3000.0, 1500.0, 110.0, 180.0, 250.0, 200.0, 100.0}, - // jet_transport - {5.0, 2.0, 3000.0, 1500.0, 140.0, 300.0, 430.0, 300.0, 130.0}, - // jet_fighter - {7.0, 3.0, 4000.0, 2000.0, 150.0, 350.0, 500.0, 350.0, 150.0}, - // tanker - {5.0, 2.0, 3000.0, 1500.0, 140.0, 300.0, 430.0, 300.0, 130.0}, - // ufo (extreme accel/decel) - {30.0, 30.0, 6000.0, 6000.0, 150.0, 300.0, 430.0, 300.0, 130.0} -}; - -FGAIAircraft::FGAIAircraft(FGAISchedule *ref) : FGAIBase(otAircraft) -{ +const FGAIAircraft::PERF_STRUCT FGAIAircraft::settings[] = { + // light aircraft + {2.0, 2.0, 450.0, 1000.0, 70.0, 80.0, 100.0, 80.0, 60.0}, + // ww2_fighter + {4.0, 2.0, 3000.0, 1500.0, 110.0, 180.0, 250.0, 200.0, 100.0}, + // jet_transport + {5.0, 2.0, 3000.0, 1500.0, 140.0, 300.0, 430.0, 300.0, 130.0}, + // jet_fighter + {7.0, 3.0, 4000.0, 2000.0, 150.0, 350.0, 500.0, 350.0, 150.0}, + // tanker + {5.0, 2.0, 3000.0, 1500.0, 140.0, 300.0, 430.0, 300.0, 130.0}, + // ufo (extreme accel/decel) + {30.0, 30.0, 6000.0, 6000.0, 150.0, 300.0, 430.0, 300.0, 130.0} + }; + +FGAIAircraft::FGAIAircraft(FGAISchedule *ref) : FGAIBase(otAircraft) { trafficRef = ref; if (trafficRef) groundOffset = trafficRef->getGroundOffset(); @@ -97,16 +95,14 @@ FGAIAircraft::FGAIAircraft(FGAISchedule *ref) : FGAIBase(otAircraft) } -FGAIAircraft::~FGAIAircraft() -{ +FGAIAircraft::~FGAIAircraft() { //delete fp; if (controller) controller->signOff(getID()); } -void FGAIAircraft::readFromScenario(SGPropertyNode* scFileNode) -{ +void FGAIAircraft::readFromScenario(SGPropertyNode* scFileNode) { if (!scFileNode) return; @@ -114,102 +110,79 @@ void FGAIAircraft::readFromScenario(SGPropertyNode* scFileNode) setPerformance(scFileNode->getStringValue("class", "jet_transport")); setFlightPlan(scFileNode->getStringValue("flightplan"), - scFileNode->getBoolValue("repeat", false)); + scFileNode->getBoolValue("repeat", false)); setCallSign(scFileNode->getStringValue("callsign")); } -void FGAIAircraft::bind() -{ +void FGAIAircraft::bind() { FGAIBase::bind(); props->tie("controls/gear/gear-down", - SGRawValueMethods(*this, - &FGAIAircraft::_getGearDown)); + SGRawValueMethods(*this, + &FGAIAircraft::_getGearDown)); props->setStringValue("callsign", callsign.c_str()); } -void FGAIAircraft::unbind() -{ +void FGAIAircraft::unbind() { FGAIBase::unbind(); props->untie("controls/gear/gear-down"); } -void FGAIAircraft::update(double dt) -{ +void FGAIAircraft::update(double dt) { FGAIBase::update(dt); Run(dt); Transform(); } -void FGAIAircraft::setPerformance(const std::string& acclass) -{ - if (acclass == "light") - { +void FGAIAircraft::setPerformance(const std::string& acclass) { + if (acclass == "light") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::LIGHT]); - } - else if (acclass == "ww2_fighter") - { + } else if (acclass == "ww2_fighter") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::WW2_FIGHTER]); - } - else if (acclass == "jet_transport") - { + } else if (acclass == "jet_transport") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::JET_TRANSPORT]); - } - else if (acclass == "jet_fighter") - { + } else if (acclass == "jet_fighter") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::JET_FIGHTER]); - } - else if (acclass == "tanker") - { + } else if (acclass == "tanker") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::JET_TRANSPORT]); - } - else if (acclass == "ufo") - { + } else if (acclass == "ufo") { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::UFO]); - } - else - { + } else { SetPerformance(&FGAIAircraft::settings[FGAIAircraft::JET_TRANSPORT]); } } -void FGAIAircraft::SetPerformance(const PERF_STRUCT *ps) -{ +void FGAIAircraft::SetPerformance(const PERF_STRUCT *ps) { performance = ps; } -void FGAIAircraft::Run(double dt) -{ +void FGAIAircraft::Run(double dt) { FGAIAircraft::dt = dt; - if(!updateTargetValues()) - return; + if (!updateTargetValues()) + return; - if (controller) - { + if (controller) { controller->update(getID(), - pos.getLatitudeDeg(), - pos.getLongitudeDeg(), - hdg, - speed, - altitude_ft, dt); + pos.getLatitudeDeg(), + pos.getLongitudeDeg(), + hdg, + speed, + altitude_ft, dt); processATC(controller->getInstruction(getID())); } - if (no_roll) - { + if (no_roll) { adjustSpeed(groundTargetSpeed); - } - else - { + } else { adjustSpeed(tgt_speed); } @@ -222,48 +195,41 @@ void FGAIAircraft::Run(double dt) } -void FGAIAircraft::AccelTo(double speed) -{ +void FGAIAircraft::AccelTo(double speed) { tgt_speed = speed; } -void FGAIAircraft::PitchTo(double angle) -{ +void FGAIAircraft::PitchTo(double angle) { tgt_pitch = angle; alt_lock = false; } -void FGAIAircraft::RollTo(double angle) -{ +void FGAIAircraft::RollTo(double angle) { tgt_roll = angle; hdg_lock = false; } -void FGAIAircraft::YawTo(double angle) -{ +void FGAIAircraft::YawTo(double angle) { tgt_yaw = angle; } -void FGAIAircraft::ClimbTo(double alt_ft ) -{ +void FGAIAircraft::ClimbTo(double alt_ft ) { tgt_altitude_ft = alt_ft; alt_lock = true; } -void FGAIAircraft::TurnTo(double heading) -{ +void FGAIAircraft::TurnTo(double heading) { tgt_heading = heading; hdg_lock = true; } -double FGAIAircraft::sign(double x) -{ +double FGAIAircraft::sign(double x) { if (x == 0.0) return x; else @@ -271,10 +237,8 @@ double FGAIAircraft::sign(double x) } -void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat) -{ - if (!flightplan.empty()) - { +void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat) { + if (!flightplan.empty()) { FGAIFlightPlan* fp = new FGAIFlightPlan(flightplan); fp->setRepeat(repeat); SetFlightPlan(fp); @@ -282,15 +246,13 @@ void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat) } -void FGAIAircraft::SetFlightPlan(FGAIFlightPlan *f) -{ +void FGAIAircraft::SetFlightPlan(FGAIFlightPlan *f) { delete fp; fp = f; } -void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) -{ +void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) { //if (! fpExecutable(now)) // return; @@ -311,21 +273,17 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) /////////////////////////////////////////////////////////////////////////// // Initialize the flightplan ////////////////////////////////////////////////////////////////////////// - if (!prev) - { + if (!prev) { handleFirstWaypoint(); return; } // end of initialization dt_count = 0; - if (! leadPointReached(curr)) - { + if (! leadPointReached(curr)) { controlHeading(curr); controlSpeed(curr, next); - } - else - { + } else { if (curr->finished) //end of the flight plan { if (fp->getRepeat()) @@ -335,8 +293,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) return; } - if (next) - { + if (next) { //TODO more intelligent method in AIFlightPlan, no need to send data it already has :-) tgt_heading = fp->getBearing(curr, next); spinCounter = 0; @@ -352,17 +309,14 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) next = fp->getNextWaypoint(); // Now that we have incremented the waypoints, excute some traffic manager specific code - if (trafficRef) - { + if (trafficRef) { //TODO isn't this best executed right at the beginning? - if (! aiTrafficVisible()) - { + if (! aiTrafficVisible()) { setDie(true); return; } - if (! handleAirportEndPoints(prev, now)) - { + if (! handleAirportEndPoints(prev, now)) { setDie(true); return; } @@ -371,23 +325,19 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) } - if (next) - { + if (next) { fp->setLeadDistance(speed, tgt_heading, curr, next); } if (!(prev->on_ground)) // only update the tgt altitude from flightplan if not on the ground { tgt_altitude_ft = prev->altitude; - if (curr->crossat > -1000.0) - { + if (curr->crossat > -1000.0) { use_perf_vs = false; tgt_vs = (curr->crossat - altitude_ft) / (fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr) - / 6076.0 / speed*60.0); + / 6076.0 / speed*60.0); tgt_altitude_ft = curr->crossat; - } - else - { + } else { use_perf_vs = true; } } @@ -398,26 +348,21 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now ) } -void FGAIAircraft::initializeFlightPlan() -{ - +void FGAIAircraft::initializeFlightPlan() { } -bool FGAIAircraft::_getGearDown() const -{ +bool FGAIAircraft::_getGearDown() const { return ((props->getFloatValue("position/altitude-agl-ft") < 900.0) - && (props->getFloatValue("velocities/airspeed-kt") - < performance->land_speed*1.25)); + && (props->getFloatValue("velocities/airspeed-kt") + < performance->land_speed*1.25)); } -void FGAIAircraft::loadNextLeg() -{ +void FGAIAircraft::loadNextLeg() { int leg; - if ((leg = fp->getLeg()) == 10) - { + if ((leg = fp->getLeg()) == 10) { trafficRef->next(); leg = 1; fp->setLeg(leg); @@ -425,27 +370,24 @@ void FGAIAircraft::loadNextLeg() FGAirport *dep = trafficRef->getDepartureAirport(); FGAirport *arr = trafficRef->getArrivalAirport(); - if (!(dep && arr)) - { + if (!(dep && arr)) { setDie(true); - } - else - { + } else { double cruiseAlt = trafficRef->getCruiseAlt() * 100; fp->create (dep, - arr, - leg, - cruiseAlt, //(trafficRef->getCruiseAlt() * 100), // convert from FL to feet - trafficRef->getSpeed(), - _getLatitude(), - _getLongitude(), - false, - trafficRef->getRadius(), - trafficRef->getFlightType(), - acType, - company); + arr, + leg, + cruiseAlt, //(trafficRef->getCruiseAlt() * 100), // convert from FL to feet + trafficRef->getSpeed(), + _getLatitude(), + _getLongitude(), + false, + trafficRef->getRadius(), + trafficRef->getFlightType(), + acType, + company); } } @@ -455,8 +397,7 @@ void FGAIAircraft::loadNextLeg() // Either this function or the logic of how often it is called // will almost certainly change. -void FGAIAircraft::getGroundElev(double dt) -{ +void FGAIAircraft::getGroundElev(double dt) { dt_elev_count += dt; // Update minimally every three secs, but add some randomness @@ -467,8 +408,7 @@ void FGAIAircraft::getGroundElev(double dt) dt_elev_count = 0; // Only do the proper hitlist stuff if we are within visible range of the viewer. - if (!invisible) - { + if (!invisible) { double visibility_meters = fgGetDouble("/environment/visibility-m"); FGViewer* vw = globals->get_current_view(); @@ -477,16 +417,14 @@ void FGAIAircraft::getGroundElev(double dt) SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0); SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0); view.CourseAndDistance(current, &course, &distance); - if(distance > visibility_meters) - { + if (distance > visibility_meters) { //aip.getSGLocation()->set_cur_elev_m(aptElev); return; } // FIXME: make sure the pos.lat/pos.lon values are in degrees ... double range = 500.0; - if (!globals->get_tile_mgr()->scenery_available(pos.getLatitudeDeg(), pos.getLongitudeDeg(), range)) - { + if (!globals->get_tile_mgr()->scenery_available(pos.getLatitudeDeg(), pos.getLongitudeDeg(), range)) { // Try to shedule tiles for that position. globals->get_tile_mgr()->update( aip.getSGLocation(), range ); } @@ -499,14 +437,12 @@ void FGAIAircraft::getGroundElev(double dt) } -void FGAIAircraft::setCallSign(const string& s) -{ +void FGAIAircraft::setCallSign(const string& s) { callsign = s; } -void FGAIAircraft::doGroundAltitude() -{ +void FGAIAircraft::doGroundAltitude() { if (fabs(altitude_ft - (tgt_altitude_ft+groundOffset)) > 1000.0) altitude_ft = (tgt_altitude_ft + groundOffset); else @@ -514,138 +450,111 @@ void FGAIAircraft::doGroundAltitude() } -void FGAIAircraft::announcePositionToController() -{ - if (trafficRef) - { +void FGAIAircraft::announcePositionToController() { + if (trafficRef) { int leg = fp->getLeg(); // Note that leg was been incremented after creating the current leg, so we should use // leg numbers here that are one higher than the number that is used to create the leg // - switch (leg) - { - case 3: // Taxiing to runway - if (trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork()->exists()) - controller = trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork(); - break; - case 4: //Take off tower controller - if (trafficRef->getDepartureAirport()->getDynamics()) - { - controller = trafficRef->getDepartureAirport()->getDynamics()->getTowerController(); - //if (trafficRef->getDepartureAirport()->getId() == "EHAM") { - //cerr << trafficRef->getCallSign() << " at runway " << fp->getRunway() << "Ready for departure " - // << trafficRef->getFlightType() << " to " << trafficRef->getArrivalAirport()->getId() << endl; - // if (controller == 0) { - //cerr << "Error in assigning controller at " << trafficRef->getDepartureAirport()->getId() << endl; - //} - - } - else - { - cerr << "Error: Could not find Dynamics at airport : " << trafficRef->getDepartureAirport()->getId() << endl; - } - break; - case 9: // Taxiing for parking - if (trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork()->exists()) - controller = trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork(); - break; - default: - controller = 0; - break; + switch (leg) { + case 3: // Taxiing to runway + if (trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork()->exists()) + controller = trafficRef->getDepartureAirport()->getDynamics()->getGroundNetwork(); + break; + case 4: //Take off tower controller + if (trafficRef->getDepartureAirport()->getDynamics()) { + controller = trafficRef->getDepartureAirport()->getDynamics()->getTowerController(); + //if (trafficRef->getDepartureAirport()->getId() == "EHAM") { + //cerr << trafficRef->getCallSign() << " at runway " << fp->getRunway() << "Ready for departure " + // << trafficRef->getFlightType() << " to " << trafficRef->getArrivalAirport()->getId() << endl; + // if (controller == 0) { + //cerr << "Error in assigning controller at " << trafficRef->getDepartureAirport()->getId() << endl; + //} + + } else { + cerr << "Error: Could not find Dynamics at airport : " << trafficRef->getDepartureAirport()->getId() << endl; + } + break; + case 9: // Taxiing for parking + if (trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork()->exists()) + controller = trafficRef->getArrivalAirport()->getDynamics()->getGroundNetwork(); + break; + default: + controller = 0; + break; } - if ((controller != prevController) && (prevController != 0)) - { + if ((controller != prevController) && (prevController != 0)) { prevController->signOff(getID()); string callsign = trafficRef->getCallSign(); if ( trafficRef->getHeavy()) callsign += "Heavy"; - switch (leg) - { - case 3: - //cerr << callsign << " ready to taxi to runway " << fp->getRunway() << endl; - break; - case 4: - //cerr << callsign << " at runway " << fp->getRunway() << "Ready for take-off. " - // << trafficRef->getFlightRules() << " to " << trafficRef->getArrivalAirport()->getId() - // << "(" << trafficRef->getArrivalAirport()->getName() << ")."<< endl; - break; + switch (leg) { + case 3: + //cerr << callsign << " ready to taxi to runway " << fp->getRunway() << endl; + break; + case 4: + //cerr << callsign << " at runway " << fp->getRunway() << "Ready for take-off. " + // << trafficRef->getFlightRules() << " to " << trafficRef->getArrivalAirport()->getId() + // << "(" << trafficRef->getArrivalAirport()->getName() << ")."<< endl; + break; } } prevController = controller; - if (controller) - { + if (controller) { controller->announcePosition(getID(), fp, fp->getCurrentWaypoint()->routeIndex, - _getLatitude(), _getLongitude(), hdg, speed, altitude_ft, - trafficRef->getRadius(), leg, trafficRef->getCallSign()); + _getLatitude(), _getLongitude(), hdg, speed, altitude_ft, + trafficRef->getRadius(), leg, trafficRef->getCallSign()); } } } -void FGAIAircraft::processATC(FGATCInstruction instruction) -{ +void FGAIAircraft::processATC(FGATCInstruction instruction) { //cerr << "Processing ATC instruction (not Implimented yet)" << endl; - if (instruction.getHoldPattern ()) - { - } + if (instruction.getHoldPattern ()) {} // Hold Position - if (instruction.getHoldPosition ()) - { - if (!holdPos) - { + if (instruction.getHoldPosition ()) { + if (!holdPos) { holdPos = true; } AccelTo(0.0); - } - else - { - if (holdPos) - { + } else { + if (holdPos) { //if (trafficRef) // cerr << trafficRef->getCallSign() << " Resuming Taxi " << endl; holdPos = false; } // Change speed Instruction. This can only be excecuted when there is no // Hold position instruction. - if (instruction.getChangeSpeed ()) - { + if (instruction.getChangeSpeed ()) { // if (trafficRef) //cerr << trafficRef->getCallSign() << " Changing Speed " << endl; AccelTo(instruction.getSpeed()); - } - else - { + } else { if (fp) AccelTo(fp->getPreviousWaypoint()->speed); } } - if (instruction.getChangeHeading ()) - { + if (instruction.getChangeHeading ()) { hdg_lock = false; TurnTo(instruction.getHeading()); + } else { + if (fp) { + hdg_lock = true; + } } - else - { - if (fp) {hdg_lock = true;} - } - if (instruction.getChangeAltitude()) - { - } + if (instruction.getChangeAltitude()) {} } -void FGAIAircraft::handleFirstWaypoint() -{ +void FGAIAircraft::handleFirstWaypoint() { bool eraseWaypoints; //TODO YAGNI - if (trafficRef) - { + if (trafficRef) { eraseWaypoints = true; - } - else - { + } else { eraseWaypoints = false; } @@ -685,19 +594,16 @@ void FGAIAircraft::handleFirstWaypoint() { use_perf_vs = false; tgt_vs = (curr->crossat - prev->altitude) - / (fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr) - / 6076.0 / prev->speed*60.0); + / (fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr) + / 6076.0 / prev->speed*60.0); tgt_altitude_ft = curr->crossat; - } - else - { + } else { use_perf_vs = true; tgt_altitude_ft = prev->altitude; } alt_lock = hdg_lock = true; no_roll = prev->on_ground; - if (no_roll) - { + if (no_roll) { Transform(); // make sure aip is initialized. getGroundElev(60.1); // make sure it's executed first time around, so force a large dt value doGroundAltitude(); @@ -716,8 +622,7 @@ void FGAIAircraft::handleFirstWaypoint() * @param now * @return */ -bool FGAIAircraft::fpExecutable(time_t now) -{ +bool FGAIAircraft::fpExecutable(time_t now) { double rand_exec_time = (rand() % 100) / 100; return (dt_count > (0.1+rand_exec_time)) && (fp->isActive(now)); } @@ -729,8 +634,7 @@ bool FGAIAircraft::fpExecutable(time_t now) * @param curr * @return */ -bool FGAIAircraft::leadPointReached(FGAIFlightPlan::waypoint* curr) -{ +bool FGAIAircraft::leadPointReached(FGAIFlightPlan::waypoint* curr) { double dist_to_go = fp->getDistanceToGo(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr); //cerr << "2" << endl; @@ -738,8 +642,7 @@ bool FGAIAircraft::leadPointReached(FGAIFlightPlan::waypoint* curr) //cerr << " Distance : " << dist_to_go << ": Lead distance " << lead_dist << endl; // experimental: Use fabs, because speed can be negative (I hope) during push_back. - if (lead_dist < fabs(2*speed)) - { + if (lead_dist < fabs(2*speed)) { //don't skip over the waypoint lead_dist = fabs(2*speed); //cerr << "Extending lead distance to " << lead_dist << endl; @@ -750,8 +653,7 @@ bool FGAIAircraft::leadPointReached(FGAIFlightPlan::waypoint* curr) } -bool FGAIAircraft::aiTrafficVisible() -{ +bool FGAIAircraft::aiTrafficVisible() { double userLatitude = fgGetDouble("/position/latitude-deg"); double userLongitude = fgGetDouble("/position/longitude-deg"); double course, distance; @@ -774,8 +676,7 @@ bool FGAIAircraft::aiTrafficVisible() */ //TODO the trafficRef is the right place for the method -bool FGAIAircraft::handleAirportEndPoints(FGAIFlightPlan::waypoint* prev, time_t now) -{ +bool FGAIAircraft::handleAirportEndPoints(FGAIFlightPlan::waypoint* prev, time_t now) { // prepare routing from one airport to another FGAirport * dep = trafficRef->getDepartureAirport(); FGAirport * arr = trafficRef->getArrivalAirport(); @@ -790,12 +691,10 @@ bool FGAIAircraft::handleAirportEndPoints(FGAIFlightPlan::waypoint* prev, time_t // This is the last taxi waypoint, and marks the the end of the flight plan // so, the schedule should update and wait for the next departure time. - if (prev->name == "END") - { + if (prev->name == "END") { time_t nextDeparture = trafficRef->getDepartureTime(); // make sure to wait at least 20 minutes at parking to prevent "nervous" taxi behavior - if (nextDeparture < (now+1200)) - { + if (nextDeparture < (now+1200)) { nextDeparture = now + 1200; } fp->setTime(nextDeparture); @@ -810,32 +709,26 @@ bool FGAIAircraft::handleAirportEndPoints(FGAIFlightPlan::waypoint* prev, time_t * * @param curr */ -void FGAIAircraft::controlHeading(FGAIFlightPlan::waypoint* curr) -{ +void FGAIAircraft::controlHeading(FGAIFlightPlan::waypoint* curr) { double calc_bearing = fp->getBearing(pos.getLatitudeDeg(), pos.getLongitudeDeg(), curr); //cerr << "Bearing = " << calc_bearing << endl; - if (speed < 0) - { + if (speed < 0) { calc_bearing +=180; if (calc_bearing > 360) calc_bearing -= 360; } - if (finite(calc_bearing)) - { + if (finite(calc_bearing)) { double hdg_error = calc_bearing - tgt_heading; - if (fabs(hdg_error) > 1.0) - { + if (fabs(hdg_error) > 1.0) { TurnTo( calc_bearing ); } - } - else - { + } else { cerr << "calc_bearing is not a finite number : " - << "Speed " << speed - << "pos : " << pos.getLatitudeDeg() << ", " << pos.getLongitudeDeg() - << "waypoint " << curr->latitude << ", " << curr->longitude << endl; + << "Speed " << speed + << "pos : " << pos.getLatitudeDeg() << ", " << pos.getLongitudeDeg() + << "waypoint " << curr->latitude << ", " << curr->longitude << endl; cerr << "waypoint name " << curr->name; exit(1); // FIXME } @@ -849,12 +742,10 @@ void FGAIAircraft::controlHeading(FGAIFlightPlan::waypoint* curr) * @param curr * @param next */ -void FGAIAircraft::controlSpeed(FGAIFlightPlan::waypoint* curr, FGAIFlightPlan::waypoint* next) -{ +void FGAIAircraft::controlSpeed(FGAIFlightPlan::waypoint* curr, FGAIFlightPlan::waypoint* next) { double speed_diff = speed - prevSpeed; - if (fabs(speed_diff) > 10) - { + if (fabs(speed_diff) > 10) { prevSpeed = speed; fp->setLeadDistance(speed, tgt_heading, curr, next); } @@ -864,28 +755,23 @@ void FGAIAircraft::controlSpeed(FGAIFlightPlan::waypoint* curr, FGAIFlightPlan:: /** * Update target values (heading, alt, speed) depending on flight plan or control properties */ -bool FGAIAircraft::updateTargetValues() -{ +bool FGAIAircraft::updateTargetValues() { if (fp) // AI object has a flightplan { //TODO make this a function of AIBase time_t now = time(NULL) + fgGetLong("/sim/time/warp"); //cerr << "UpateTArgetValues() " << endl; ProcessFlightPlan(dt, now); - if (! fp->isActive(now)) - { + if (! fp->isActive(now)) { // Do execute Ground elev for inactive aircraft, so they // Are repositioned to the correct ground altitude when the user flies within visibility range. // In addition, check whether we are out of user range, so this aircraft // can be deleted. - if (no_roll) - { + if (no_roll) { Transform(); // make sure aip is initialized. - if (trafficRef) - { + if (trafficRef) { //cerr << trafficRef->getRegistration() << " Setting altitude to " << altitude_ft; - if (! aiTrafficVisible()) - { + if (! aiTrafficVisible()) { setDie(true); return false; } @@ -898,37 +784,30 @@ bool FGAIAircraft::updateTargetValues() return false; } } - else - { + else { // no flight plan, update target heading, speed, and altitude // from control properties. These default to the initial // settings in the config file, but can be changed "on the // fly". string lat_mode = props->getStringValue("controls/flight/lateral-mode"); - if ( lat_mode == "roll" ) - { + if ( lat_mode == "roll" ) { double angle - = props->getDoubleValue("controls/flight/target-roll" ); + = props->getDoubleValue("controls/flight/target-roll" ); RollTo( angle ); - } - else - { + } else { double angle - = props->getDoubleValue("controls/flight/target-hdg" ); + = props->getDoubleValue("controls/flight/target-hdg" ); TurnTo( angle ); } string lon_mode - = props->getStringValue("controls/flight/longitude-mode"); - if ( lon_mode == "alt" ) - { + = props->getStringValue("controls/flight/longitude-mode"); + if ( lon_mode == "alt" ) { double alt = props->getDoubleValue("controls/flight/target-alt" ); ClimbTo( alt ); - } - else - { + } else { double angle - = props->getDoubleValue("controls/flight/target-pitch" ); + = props->getDoubleValue("controls/flight/target-pitch" ); PitchTo( angle ); } @@ -941,8 +820,7 @@ bool FGAIAircraft::updateTargetValues() /** * Adjust the speed (accelerate/decelerate) to tgt_speed. */ -void FGAIAircraft::adjustSpeed(double tgt_speed) -{ +void FGAIAircraft::adjustSpeed(double tgt_speed) { double speed_diff = tgt_speed - speed; speed_diff = groundTargetSpeed - speed; @@ -952,17 +830,12 @@ void FGAIAircraft::adjustSpeed(double tgt_speed) if ( speed > tgt_speed ) speed = tgt_speed; - } - else if (speed_diff < 0.0) - { - if (no_roll) - { + } else if (speed_diff < 0.0) { + if (no_roll) { // on ground (aircraft can't roll) // deceleration performance is better due to wheel brakes. speed -= performance->decel * dt * 3; - } - else - { + } else { speed -= performance->decel * dt; } @@ -973,13 +846,12 @@ void FGAIAircraft::adjustSpeed(double tgt_speed) } -void FGAIAircraft::updatePosition() -{ +void FGAIAircraft::updatePosition() { // convert speed to degrees per second double speed_north_deg_sec = cos( hdg * SGD_DEGREES_TO_RADIANS ) - * speed * 1.686 / ft_per_deg_lat; + * speed * 1.686 / ft_per_deg_lat; double speed_east_deg_sec = sin( hdg * SGD_DEGREES_TO_RADIANS ) - * speed * 1.686 / ft_per_deg_lon; + * speed * 1.686 / ft_per_deg_lon; // set new position pos.setLatitudeDeg( pos.getLatitudeDeg() + speed_north_deg_sec * dt); @@ -987,22 +859,19 @@ void FGAIAircraft::updatePosition() } -void FGAIAircraft::updateHeading() -{ +void FGAIAircraft::updateHeading() { // adjust heading based on current bank angle if (roll == 0.0) roll = 0.01; - if (roll != 0.0) - { + if (roll != 0.0) { // double turnConstant; //if (no_roll) // turnConstant = 0.0088362; //else // turnConstant = 0.088362; // If on ground, calculate heading change directly - if (no_roll) - { + if (no_roll) { double headingDiff = fabs(hdg-tgt_heading); if (headingDiff > 180) @@ -1012,8 +881,7 @@ void FGAIAircraft::updateHeading() if (sign(groundTargetSpeed) != sign(tgt_speed)) groundTargetSpeed = 0.21 * sign(tgt_speed); // to prevent speed getting stuck in 'negative' mode - if (headingDiff > 30.0) - { + if (headingDiff > 30.0) { // invert if pushed backward headingChangeRate += dt * sign(roll); @@ -1022,25 +890,18 @@ void FGAIAircraft::updateHeading() else if (headingChangeRate < -30) headingChangeRate = -30; - } - else - { + } else { if (fabs(headingChangeRate) > headingDiff) headingChangeRate = headingDiff*sign(roll); else headingChangeRate += dt * sign(roll); } hdg += headingChangeRate * dt; - } - else - { - if (fabs(speed) > 1.0) - { + } else { + if (fabs(speed) > 1.0) { turn_radius_ft = 0.088362 * speed * speed - / tan( fabs(roll) / SG_RADIANS_TO_DEGREES ); - } - else - { + / tan( fabs(roll) / SG_RADIANS_TO_DEGREES ); + } else { // Check if turn_radius_ft == 0; this might lead to a division by 0. turn_radius_ft = 1.0; } @@ -1049,13 +910,11 @@ void FGAIAircraft::updateHeading() double alpha = dist_covered_ft / turn_circum_ft * 360.0; hdg += alpha * sign(roll); } - while ( hdg > 360.0 ) - { + while ( hdg > 360.0 ) { hdg -= 360.0; spinCounter++; } - while ( hdg < 0.0) - { + while ( hdg < 0.0) { hdg += 360.0; spinCounter--; } @@ -1063,11 +922,9 @@ void FGAIAircraft::updateHeading() } -void FGAIAircraft::updateBankAngles() -{ +void FGAIAircraft::updateBankAngles() { // adjust target bank angle if heading lock engaged - if (hdg_lock) - { + if (hdg_lock) { double bank_sense = 0.0; double diff = fabs(hdg - tgt_heading); if (diff > 180) @@ -1076,24 +933,17 @@ void FGAIAircraft::updateBankAngles() double sum = hdg + diff; if (sum > 360.0) sum -= 360.0; - if (fabs(sum - tgt_heading) < 1.0) - { + if (fabs(sum - tgt_heading) < 1.0) { bank_sense = 1.0; // right turn - } - else - { + } else { bank_sense = -1.0; // left turn } - if (diff < 30) - { + if (diff < 30) { tgt_roll = diff * bank_sense; - } - else - { + } else { tgt_roll = 30.0 * bank_sense; } - if ((fabs((double) spinCounter) > 1) && (diff > 30)) - { + if ((fabs((double) spinCounter) > 1) && (diff > 30)) { tgt_speed *= 0.999; // Ugly hack: If aircraft get stuck, they will continually spin around. // The only way to resolve this is to make them slow down. } @@ -1101,8 +951,7 @@ void FGAIAircraft::updateBankAngles() // adjust bank angle, use 9 degrees per second double bank_diff = tgt_roll - roll; - if (fabs(bank_diff) > 0.2) - { + if (fabs(bank_diff) > 0.2) { if (bank_diff > 0.0) roll += 9.0 * dt; @@ -1114,45 +963,36 @@ void FGAIAircraft::updateBankAngles() } -void FGAIAircraft::updateAltitudes() -{ +void FGAIAircraft::updateAltitudes() { // adjust altitude (meters) based on current vertical speed (fpm) altitude_ft += vs / 60.0 * dt; pos.setElevationFt(altitude_ft); // adjust target Altitude, based on ground elevation when on ground - if (no_roll) - { + if (no_roll) { getGroundElev(dt); doGroundAltitude(); - } - else - { + } else { // find target vertical speed if altitude lock engaged - if (alt_lock && use_perf_vs) - { - if (altitude_ft < tgt_altitude_ft) - { + if (alt_lock && use_perf_vs) { + if (altitude_ft < tgt_altitude_ft) { tgt_vs = tgt_altitude_ft - altitude_ft; if (tgt_vs > performance->climb_rate) tgt_vs = performance->climb_rate; - } - else - { + } else { tgt_vs = tgt_altitude_ft - altitude_ft; if (tgt_vs < (-performance->descent_rate)) tgt_vs = -performance->descent_rate; } } - if (alt_lock && !use_perf_vs) - { + if (alt_lock && !use_perf_vs) { double max_vs = 4*(tgt_altitude_ft - altitude_ft); double min_vs = 100; if (tgt_altitude_ft < altitude_ft) min_vs = -100.0; if ((fabs(tgt_altitude_ft - altitude_ft) < 1500.0) - && (fabs(max_vs) < fabs(tgt_vs))) + && (fabs(max_vs) < fabs(tgt_vs))) tgt_vs = max_vs; if (fabs(tgt_vs) < fabs(min_vs)) @@ -1162,21 +1002,16 @@ void FGAIAircraft::updateAltitudes() } -void FGAIAircraft::updateVerticalSpeed() -{ +void FGAIAircraft::updateVerticalSpeed() { // adjust vertical speed double vs_diff = tgt_vs - vs; - if (fabs(vs_diff) > 10.0) - { - if (vs_diff > 0.0) - { + if (fabs(vs_diff) > 10.0) { + if (vs_diff > 0.0) { vs += (performance->climb_rate / 3.0) * dt; if (vs > tgt_vs) vs = tgt_vs; - } - else - { + } else { vs -= (performance->descent_rate / 3.0) * dt; if (vs < tgt_vs) @@ -1186,15 +1021,11 @@ void FGAIAircraft::updateVerticalSpeed() } -void FGAIAircraft::matchPitchAngle() -{ +void FGAIAircraft::matchPitchAngle() { // match pitch angle to vertical speed - if (vs > 0) - { + if (vs > 0) { pitch = vs * 0.005; - } - else - { + } else { pitch = vs * 0.002; } } -- 2.39.5