]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/main.cxx
Added code to put aircraft at the end of the runway closest to the desired
[flightgear.git] / src / Main / main.cxx
index 179b7beb8cf27ff8bb002a99db1e3a52d57d3c83..4cd07e5a668198831b568f3a018719271c2a1b5f 100644 (file)
@@ -480,7 +480,8 @@ void fgRenderFrame( void ) {
        // glMatrixMode( GL_PROJECTION );
        // glLoadIdentity();
        float fov = current_options.get_fov();
-       ssgSetFOV(fov * current_view.get_win_ratio(), fov);
+       // ssgSetFOV(fov * current_view.get_win_ratio(), fov);
+       ssgSetFOV(fov, fov * current_view.get_win_ratio());
 
        double agl = current_aircraft.fdm_state->get_Altitude() * FEET_TO_METER
            - scenery.cur_elev;
@@ -615,7 +616,7 @@ void fgUpdateTimeDepCalcs(int multi_loop, int remainder) {
        multi_loop = 1;
     }
 
-    if ( !current_options.get_pause() ) {
+    if ( !globals->get_freeze() ) {
        // run Autopilot system
        current_autopilot->run();
 
@@ -809,10 +810,10 @@ static void fgMainLoop( void ) {
     }
 
     // update magvar model
-    cur_magvar.update( cur_fdm_state->get_Longitude(),
-                      cur_fdm_state->get_Latitude(),
-                      cur_fdm_state->get_Altitude()* FEET_TO_METER,
-                      globals->get_time_params()->getJD() );
+    globals->get_mag()->update( cur_fdm_state->get_Longitude(),
+                               cur_fdm_state->get_Latitude(),
+                               cur_fdm_state->get_Altitude()* FEET_TO_METER,
+                               globals->get_time_params()->getJD() );
 
     // Get elapsed time (in usec) for this past frame
     elapsed = fgGetTimeInterval();
@@ -878,8 +879,8 @@ static void fgMainLoop( void ) {
 #endif
 
     // see if we need to load any new scenery tiles
-    global_tile_mgr.update( cur_fdm_state->get_Longitude(),
-                           cur_fdm_state->get_Latitude() );
+    global_tile_mgr.update( cur_fdm_state->get_Longitude() * RAD_TO_DEG,
+                           cur_fdm_state->get_Latitude() * RAD_TO_DEG );
 
     // Process/manage pending events
     global_events.Process();
@@ -890,6 +891,8 @@ static void fgMainLoop( void ) {
 
 #   ifdef MICHAEL_JOHNSON_EXPERIMENTAL_ENGINE_AUDIO
 
+       static double kts_to_fts = NM_TO_METER * METER_TO_FEET / 3600.0;
+
        // note: all these factors are relative to the sample.  our
        // sample format should really contain a conversion factor so
        // that we can get prop speed right for arbitrary samples.
@@ -903,17 +906,17 @@ static void fgMainLoop( void ) {
        double pitch = log((controls.get_throttle(0) * 14.0) + 1.0);
        //fprintf(stderr, "pitch1: %f ", pitch);
        // if (controls.get_throttle(0) > 0.0 || 
-       //     cur_fdm_state->v_rel_wind > 40.0) {
+       //     cur_fdm_state->get_V_calibrated_kts() > 40.0) {
 
-       //fprintf(stderr, "rel_wind: %f ", cur_fdm_state->v_rel_wind);
+       //fprintf(stderr, "rel_wind: %f ", cur_fdm_state->get_V_calibrated_kts());
        // only add relative wind and AoA if prop is moving
        // or we're really flying at idle throttle
        if (pitch < 5.4) {  // this needs tuning
            // prop tips not breaking sound barrier
-           pitch += log(cur_fdm_state->v_rel_wind + 0.8)/2;
+           pitch += log(cur_fdm_state->get_V_calibrated_kts() * kts_to_fts + 0.8)/2;
        } else {
            // prop tips breaking sound barrier
-           pitch += log(cur_fdm_state->v_rel_wind + 0.8)/10;
+           pitch += log(cur_fdm_state->get_V_calibrated_kts() * kts_to_fts + 0.8)/10;
        }
        //fprintf(stderr, "pitch2: %f ", pitch);
        //fprintf(stderr, "AoA: %f ", FG_Gamma_vert_rad);
@@ -935,7 +938,7 @@ static void fgMainLoop( void ) {
        // fprintf(stderr, "pitch4: %f\n", pitch);
 
        double volume = controls.get_throttle(0) * 1.15 + 0.3 +
-           log(cur_fdm_state->v_rel_wind + 1.0)/14.0;
+           log(cur_fdm_state->get_V_calibrated_kts() * kts_to_fts + 1.0)/14.0;
        // fprintf(stderr, "volume: %f\n", volume);
 
        pitch_envelope.setStep  ( 0, 0.01, pitch );
@@ -1111,12 +1114,11 @@ static void fgIdleFunction ( void ) {
 // options.cxx needs to see this for toggle_panel()
 // Handle new window size or exposure
 void fgReshape( int width, int height ) {
-    if ( ! current_options.get_panel_status() ) {
-       current_view.set_win_ratio( (GLfloat) width / (GLfloat) height );
+    if ( ! current_options.get_panel_status() || idle_state != 1000 ) {
+       current_view.set_win_ratio( height / width );
        glViewport(0, 0 , (GLint)(width), (GLint)(height) );
     } else {
-       current_view.set_win_ratio( (GLfloat) width / 
-                                   ((GLfloat) (height)*0.4232) );
+       current_view.set_win_ratio( (height*0.4232) / width );
        glViewport(0, (GLint)((height)*0.5768),
                   (GLint)(width), (GLint)((height)*0.4232) );
     }
@@ -1132,7 +1134,8 @@ void fgReshape( int width, int height ) {
 
     // glViewport ( 0, 0, width, height );
     float fov = current_options.get_fov();
-    ssgSetFOV(fov * current_view.get_win_ratio(), fov);
+    // ssgSetFOV(fov * current_view.get_win_ratio(), fov);
+    ssgSetFOV(fov, fov * current_view.get_win_ratio());
 
     fgHUDReshape();
 
@@ -1312,11 +1315,19 @@ int main( int argc, char **argv ) {
     // fonts !!!
     guiInit();
 
+    // set current_options lon/lat if an airport id is specified
+    if ( current_options.get_airport_id().length() ) {
+       // fgSetPosFromAirportID( current_options.get_airport_id() );
+       fgSetPosFromAirportIDandHdg( current_options.get_airport_id(),
+                                    current_options.get_heading() );
+    }
+
     // Initialize time
     FGPath zone( current_options.get_fg_root() );
     zone.append( "Timezone" );
-    SGTime *t = new SGTime( zone.str() );
-    t->init( 0.0, 0.0, zone.str() );
+    SGTime *t = new SGTime( current_options.get_lon() * DEG_TO_RAD,
+                           current_options.get_lat() * DEG_TO_RAD,
+                           zone.str() );
 
     // Handle potential user specified time offsets
     time_t cur_time = t->get_cur_time();
@@ -1421,6 +1432,10 @@ int main( int argc, char **argv ) {
     // thesky->add_cloud_layer( 1800.0, 400.0, 100.0, SG_CLOUD_OVERCAST );
     // thesky->add_cloud_layer( 5000.0, 20.0, 10.0, SG_CLOUD_CIRRUS );
 
+    // Initialize MagVar model
+    SGMagVar *magvar = new SGMagVar();
+    globals->set_mag( magvar );
+
     // Terrain branch
     terrain = new ssgBranch;
     terrain->setName( "Terrain" );