]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/YASim.cxx
simplify name/number handling
[flightgear.git] / src / FDM / YASim / YASim.cxx
index cd5e0dd6b464b56fa36aee572399726623bcffb9..27fcbff6d64672baa49f822b3daa06ef74b7f9d6 100644 (file)
@@ -1,4 +1,8 @@
 
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include <simgear/debug/logstream.hxx>
 #include <simgear/math/sg_geodesy.hxx>
 #include <simgear/misc/sg_path.hxx>
@@ -24,8 +28,6 @@
 
 #include "YASim.hxx"
 
-#include <fenv.h> // SIGFPE DEBUG
-
 using namespace yasim;
 
 static const float YASIM_PI = 3.14159265358979323846;
@@ -93,10 +95,11 @@ void YASim::bind()
 
     char buf[256];
     for(int i=0; i<_fdm->getAirplane()->getModel()->numThrusters(); i++) {
-       sprintf(buf, "/engines/engine[%d]/fuel-flow-gph", i); fgUntie(buf);
-       sprintf(buf, "/engines/engine[%d]/rpm", i);           fgUntie(buf);
-       sprintf(buf, "/engines/engine[%d]/mp-osi", i);        fgUntie(buf);
-       sprintf(buf, "/engines/engine[%d]/egt-degf", i);      fgUntie(buf);
+       sprintf(buf, "/engines/engine[%d]/fuel-flow-gph", i);        fgUntie(buf);
+       sprintf(buf, "/engines/engine[%d]/rpm", i);                  fgUntie(buf);
+       sprintf(buf, "/engines/engine[%d]/mp-osi", i);               fgUntie(buf);
+       sprintf(buf, "/engines/engine[%d]/egt-degf", i);             fgUntie(buf);
+       sprintf(buf, "/engines/engine[%d]/oil-temperature-degf", i); fgUntie(buf);
     }
 }
 
@@ -144,9 +147,9 @@ void YASim::init()
        SGPropertyNode * node = fgGetNode("gear/gear", i, true);
         float pos[3];
         g->getPosition(pos);
-       node->setDoubleValue("xoffset-in", pos[0]);
-       node->setDoubleValue("yoffset-in", pos[1]);
-       node->setDoubleValue("zoffset-in", pos[2]);
+       node->setDoubleValue("xoffset-in", pos[0] * M2FT * 12);
+       node->setDoubleValue("yoffset-in", pos[1] * M2FT * 12);
+       node->setDoubleValue("zoffset-in", pos[2] * M2FT * 12);
     }
 
     // Are we at ground level?  If so, lift the plane up so the gear
@@ -194,13 +197,13 @@ void YASim::update(double dt)
     // ground.  Calculate a cartesian coordinate for the ground under
     // us, find the (geodetic) up vector normal to the ground, then
     // use that to find the final (radius) term of the plane equation.
-    float v[3] = { get_uBody()*FT2M, get_vBody()*FT2M, get_wBody()*FT2M };
+    float v[3] = { get_uBody(), get_vBody(), get_wBody() };
     float lat = get_Latitude(); float lon = get_Longitude();
-    double xyz[3];
-    sgGeodToCart(lat, lon, 0.0, xyz);
+    float alt = get_Altitude() * FT2M; double xyz[3];
+    sgGeodToCart(lat, lon, alt, xyz);
     // build the environment cache.
     float vr = _fdm->getVehicleRadius();
-    vr += 2.0*dt*Math::mag3(v);
+    vr += 2.0*FT2M*dt*Math::mag3(v);
     prepare_ground_cache_m( 0.0, xyz, vr );
 
     // Track time increments.
@@ -209,7 +212,7 @@ void YASim::update(double dt)
 
     int i;
     for(i=0; i<iterations; i++) {
-        gr->setTimeOffset(iterations*_dt);
+        gr->setTimeOffset(i*_dt);
         copyToYASim(false);
         _fdm->iterate(_dt);
         copyFromYASim();
@@ -222,8 +225,8 @@ void YASim::update(double dt)
 void YASim::copyToYASim(bool copyState)
 {
     // Physical state
-    float lat = get_Latitude();
-    float lon = get_Longitude();
+    double lat = get_Latitude();
+    double lon = get_Longitude();
     float alt = get_Altitude() * FT2M;
     float roll = get_Phi();
     float pitch = get_Theta();
@@ -368,12 +371,17 @@ void YASim::copyFromYASim()
     double lat, lon, alt;
     sgCartToGeod(s->pos, &lat, &lon, &alt);
     _set_Geodetic_Position(lat, lon, alt*M2FT);
+    double groundlevel_m = get_groundlevel_m(lat, lon, alt);
+    _set_Runway_altitude(groundlevel_m*SG_METER_TO_FEET);
+    _set_Altitude_AGL((alt-groundlevel_m)*SG_METER_TO_FEET);
+
+    // the smallest agl of all gears
+    fgSetFloat("/position/gear-agl-m", model->getAGL());
+    fgSetFloat("/position/gear-agl-ft", model->getAGL()*M2FT);
 
     // UNUSED
     //_set_Geocentric_Position(Glue::geod2geocLat(lat), lon, alt*M2FT);
 
-    _set_Altitude_AGL(model->getAGL() * M2FT);
-
     // useful conversion matrix
     float xyz2ned[9];
     Glue::xyz2nedMat(lat, lon, xyz2ned);
@@ -433,7 +441,7 @@ void YASim::copyFromYASim()
 
     // orientation
     float alpha, beta;
-    Glue::calcAlphaBeta(s, &alpha, &beta);
+    Glue::calcAlphaBeta(s, wind, &alpha, &beta);
     _set_Alpha(alpha);
     _set_Beta(beta);
 
@@ -461,6 +469,7 @@ void YASim::copyFromYASim()
        node->setBoolValue("has-brake", g->getBrake() != 0);
        node->setBoolValue("wow", g->getCompressFraction() != 0);
        node->setFloatValue("compression-norm", g->getCompressFraction());
+       node->setFloatValue("compression-m", g->getCompressDist());
         node->setFloatValue("caster-angle-deg", g->getCasterAngle() * RAD2DEG);
         node->setFloatValue("rollspeed-ms", g->getRollSpeed());
     }
@@ -475,5 +484,9 @@ void YASim::copyFromYASim()
     if(l) {
        SGPropertyNode * node = fgGetNode("gear/launchbar", 0, true);
        node->setFloatValue("position-norm", l->getCompressFraction());
+        node->setFloatValue("holdback-position-norm", l->getHoldbackCompressFraction());
+        node->setStringValue("state", l->getState());
+        node->setBoolValue("strop", l->getStrop());
     }
+
 }