]> git.mxchange.org Git - flightgear.git/commitdiff
#600, for Curt... ;-) allow speed-up value to use fractions
authorThorstenB <brehmt@gmail.com>
Sat, 17 Nov 2012 19:01:19 +0000 (20:01 +0100)
committerThorstenB <brehmt@gmail.com>
Sat, 17 Nov 2012 19:01:19 +0000 (20:01 +0100)
"speed-up" can now also be used for slow-motion (i.e. 0.5 / 0.25 / ...)
or fractional speeds (3.141...). This was already working for instruments
(for replay) before, now it's also considered by FDM simulation.

src/FDM/LaRCsim/LaRCsim.cxx
src/FDM/flight.cxx
src/FDM/flight.hxx
src/Main/options.cxx
src/Network/native_ctrls.cxx

index 850532f34532e698e28c3bbb84cca0899f846377..60f54a146fe6d4c38a804948586446dabe704595 100644 (file)
@@ -269,10 +269,10 @@ void FGLaRCsim::update( double dt ) {
     }
 
     // copy control positions into the LaRCsim structure
-    Lat_control = globals->get_controls()->get_aileron() / speed_up->getIntValue();
+    Lat_control = globals->get_controls()->get_aileron() / speed_up->getDoubleValue();
     Long_control = globals->get_controls()->get_elevator();
     Long_trim = globals->get_controls()->get_elevator_trim();
-    Rudder_pedal = globals->get_controls()->get_rudder() / speed_up->getIntValue();
+    Rudder_pedal = globals->get_controls()->get_rudder() / speed_up->getDoubleValue();
 
     // IO360.cxx for the C172 thrust is broken (not sure why).  
     // So force C172 to use engine model in c172_engine.c instead of the IO360.cxx.
index 9826d641743a2b387f9f214d744e3eca07c772d1..c65a009a6aaf80a2542fe16aa96eda8406370ce2 100644 (file)
@@ -69,9 +69,11 @@ FGInterface::_calc_multiloop (double dt)
   // roundoff problems when we already have nearly accurate values.
   // Only the speedup thing must be still handled here
   int hz = fgGetInt("/sim/model-hz");
-  int multiloop = SGMiscd::roundToInt(dt*hz);
-  int speedup = fgGetInt("/sim/speed-up");
-  return multiloop * speedup;
+  double speedup = fgGetDouble("/sim/speed-up");
+  double loops = dt * hz * speedup + delta_loops;
+  int iloops = SGMiscd::roundToInt(loops);
+  delta_loops = loops-iloops; // delta_loops required for speed-ups < 1 (to do one iteration every n-th step)
+  return iloops;
 }
 
 
@@ -119,6 +121,7 @@ FGInterface::_setup ()
     climb_rate=0;
     altitude_agl=0;
     track=0;
+    delta_loops = 0.0;
 }
 
 void
index 0cd39520b5d9ba03694450f7f458024855468fb2..bf1bf28bbe59a5f87cfb2aabaaabbc6ce2d69d61 100644 (file)
@@ -191,6 +191,7 @@ private:
     double climb_rate;                // in feet per second
     double altitude_agl;
     double track;
+    double delta_loops;
 
     simgear::TiedPropertyList _tiedProperties;
 
index 4221df758be55285d7bb07edb4ea87b9b00b0876..ae38bdc751412541eadb05694c189f4f30c70ac1 100644 (file)
@@ -190,7 +190,7 @@ fgSetDefaults ()
     fgSetString("/sim/flight-model", "jsb");
     fgSetString("/sim/aero", "c172");
     fgSetInt("/sim/model-hz", NEW_DEFAULT_MODEL_HZ);
-    fgSetInt("/sim/speed-up", 1);
+    fgSetDouble("/sim/speed-up", 1.0);
 
                                // Rendering options
     fgSetString("/sim/rendering/fog", "nicest");
@@ -1392,7 +1392,7 @@ struct OptionDesc {
     {"aircraft-dir",                 true,  OPTION_IGNORE,   "", false, "", 0 },
     {"model-hz",                     true,  OPTION_INT,    "/sim/model-hz", false, "", 0 },
     {"max-fps",                      true,  OPTION_DOUBLE, "/sim/frame-rate-throttle-hz", false, "", 0 },
-    {"speed",                        true,  OPTION_INT,    "/sim/speed-up", false, "", 0 },
+    {"speed",                        true,  OPTION_DOUBLE, "/sim/speed-up", false, "", 0 },
     {"trim",                         false, OPTION_BOOL,   "/sim/presets/trim", true, "", 0 },
     {"notrim",                       false, OPTION_BOOL,   "/sim/presets/trim", false, "", 0 },
     {"on-ground",                    false, OPTION_BOOL,   "/sim/presets/onground", true, "", 0 },
index f468b9449ec8caf5c76adb52d80deca2b7b50d93..19a1a482dd920193ba08fc339d2aff94e4d0f6e2 100644 (file)
@@ -452,7 +452,7 @@ void FGNetCtrls2Props( FGNetCtrls *net, bool honor_freezes,
     node->setDoubleValue( "nav/frequencies/selected-mhz[0]", net->nav_1 );
     node->setDoubleValue( "nav[1]/frequencies/selected-mhz[0]", net->nav_2 );
 
-    fgSetInt( "/sim/speed-up", net->speedup );
+    fgSetDouble( "/sim/speed-up", net->speedup );
 
     if ( honor_freezes ) {
         node = fgGetNode( "/sim/freeze", true );