1
0
Fork 0

- remove trailing spaces

- fix ridiculous mixture of 2-space-, 3-space-, 4-space-, tab-indents,
  and ~K&R & (braindead) FSF coding style
This commit is contained in:
mfranz 2006-05-13 10:02:17 +00:00
parent db22f457b5
commit d9ee19d6cc
2 changed files with 848 additions and 878 deletions

View file

@ -63,12 +63,14 @@ const FGAIAircraft::PERF_STRUCT FGAIAircraft::settings[] = {
FGAIAircraft::FGAIAircraft(FGAISchedule *ref) :
FGAIBase(otAircraft) {
FGAIBase(otAircraft)
{
trafficRef = ref;
if (trafficRef)
groundOffset = trafficRef->getGroundOffset();
else
groundOffset = 0;
fp = 0;
dt_count = 0;
dt_elev_count = 0;
@ -87,6 +89,7 @@ FGAIAircraft::~FGAIAircraft() {
//delete fp;
}
void FGAIAircraft::readFromScenario(SGPropertyNode* scFileNode) {
if (!scFileNode)
return;
@ -100,11 +103,13 @@ void FGAIAircraft::readFromScenario(SGPropertyNode* scFileNode) {
setTACANChannelID(scFileNode->getStringValue("TACAN-channel-ID"));
}
bool FGAIAircraft::init() {
refuel_node = fgGetNode("systems/refuel/contact", true);
return FGAIBase::init();
}
void FGAIAircraft::bind() {
FGAIBase::bind();
@ -117,6 +122,7 @@ void FGAIAircraft::bind() {
props->setBoolValue("tanker",isTanker);
}
void FGAIAircraft::unbind() {
FGAIBase::unbind();
@ -126,14 +132,13 @@ void FGAIAircraft::unbind() {
void FGAIAircraft::update(double dt) {
FGAIBase::update(dt);
Run(dt);
Transform();
}
void FGAIAircraft::setPerformance(const std::string& acclass)
{
void FGAIAircraft::setPerformance(const std::string& acclass) {
if (acclass == "light") {
SetPerformance(&FGAIAircraft::settings[FGAIAircraft::LIGHT]);
} else if (acclass == "ww2_fighter") {
@ -150,6 +155,7 @@ void FGAIAircraft::setPerformance(const std::string& acclass)
}
}
void FGAIAircraft::SetPerformance(const PERF_STRUCT *ps) {
performance = ps;
@ -160,16 +166,13 @@ void FGAIAircraft::Run(double dt) {
FGAIAircraft::dt = dt;
if (fp)
{
if (fp) {
time_t now = time(NULL) + fgGetLong("/sim/time/warp");
ProcessFlightPlan(dt, now);
if (now < fp->getStartTime())
{
if (now < fp->getStartTime()) {
// Do execute Ground elev for inactive aircraft, so they
// Are repositioned to the correct ground altitude when the user flies within visibility range.
if (no_roll)
{
if (no_roll) {
Transform(); // make sure aip is initialized.
getGroundElev(dt); // make sure it's exectuted first time around, so force a large dt value
//getGroundElev(dt); // Need to do this twice.
@ -192,16 +195,14 @@ void FGAIAircraft::Run(double dt) {
// adjust speed
double speed_diff; //= tgt_speed - speed;
if (!no_roll)
{
if (!no_roll) {
speed_diff = tgt_speed - speed;
}
else
{
} else {
speed_diff = groundTargetSpeed - speed;
}
if (fabs(speed_diff) > 0.2) {
if (speed_diff > 0.0) speed += performance->accel * dt;
if (speed_diff > 0.0)
speed += performance->accel * dt;
if (speed_diff < 0.0) {
if (no_roll) { // was (!no_roll) but seems more logical this way (ground brakes).
speed -= performance->decel * dt * 3;
@ -235,6 +236,7 @@ void FGAIAircraft::Run(double dt) {
// adjust heading based on current bank angle
if (roll == 0.0)
roll = 0.01;
if (roll != 0.0) {
// double turnConstant;
//if (no_roll)
@ -247,17 +249,16 @@ void FGAIAircraft::Run(double dt) {
if (headingDiff > 180)
headingDiff = fabs(headingDiff - 360);
groundTargetSpeed = tgt_speed - (tgt_speed * (headingDiff/45));
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) {
headingChangeRate += dt * sign(roll); // invert if pushed backward
// Print some debug statements to find out why aircraft may get stuck
// forever turning
//if (trafficRef->getDepartureAirport()->getId() == string("EHAM"))
// {
//if (trafficRef->getDepartureAirport()->getId() == string("EHAM")) {
// cerr << "Turning : " << trafficRef->getRegistration()
// cerr << " Speed = " << speed << " Heading " << hdg
// << " Target Heading " << tgt_heading
@ -268,31 +269,26 @@ void FGAIAircraft::Run(double dt) {
// << endl;
//}
if (headingChangeRate > 30)
{
headingChangeRate = 30;
}
else if (headingChangeRate < -30)
{
headingChangeRate = -30;
}
}
else
{
} else {
if (fabs(headingChangeRate) > headingDiff)
headingChangeRate = headingDiff*sign(roll);
else
headingChangeRate += dt * sign(roll);
}
hdg += headingChangeRate * dt;
//cerr << "On ground. Heading: " << hdg << ". Target Heading: " << tgt_heading << ". Target speed: " << groundTargetSpeed << ". heading change rate" << headingChangeRate << endl;
}
else {
//cerr << "On ground. Heading: " << hdg << ". Target Heading: " << tgt_heading
// << ". Target speed: " << groundTargetSpeed << ". heading change rate"
// << headingChangeRate << endl;
} else {
if (fabs(speed) > 1.0) {
turn_radius_ft = 0.088362 * speed * speed
/ tan( fabs(roll) / SG_RADIANS_TO_DEGREES );
}
else
{
} else {
turn_radius_ft = 1.0; // Check if turn_radius_ft == 0; this might lead to a division by 0.
}
turn_circum_ft = SGD_2PI * turn_radius_ft;
@ -304,8 +300,7 @@ void FGAIAircraft::Run(double dt) {
hdg -= 360.0;
spinCounter++;
}
while ( hdg < 0.0)
{
while ( hdg < 0.0) {
hdg += 360.0;
spinCounter--;
}
@ -316,9 +311,12 @@ void FGAIAircraft::Run(double dt) {
if (hdg_lock) {
double bank_sense = 0.0;
double diff = fabs(hdg - tgt_heading);
if (diff > 180) diff = fabs(diff - 360);
if (diff > 180)
diff = fabs(diff - 360);
double sum = hdg + diff;
if (sum > 360.0) sum -= 360.0;
if (sum > 360.0)
sum -= 360.0;
if (fabs(sum - tgt_heading) < 1.0) {
bank_sense = 1.0; // right turn
} else {
@ -329,14 +327,12 @@ void FGAIAircraft::Run(double dt) {
} 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.
//if (tempReg.empty())
// tempReg = trafficRef->getRegistration();
//if (trafficRef->getRegistration() == tempReg)
// {
//if (trafficRef->getRegistration() == tempReg) {
// cerr << trafficRef->getRegistration()
// << " appears to be spinning: " << spinCounter << endl
// << " speed " << speed << endl
@ -347,7 +343,6 @@ void FGAIAircraft::Run(double dt) {
// << " lead in angle " << fp->getLeadInAngle()<< endl
// << " roll " << roll << endl
// << " target_roll " << tgt_roll << endl;
//}
}
}
@ -355,8 +350,11 @@ void FGAIAircraft::Run(double dt) {
// adjust bank angle, use 9 degrees per second
double bank_diff = tgt_roll - roll;
if (fabs(bank_diff) > 0.2) {
if (bank_diff > 0.0) roll += 9.0 * dt;
if (bank_diff < 0.0) roll -= 9.0 * dt;
if (bank_diff > 0.0)
roll += 9.0 * dt;
if (bank_diff < 0.0)
roll -= 9.0 * dt;
//while (roll > 180) roll -= 360;
//while (roll < 180) roll += 360;
}
@ -367,13 +365,10 @@ void FGAIAircraft::Run(double dt) {
double altitude_ft = altitude;
// 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) {
@ -390,10 +385,14 @@ void FGAIAircraft::Run(double dt) {
if (alt_lock && !use_perf_vs) {
double max_vs = 4*(tgt_altitude - altitude);
double min_vs = 100;
if (tgt_altitude < altitude) min_vs = -100.0;
if ((fabs(tgt_altitude - altitude) < 1500.0) &&
(fabs(max_vs) < fabs(tgt_vs))) tgt_vs = max_vs;
if (fabs(tgt_vs) < fabs(min_vs)) tgt_vs = min_vs;
if (tgt_altitude < altitude)
min_vs = -100.0;
if ((fabs(tgt_altitude - altitude) < 1500.0)
&& (fabs(max_vs) < fabs(tgt_vs)))
tgt_vs = max_vs;
if (fabs(tgt_vs) < fabs(min_vs))
tgt_vs = min_vs;
}
}
// adjust vertical speed
@ -401,10 +400,14 @@ void FGAIAircraft::Run(double dt) {
if (fabs(vs_diff) > 10.0) {
if (vs_diff > 0.0) {
vs += 900.0 * dt;
if (vs > tgt_vs) vs = tgt_vs;
if (vs > tgt_vs)
vs = tgt_vs;
} else {
vs -= 400.0 * dt;
if (vs < tgt_vs) vs = tgt_vs;
if (vs < tgt_vs)
vs = tgt_vs;
}
}
@ -425,9 +428,8 @@ void FGAIAircraft::Run(double dt) {
//************************************//
if ( isTanker) {
if ( (range_ft2 < 250.0 * 250.0) &&
(y_shift > 0.0) &&
(elevation > 0.0) ) {
if ( (range_ft2 < 250.0 * 250.0) && (y_shift > 0.0)
&& (elevation > 0.0) ) {
refuel_node->setBoolValue(true);
contact = true;
} else {
@ -475,12 +477,14 @@ void FGAIAircraft::TurnTo(double heading) {
double FGAIAircraft::sign(double x) {
if ( x < 0.0 ) { return -1.0; }
else { return 1.0; }
if ( x < 0.0 )
return -1.0;
else
return 1.0;
}
void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat)
{
void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat) {
if (!flightplan.empty()) {
FGAIFlightPlan* fp = new FGAIFlightPlan(flightplan);
fp->setRepeat(repeat);
@ -488,16 +492,16 @@ void FGAIAircraft::setFlightPlan(const std::string& flightplan, bool repeat)
}
}
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 ) {
bool eraseWaypoints;
if (trafficRef)
{
if (trafficRef) {
// FGAirport *arr;
// FGAirport *dep;
eraseWaypoints = true;
@ -510,8 +514,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
// arr = trafficRef->getArrivalAirport();
// if (arr)
// cerr << arr->getId() <<endl << endl;;
}
else
} else
eraseWaypoints = false;
//cerr << "Processing Flightplan" << endl;
@ -535,9 +538,8 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
//next = fp->getNextWaypoint(); //third waypoint (might not exist!)
//cerr << "After increment " << prev-> name << endl;
if (!(fp->getNextWaypoint()) && trafficRef)
{
loadNextLeg();
}
//cerr << "After load " << prev-> name << endl;
prev = fp->getPreviousWaypoint(); //first waypoint
curr = fp->getCurrentWaypoint(); //second waypoint
@ -547,12 +549,12 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
setLongitude(prev->longitude);
setSpeed(prev->speed);
setAltitude(prev->altitude);
if (prev->speed > 0.0)
setHeading(fp->getBearing(prev->latitude, prev->longitude, curr));
else
{
setHeading(fp->getBearing(curr->latitude, curr->longitude, prev));
}
// If next doesn't exist, as in incrementally created flightplans for
// AI/Trafficmanager created plans,
// Make sure lead distance is initialized otherwise
@ -561,9 +563,9 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
if (curr->crossat > -1000.0) { //use a calculated descent/climb rate
use_perf_vs = false;
tgt_vs = (curr->crossat - prev->altitude)/
(fp->getDistanceToGo(pos.lat(), pos.lon(), curr)/
6076.0/prev->speed*60.0);
tgt_vs = (curr->crossat - prev->altitude)
/ (fp->getDistanceToGo(pos.lat(), pos.lon(), curr)
/ 6076.0 / prev->speed*60.0);
tgt_altitude = curr->crossat;
} else {
use_perf_vs = true;
@ -571,8 +573,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
}
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 exectuted first time around, so force a large dt value
//getGroundElev(60.1); // Need to do this twice.
@ -589,8 +590,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
} // end of initialization
// let's only process the flight plan every 100 ms.
if ((dt_count < 0.1) || (now < fp->getStartTime()))
{
if ((dt_count < 0.1) || (now < fp->getStartTime())) {
//cerr << "done fp dt" << endl;
return;
} else {
@ -603,26 +603,28 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
double lead_dist = fp->getLeadDistance();
//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)) {
lead_dist = fabs(2*speed); //don't skip over the waypoint
//cerr << "Extending lead distance to " << lead_dist << endl;
}
// FGAirport * apt = trafficRef->getDepartureAirport();
// if ((dist_to_go > prev_dist_to_go) && trafficRef && apt)
// {
// if ((dist_to_go > prev_dist_to_go) && trafficRef && apt) {
// if (apt->getId() == string("EHAM"))
// cerr << "Alert: " << trafficRef->getRegistration() << " is moving away from waypoint " << curr->name << endl
// << "Target heading : " << tgt_heading << "act heading " << hdg << " Tgt speed : " << tgt_speed << endl
// << "Lead distance : " << lead_dist << endl
// << "Distance to go: " << dist_to_go << endl;
// }
prev_dist_to_go = dist_to_go;
//cerr << "2" << endl;
//if (no_roll)
// lead_dist = 10.0;
//cout << "Leg : " << (fp->getLeg()-1) << ". dist_to_go: " << dist_to_go << ", lead_dist: " << lead_dist << ", tgt_speed " << tgt_speed << ", tgt_heading " << tgt_heading << " speed " << speed << " hdg " << hdg << ". Altitude " << altitude << " TAget alt :" << tgt_altitude << endl;
//cout << "Leg : " << (fp->getLeg()-1) << ". dist_to_go: " << dist_to_go << ", lead_dist: "
// << lead_dist << ", tgt_speed " << tgt_speed << ", tgt_heading " << tgt_heading
// << " speed " << speed << " hdg " << hdg << ". Altitude " << altitude << " TAget alt :"
// << tgt_altitude << endl;
if ( dist_to_go < lead_dist ) {
//prev_dist_to_go = HUGE;
@ -630,15 +632,12 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
// check if the aircraft flies of of user range. And adjust the
// Current waypoint's elevation according to Terrain Elevation
if (curr->finished) { //end of the flight plan
{
if (fp->getRepeat()) {
if (fp->getRepeat())
fp->restart();
} else {
else
setDie(true);
}
//cerr << "Done die end of fp" << endl;
}
return;
}
@ -648,35 +647,29 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
//cerr << "Prviious: " << prev->name << endl;
//cerr << "Current : " << curr->name << endl;
//cerr << "Next : " << next->name << endl;
if (next)
{
if (next) {
tgt_heading = fp->getBearing(curr, next);
spinCounter = 0;
}
fp->IncrementWaypoint(eraseWaypoints);
if (!(fp->getNextWaypoint()) && trafficRef)
{
loadNextLeg();
}
prev = fp->getPreviousWaypoint();
curr = fp->getCurrentWaypoint();
next = fp->getNextWaypoint();
// Now that we have incremented the waypoints, excute some traffic manager specific code
// based on the name of the waypoint we just passed.
if (trafficRef)
{
if (trafficRef) {
double userLatitude = fgGetDouble("/position/latitude-deg");
double userLongitude = fgGetDouble("/position/longitude-deg");
double course, distance;
SGWayPoint current (pos.lon(),
pos.lat(),
0);
SGWayPoint user ( userLongitude,
userLatitude,
0);
SGWayPoint current (pos.lon(), pos.lat(), 0);
SGWayPoint user (userLongitude, userLatitude, 0);
user.CourseAndDistance(current, &course, &distance);
if ((distance * SG_METER_TO_NM) > TRAFFICTOAIDIST)
{
if ((distance * SG_METER_TO_NM) > TRAFFICTOAIDIST) {
setDie(true);
//cerr << "done fp die out of range" << endl;
return;
@ -685,13 +678,12 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
FGAirport * dep = trafficRef->getDepartureAirport();
FGAirport * arr = trafficRef->getArrivalAirport();
// At parking the beginning of the airport
if (!( dep && arr))
{
if (!( dep && arr)) {
setDie(true);
return;
}
//if ((dep->getId() == string("EHAM") || (arr->getId() == string("EHAM"))))
// {
//if ((dep->getId() == string("EHAM") || (arr->getId() == string("EHAM")))) {
// cerr << trafficRef->getRegistration()
// << " Enroute from " << dep->getId()
// << " to " << arr->getId()
@ -699,8 +691,7 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
// << " Assigned rwy " << fp->getRunwayId()
// << " " << fp->getRunway() << endl;
// }
//if ((dep->getId() == string("EHAM")) && (prev->name == "park2"))
// {
//if ((dep->getId() == string("EHAM")) && (prev->name == "park2")) {
// cerr << "Schiphol ground "
// << trafficRef->getCallSign();
// if (trafficRef->getHeavy())
@ -710,14 +701,12 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
// << " ready to go. IFR to "
// << arr->getId() <<endl;
// }
if (prev->name == "park2")
{
dep->getDynamics()->releaseParking(fp->getGate());
}
// Some debug messages, specific to testing the Logical networks.
// if ((arr->getId() == string("EHAM")) && (prev->name == "Center"))
// {
if (prev->name == "park2")
dep->getDynamics()->releaseParking(fp->getGate());
// Some debug messages, specific to testing the Logical networks.
// if ((arr->getId() == string("EHAM")) && (prev->name == "Center")) {
// cerr << "Schiphol ground "
// << trafficRef->getRegistration() << " "
// << trafficRef->getCallSign();
@ -734,27 +723,27 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
fp->setTime(trafficRef->getDepartureTime());
//cerr << "5" << endl;
}
if (next)
{
if (next) {
//cerr << "Current waypoint" << curr->name << endl;
//cerr << "Next waypoint" << next->name << endl;
fp->setLeadDistance(speed, tgt_heading, curr, next);
}
//cerr << "5.1" << endl;
if (!(prev->on_ground)) { // only update the tgt altitude from flightplan if not on the ground
tgt_altitude = prev->altitude;
if (curr->crossat > -1000.0) {
//cerr << "5.1a" << endl;
use_perf_vs = false;
tgt_vs = (curr->crossat - altitude)/
(fp->getDistanceToGo(pos.lat(), pos.lon(), curr)/6076.0/speed*60.0);
tgt_vs = (curr->crossat - altitude) / (fp->getDistanceToGo(pos.lat(), pos.lon(), curr)
/ 6076.0 / speed*60.0);
//cerr << "5.1b" << endl;
tgt_altitude = curr->crossat;
} else {
//cerr << "5.1c" << endl;
use_perf_vs = true;
//cerr << "5.1d" << endl;
//cerr << "Setting target altitude : " <<tgt_altitude << endl;
}
}
@ -766,44 +755,43 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
//cout << " Target speed: " << tgt_speed << endl;
//cout << " Target altitude: " << tgt_altitude << endl;
//cout << " Target heading: " << tgt_heading << endl << endl;
} else {
} else {
double calc_bearing = fp->getBearing(pos.lat(), pos.lon(), 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) {
TurnTo( calc_bearing );
}
}
else
{
} else {
cerr << "calc_bearing is not a finite number : "
<< "Speed " << speed
<< "pos : " << pos.lat() << ", " << pos.lon()
<< "waypoint " << curr->latitude << ", " << curr->longitude << endl;
cerr << "waypoint name " << curr->name;
exit(1);
exit(1); // FIXME
}
double speed_diff = speed - prevSpeed;
// Update the lead distance calculation if speed has changed sufficiently
// to prevent spinning (hopefully);
if (fabs(speed_diff) > 10)
{
if (fabs(speed_diff) > 10) {
prevSpeed = speed;
fp->setLeadDistance(speed, tgt_heading, curr, next);
}
//cerr << "Done Processing FlightPlan"<< endl;
} // if (dt count) else
}
}
bool FGAIAircraft::_getGearDown() const {
return ((props->getFloatValue("position/altitude-agl-ft") < 900.0)
@ -812,12 +800,10 @@ void FGAIAircraft::ProcessFlightPlan( double dt, time_t now )
}
void FGAIAircraft::loadNextLeg()
{
void FGAIAircraft::loadNextLeg() {
//delete fp;
//time_t now = time(NULL) + fgGetLong("/sim/time/warp");
//FGAIModelEntity entity;
//entity.m_class = "jet_transport";
//entity.path = modelPath.c_str();
@ -828,31 +814,26 @@ void FGAIAircraft::loadNextLeg()
//entity.speed = 450; // HACK ALERT
//entity.fp = new FGAIFlightPlan(&entity, courseToDest, i->getDepartureTime(), dep, arr);
int leg;
if ((leg = fp->getLeg()) == 10)
{
if ((leg = fp->getLeg()) == 10) {
trafficRef->next();
leg = 1;
fp->setLeg(leg);
//cerr << "Resetting leg : " << leg << endl;
}
//{
//leg++;
//fp->setLeg(leg);
//cerr << "Creating leg number : " << leg << endl;
FGAirport *dep = trafficRef->getDepartureAirport();
FGAirport *arr = trafficRef->getArrivalAirport();
if (!(dep && arr))
{
if (!(dep && arr)) {
setDie(true);
//cerr << "Failed to get airport in AIAircraft::ProcessFlightplan()" << endl;
//if (dep)
// cerr << "Departure " << dep->getId() << endl;
//if (arr)
// cerr << "Arrival " << arr->getId() << endl;
}
else
{
} else {
double cruiseAlt = trafficRef->getCruiseAlt() * 100;
//cerr << "Creating new leg using " << cruiseAlt << " as cruise altitude."<< endl;
@ -897,9 +878,7 @@ void FGAIAircraft::loadNextLeg()
//tgt_speed = prev->speed;
//hdg_lock = alt_lock = true;
//no_roll = prev->on_ground;
}
//}
//else
//{
//delete entity.fp;
@ -915,7 +894,6 @@ void FGAIAircraft::loadNextLeg()
}
// Note: This code is copied from David Luff's AILocalTraffic
// Warning - ground elev determination is CPU intensive
// Either this function or the logic of how often it is called
@ -923,15 +901,14 @@ void FGAIAircraft::loadNextLeg()
void FGAIAircraft::getGroundElev(double dt) {
dt_elev_count += dt;
//return;
if (dt_elev_count < (3.0) + (rand() % 10)) //Update minimally every three secs, but add some randomness to prevent all IA objects doing this in synchrony
{
// Update minimally every three secs, but add some randomness
// to prevent all IA objects doing this in synchrony
if (dt_elev_count < (3.0) + (rand() % 10))
return;
}
else
{
dt_elev_count = 0;
}
// It would be nice if we could set the correct tile center here in order to get a correct
// answer with one call to the function, but what I tried in the two commented-out lines
// below only intermittently worked, and I haven't quite groked why yet.
@ -942,20 +919,13 @@ void FGAIAircraft::getGroundElev(double dt) {
if (!invisible) {
double visibility_meters = fgGetDouble("/environment/visibility-m");
FGViewer* vw = globals->get_current_view();
double
course,
distance;
double course, distance;
//Point3D currView(vw->getLongitude_deg(),
// vw->getLatitude_deg(), 0.0);
SGWayPoint current (pos.lon(),
pos.lat(),
0);
SGWayPoint view ( vw->getLongitude_deg(),
vw->getLatitude_deg(),
0);
SGWayPoint current (pos.lon(), pos.lat(), 0);
SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0);
view.CourseAndDistance(current, &course, &distance);
if(distance > visibility_meters) {
//aip.getSGLocation()->set_cur_elev_m(aptElev);
@ -964,17 +934,16 @@ void FGAIAircraft::getGroundElev(double dt) {
// FIXME: make sure the pos.lat/pos.lon values are in degrees ...
double range = 500.0;
if (!globals->get_tile_mgr()->scenery_available(pos.lat(), pos.lon(), range))
{
if (!globals->get_tile_mgr()->scenery_available(pos.lat(), pos.lon(), range)) {
// Try to shedule tiles for that position.
globals->get_tile_mgr()->update( aip.getSGLocation(), range );
}
// FIXME: make sure the pos.lat/pos.lon values are in degrees ...
double alt;
if (globals->get_scenery()->get_elevation_m(pos.lat(), pos.lon(),
20000.0, alt))
if (globals->get_scenery()->get_elevation_m(pos.lat(), pos.lon(), 20000.0, alt))
tgt_altitude = alt * SG_METER_TO_FEET;
//cerr << "Target altitude : " << tgt_altitude << endl;
// if (globals->get_scenery()->get_elevation_m(pos.lat(), pos.lon(),
// 20000.0, alt))
@ -983,18 +952,21 @@ void FGAIAircraft::getGroundElev(double dt) {
}
}
void FGAIAircraft::setCallSign(const string& s) {
callsign = s;
}
void FGAIAircraft::setTACANChannelID(const string& id) {
TACAN_channel_id = id;
}
void FGAIAircraft::doGroundAltitude()
{
void FGAIAircraft::doGroundAltitude() {
if (fabs(altitude - (tgt_altitude+groundOffset)) > 1000.0)
altitude = (tgt_altitude + groundOffset);
else
altitude += 0.1 * ((tgt_altitude+groundOffset) - altitude);
}

View file

@ -34,7 +34,6 @@ SG_USING_STD(string);
class FGAIAircraft : public FGAIBase {
private:
typedef struct {
double accel;
double decel;
@ -84,7 +83,6 @@ public:
void setCompany(const string& comp) { company = comp;};
inline void SetTanker(bool setting) { isTanker = setting; };
virtual const char* getTypeString(void) const { return "aircraft"; }
private: