]> git.mxchange.org Git - flightgear.git/blobdiff - Main/GLUTmain.cxx
Tweaked FDM interface.
[flightgear.git] / Main / GLUTmain.cxx
index 261df03cb09faeca348ccf2e7f506d3d641c9fd9..c4558cb259ec4552fd6b77515fce186a58b5f002 100644 (file)
@@ -42,7 +42,9 @@
 #   include <stdlib.h>
 #endif
 
-#include <sys/stat.h> /* for stat() */
+#ifdef HAVE_SYS_STAT_H
+#  include <sys/stat.h> /* for stat() */
+#endif
 
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>    /* for stat() */
@@ -367,7 +369,7 @@ static void fgRenderFrame( void ) {
 
 
 // Update internal time dependent calculations (i.e. flight model)
-void fgUpdateTimeDepCalcs(int multi_loop) {
+void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
     FGState *f = current_aircraft.fdm_state;
     fgLIGHT *l = &cur_light_params;
     fgTIME *t = &cur_time_params;
@@ -384,11 +386,11 @@ void fgUpdateTimeDepCalcs(int multi_loop) {
        fgAPRun();
 
        // printf("updating flight model x %d\n", multi_loop);
-       fgFlightModelUpdate( current_options.get_flight_model(), 
-                            cur_fdm_state, multi_loop );
+       fgFDMUpdate( current_options.get_flight_model(), 
+                            cur_fdm_state, multi_loop, remainder );
     } else {
-       fgFlightModelUpdate( current_options.get_flight_model(), 
-                            cur_fdm_state, 0 );
+       fgFDMUpdate( current_options.get_flight_model(), 
+                            cur_fdm_state, 0, remainder );
     }
 
     // update the view angle
@@ -437,10 +439,9 @@ void fgUpdateTimeDepCalcs(int multi_loop) {
 void fgInitTimeDepCalcs( void ) {
     // initialize timer
 
-#ifdef HAVE_SETITIMER
-    fgTimerInit( 1.0 / DEFAULT_TIMER_HZ, fgUpdateTimeDepCalcs );
-#endif HAVE_SETITIMER
-
+    // #ifdef HAVE_SETITIMER
+    //   fgTimerInit( 1.0 / DEFAULT_TIMER_HZ, fgUpdateTimeDepCalcs );
+    // #endif HAVE_SETITIMER
 }
 
 static const double alt_adjust_ft = 3.758099;
@@ -451,8 +452,8 @@ static const double alt_adjust_m = alt_adjust_ft * FEET_TO_METER;
 static void fgMainLoop( void ) {
     FGState *f;
     fgTIME *t;
-    static int remainder = 0;
-    int elapsed, multi_loop;
+    static long remainder = 0;
+    long elapsed, multi_loop;
     // int i;
     // double accum;
     static time_t last_time = 0;
@@ -491,15 +492,15 @@ static void fgMainLoop( void ) {
                   f->get_Altitude() * FEET_TO_METER,
                   scenery.cur_elev + alt_adjust_m - 3.0,
                   scenery.cur_elev + alt_adjust_m );
-           fgFlightModelSetAltitude( current_options.get_flight_model(), 
-                                     cur_fdm_state, 
-                                     scenery.cur_elev + alt_adjust_m );
+           fgFDMForceAltitude( current_options.get_flight_model(), 
+                               scenery.cur_elev + alt_adjust_m );
 
            FG_LOG( FG_ALL, FG_DEBUG, 
                    "<*> resetting altitude to " 
                    << f->get_Altitude() * FEET_TO_METER << " meters" );
        }
-       f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
+       fgFDMSetGroundElevation( current_options.get_flight_model(),
+                                scenery.cur_elev );  // meters
     }
 
     /* printf("Adjustment - ground = %.2f  runway = %.2f  alt = %.2f\n",
@@ -510,15 +511,17 @@ static void fgMainLoop( void ) {
     // update "time"
     fgTimeUpdate(f, t);
 
-    // Get elapsed time for this past frame
+    // Get elapsed time (in usec) for this past frame
     elapsed = fgGetTimeInterval();
-    FG_LOG( FG_ALL, FG_BULK
-           "Time interval is = " << elapsed 
+    FG_LOG( FG_ALL, FG_DEBUG
+           "Elapsed time interval is = " << elapsed 
            << ", previous remainder is = " << remainder );
 
     // Calculate frame rate average
     if ( (t->cur_time != last_time) && (last_time > 0) ) {
        general.set_frame_rate( frames );
+       FG_LOG( FG_ALL, FG_DEBUG, 
+               "--> Frame rate is = " << general.get_frame_rate() );
        frames = 0;
     }
     last_time = t->cur_time;
@@ -543,19 +546,17 @@ static void fgMainLoop( void ) {
     // Run flight model
     if ( ! use_signals ) {
        // Calculate model iterations needed for next frame
-       FG_LOG( FG_ALL, FG_DEBUG, 
-               "--> Frame rate is = " << general.get_frame_rate() );
        elapsed += remainder;
 
-       multi_loop = (int)(((float)elapsed * 0.001) * DEFAULT_MODEL_HZ);
-       remainder = elapsed - ((multi_loop*1000) / DEFAULT_MODEL_HZ);
-       FG_LOG( FG_ALL, FG_BULK
+       multi_loop = (int)(((double)elapsed * 0.000001) * DEFAULT_MODEL_HZ);
+       remainder = elapsed - ((multi_loop*1000000) / DEFAULT_MODEL_HZ);
+       FG_LOG( FG_ALL, FG_DEBUG
                "Model iterations needed = " << multi_loop
                << ", new remainder = " << remainder );
        
        // flight model
        if ( multi_loop > 0 ) {
-           fgUpdateTimeDepCalcs(multi_loop);
+           fgUpdateTimeDepCalcs(multi_loop, remainder);
        } else {
            FG_LOG( FG_ALL, FG_INFO, "Elapsed time is zero ... we're zinging" );
        }
@@ -1002,6 +1003,19 @@ int main( int argc, char **argv ) {
 
 
 // $Log$
+// Revision 1.82  1999/01/20 13:42:24  curt
+// Tweaked FDM interface.
+// Testing check sum support for NMEA serial output.
+//
+// Revision 1.81  1999/01/19 20:57:03  curt
+// MacOS portability changes contributed by "Robert Puyol" <puyol@abvent.fr>
+//
+// Revision 1.80  1999/01/09 13:37:40  curt
+// Convert fgTIMESTAMP to FGTimeStamp which holds usec instead of ms.
+//
+// Revision 1.79  1999/01/08 03:23:56  curt
+// Beginning work on compensating for sim time vs. real world time "jitter".
+//
 // Revision 1.78  1999/01/07 20:25:08  curt
 // Updated struct fgGENERAL to class FGGeneral.
 //