From: ehofman Date: Mon, 22 Dec 2003 10:24:15 +0000 (+0000) Subject: Tidy up the code a bit more, move /ai/model[] to /ai/models/model[] and make sure... X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=298f53edef3aa2161c4398af31827722b1ecd3b5;p=flightgear.git Tidy up the code a bit more, move /ai/model[] to /ai/models/model[] and make sure there can be more than one model subtree. --- diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index f19c054fa..27952de2e 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -98,8 +98,8 @@ void FGAIAircraft::Run(double dt) { double alpha; // get size of a degree at this latitude - ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat() / 57.2958 ); - ft_per_deg_lon = 365228.16 * cos(pos.lat() / 57.2958); + ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat()/SG_RADIANS_TO_DEGREES); + ft_per_deg_lon = 365228.16 * cos(pos.lat() / SG_RADIANS_TO_DEGREES); // adjust speed double speed_diff = tgt_speed - speed; @@ -109,8 +109,10 @@ void FGAIAircraft::Run(double dt) { } // convert speed to degrees per second - speed_north_deg_sec = cos( hdg / 57.29577951 ) * speed * 1.686 / ft_per_deg_lat; - speed_east_deg_sec = sin( hdg / 57.29577951 ) * speed * 1.686 / ft_per_deg_lon; + speed_north_deg_sec = cos( hdg / SG_RADIANS_TO_DEGREES ) + * speed * 1.686 / ft_per_deg_lat; + speed_east_deg_sec = sin( hdg / SG_RADIANS_TO_DEGREES ) + * speed * 1.686 / ft_per_deg_lon; // set new position pos.setlat( pos.lat() + speed_north_deg_sec * dt); @@ -118,8 +120,9 @@ void FGAIAircraft::Run(double dt) { // adjust heading based on current bank angle if (roll != 0.0) { - turn_radius_ft = 0.088362 * speed * speed / tan( fabs(roll) / 57.2958 ); - turn_circum_ft = 6.2831853 * turn_radius_ft; + turn_radius_ft = 0.088362 * speed * speed + / tan( fabs(roll) / SG_RADIANS_TO_DEGREES ); + turn_circum_ft = SGD_2PI * turn_radius_ft; dist_covered_ft = speed * 1.686 * dt; alpha = dist_covered_ft / turn_circum_ft * 360.0; hdg += alpha * sign( roll ); @@ -150,17 +153,19 @@ void FGAIAircraft::Run(double dt) { } // adjust altitude (meters) based on current vertical speed (fpm) - altitude += vs * 0.0166667 * dt * 0.3048; + altitude += vs * 0.0166667 * dt * SG_FEET_TO_METER; // find target vertical speed if altitude lock engaged if (alt_lock) { - double altitude_ft = altitude * 3.28084; + double altitude_ft = altitude * SG_METER_TO_FEET; if (altitude_ft < tgt_altitude) { - tgt_vs = tgt_altitude - altitude_ft; - if (tgt_vs > performance->climb_rate) tgt_vs = performance->climb_rate; + tgt_vs = tgt_altitude - altitude_ft; + if (tgt_vs > performance->climb_rate) + tgt_vs = performance->climb_rate; } else { - tgt_vs = tgt_altitude - altitude_ft; - if (tgt_vs < (-performance->descent_rate)) tgt_vs = -performance->descent_rate; + tgt_vs = tgt_altitude - altitude_ft; + if (tgt_vs < (-performance->descent_rate)) + tgt_vs = -performance->descent_rate; } } diff --git a/src/AIModel/AIBallistic.cxx b/src/AIModel/AIBallistic.cxx index 750096af4..6a0866856 100644 --- a/src/AIModel/AIBallistic.cxx +++ b/src/AIModel/AIBallistic.cxx @@ -83,8 +83,8 @@ void FGAIBallistic::Run(double dt) { double ft_per_deg_lat; // get size of a degree at this latitude - ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat() / 57.2958 ); - ft_per_deg_lon = 365228.16 * cos(pos.lat() / 57.2958); + ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat()/SG_RADIANS_TO_DEGREES); + ft_per_deg_lon = 365228.16 * cos(pos.lat() / SG_RADIANS_TO_DEGREES); // the two drag calculations below assume sea-level density, // mass of 0.03 slugs, drag coeff of 0.295, frontal area of 0.007 ft2 @@ -100,8 +100,8 @@ void FGAIBallistic::Run(double dt) { } // convert horizontal speed (fps) to degrees per second - speed_north_deg_sec = cos( hdg / 57.29577951 ) * hs / ft_per_deg_lat; - speed_east_deg_sec = sin( hdg / 57.29577951 ) * hs / ft_per_deg_lon; + speed_north_deg_sec = cos(hdg / SG_RADIANS_TO_DEGREES) * hs / ft_per_deg_lat; + speed_east_deg_sec = sin(hdg / SG_RADIANS_TO_DEGREES) * hs / ft_per_deg_lon; // set new position pos.setlat( pos.lat() + speed_north_deg_sec * dt); @@ -111,11 +111,11 @@ void FGAIBallistic::Run(double dt) { vs -= 32.17 * dt; // adjust altitude (meters) - altitude += vs * dt * 0.3048; + altitude += vs * dt * SG_FEET_TO_METER; pos.setelev(altitude); // adjust pitch if aerostabilized - if (aero_stabilized) pitch = atan2( vs, hs ) * 57.29577951; + if (aero_stabilized) pitch = atan2( vs, hs ) * SG_RADIANS_TO_DEGREES; // set destruction flag if altitude less than sea level -1000 if (altitude < -1000.0) setDie(true); diff --git a/src/AIModel/AIBase.cxx b/src/AIModel/AIBase.cxx index 9271deef4..baa5cc52f 100644 --- a/src/AIModel/AIBase.cxx +++ b/src/AIModel/AIBase.cxx @@ -65,8 +65,12 @@ void FGAIBase::Transform() { bool FGAIBase::init() { - props = globals->get_props()->getNode("ai/model", true); + SGPropertyNode *root = globals->get_props()->getNode("ai/modeles", true); + vector p_vec = root->getChildren("model"); + unsigned num = p_vec.size(); + p_vec.clear(); + props = root->getNode("model", num, true); ssgBranch *model = sgLoad3DModel( globals->get_fg_root(), model_path.c_str(), props, diff --git a/src/AIModel/AIBase.hxx b/src/AIModel/AIBase.hxx index 0ea71d12b..21904376f 100644 --- a/src/AIModel/AIBase.hxx +++ b/src/AIModel/AIBase.hxx @@ -29,10 +29,6 @@ SG_USING_STD(string); class FGAIBase { -private: - - static FGAIBase *_self; - public: FGAIBase(); @@ -81,7 +77,10 @@ protected: void Transform(); + static FGAIBase *_self; + private: + static void _setLongitude( double longitude ); static void _setLatitude ( double latitude ); static double _getLongitude(); diff --git a/src/AIModel/AIShip.cxx b/src/AIModel/AIShip.cxx index 650d83583..3f27e35d7 100644 --- a/src/AIModel/AIShip.cxx +++ b/src/AIModel/AIShip.cxx @@ -42,6 +42,9 @@ bool FGAIShip::init() { void FGAIShip::bind() { FGAIBase::bind(); + + props->tie("surface-positions/rudder-pos-norm", + SGRawValuePointer(&rudder)); } void FGAIShip::unbind() { @@ -69,8 +72,8 @@ void FGAIShip::Run(double dt) { double alpha; // get size of a degree at this latitude - ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat() / 57.2958 ); - ft_per_deg_lon = 365228.16 * cos(pos.lat() / 57.2958); + ft_per_deg_lat = 366468.96 - 3717.12 * cos(pos.lat()/SG_RADIANS_TO_DEGREES); + ft_per_deg_lon = 365228.16 * cos(pos.lat() / SG_RADIANS_TO_DEGREES); // adjust speed double speed_diff = tgt_speed - speed; @@ -80,8 +83,10 @@ void FGAIShip::Run(double dt) { } // convert speed to degrees per second - speed_north_deg_sec = cos( hdg / 57.29577951 ) * speed * 1.686 / ft_per_deg_lat; - speed_east_deg_sec = sin( hdg / 57.29577951 ) * speed * 1.686 / ft_per_deg_lon; + speed_north_deg_sec = cos( hdg / SG_RADIANS_TO_DEGREES ) + * speed * 1.686 / ft_per_deg_lat; + speed_east_deg_sec = sin( hdg / SG_RADIANS_TO_DEGREES ) + * speed * 1.686 / ft_per_deg_lon; // set new position pos.setlat( pos.lat() + speed_north_deg_sec * dt); @@ -89,8 +94,9 @@ void FGAIShip::Run(double dt) { // adjust heading based on current rudder angle if (rudder != 0.0) { - turn_radius_ft = 0.088362 * speed * speed / tan( fabs(rudder) / 57.2958 ); - turn_circum_ft = 6.2831853 * turn_radius_ft; + turn_radius_ft = 0.088362 * speed * speed + / tan( fabs(rudder) / SG_RADIANS_TO_DEGREES ); + turn_circum_ft = SGD_2PI * turn_radius_ft; dist_covered_ft = speed * 1.686 * dt; alpha = dist_covered_ft / turn_circum_ft * 360.0; hdg += alpha * sign( rudder );