]> git.mxchange.org Git - flightgear.git/commitdiff
Tidy up the code a bit more, move /ai/model[] to /ai/models/model[] and make sure...
authorehofman <ehofman>
Mon, 22 Dec 2003 10:24:15 +0000 (10:24 +0000)
committerehofman <ehofman>
Mon, 22 Dec 2003 10:24:15 +0000 (10:24 +0000)
src/AIModel/AIAircraft.cxx
src/AIModel/AIBallistic.cxx
src/AIModel/AIBase.cxx
src/AIModel/AIBase.hxx
src/AIModel/AIShip.cxx

index f19c054fab1529cd7017962052bfbc8c4cd21a00..27952de2e3ea429d8cc4532b7d3c69d9e67ea566 100644 (file)
@@ -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;
      }
    }
 
index 750096af4e71288ff6520135ba1420393d705201..6a0866856a7fcfaa1d8bb801e4125cef13403a56 100644 (file)
@@ -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);
index 9271deef4db5ad6ffb97d29c52855eaa7dea5053..baa5cc52f6c5f6298ac7f1b41ead2aafab699d87 100644 (file)
@@ -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<SGPropertyNode_ptr> 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,
index 0ea71d12bd089c4e081234cddad511ed6005dd9e..21904376f8ed168b567b04ce89d1893f95dc63a8 100644 (file)
@@ -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();
index 650d835832158c84c0a4875d0e9dcb7cd16afc9d..3f27e35d7a0a42aa5319889670c3fc000f384d04 100644 (file)
@@ -42,6 +42,9 @@ bool FGAIShip::init() {
 
 void FGAIShip::bind() {
     FGAIBase::bind();
+
+    props->tie("surface-positions/rudder-pos-norm",
+                SGRawValuePointer<double>(&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 );