- 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:
parent
db22f457b5
commit
d9ee19d6cc
2 changed files with 848 additions and 878 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue