]> git.mxchange.org Git - flightgear.git/commitdiff
Fix a few potential gotcha's in setting up start time.
authorcurt <curt>
Tue, 16 Sep 2003 22:34:22 +0000 (22:34 +0000)
committercurt <curt>
Tue, 16 Sep 2003 22:34:22 +0000 (22:34 +0000)
src/Main/fg_init.cxx
src/Time/sunsolver.cxx

index 08a20044fec4f246e2c65a5e2e23e5c7cba726bf..43e620e2d6440d646ebffb4f8fce388f821ff272 100644 (file)
@@ -1276,6 +1276,7 @@ void fgInitTimeOffset() {
         = fgGetNode("/sim/time/cur-time-override", true);
 
     // Handle potential user specified time offsets
+    int orig_warp = globals->get_warp();
     SGTime *t = globals->get_time_params();
     time_t cur_time = t->get_cur_time();
     time_t currGMT = sgTimeGetGMT( gmtime(&cur_time) );
@@ -1328,8 +1329,10 @@ void fgInitTimeOffset() {
                 "FG_TIME::Unsupported offset type " << offset_type );
         exit( -1 );
     }
-    globals->set_warp( warp );
-    t->update( 0.0, 0.0, cur_time_override->getLongValue(),
+    globals->set_warp( orig_warp + warp );
+    t->update( longitude->getDoubleValue() * SGD_DEGREES_TO_RADIANS,
+               latitude->getDoubleValue() * SGD_DEGREES_TO_RADIANS,
+               cur_time_override->getLongValue(),
                globals->get_warp() );
 
     SG_LOG( SG_GENERAL, SG_INFO, "After fgInitTimeOffset(): warp = " 
index c04e366dd2a70286c741df704033301f5f898ad8..c4e48c43403e21fe376b737f3ff2ed3c5958f56c 100644 (file)
@@ -35,7 +35,9 @@
 #include "sunsolver.hxx"
 
 
-const time_t day_secs = 86400;
+static const time_t day_secs = 86400;
+static const time_t half_day_secs = day_secs / 2;
+static const time_t step_secs = 60;
 
 static double sun_angle( const SGTime &t, sgVec3 world_up,
                          double lon_rad, double lat_rad ) {
@@ -96,7 +98,10 @@ time_t fgTimeSecondsUntilNoon( time_t cur_time,
     double best_angle = 180.0;
     time_t best_time = cur_time;
 
-    for ( time_t secs = cur_time; secs < cur_time + day_secs; secs += 300 ) {
+    for ( time_t secs = cur_time - half_day_secs;
+          secs < cur_time + half_day_secs;
+          secs += step_secs )
+    {
         t.update( lon_rad, lat_rad, secs, 0 );
         double angle = sun_angle( t, world_up, lon_rad, lat_rad );
         if ( angle < best_angle ) {
@@ -107,10 +112,6 @@ time_t fgTimeSecondsUntilNoon( time_t cur_time,
         }
     }
 
-    if ( best_time > day_secs / 2 ) {
-        best_time -= day_secs;
-    }
-
     return best_time - cur_time;
 }
 
@@ -133,7 +134,10 @@ time_t fgTimeSecondsUntilMidnight( time_t cur_time,
     double best_angle = 0.0;
     time_t best_time = cur_time;
 
-    for ( time_t secs = cur_time; secs < cur_time + day_secs; secs += 300 ) {
+    for ( time_t secs = cur_time - half_day_secs;
+          secs < cur_time + half_day_secs;
+          secs += step_secs )
+    {
         t.update( lon_rad, lat_rad, secs, 0 );
         double angle = sun_angle( t, world_up, lon_rad, lat_rad );
         if ( angle > best_angle ) {
@@ -144,10 +148,6 @@ time_t fgTimeSecondsUntilMidnight( time_t cur_time,
         }
     }
 
-    if ( best_time > day_secs / 2 ) {
-        best_time -= day_secs;
-    }
-
     return best_time - cur_time;
 }
 
@@ -171,7 +171,10 @@ time_t fgTimeSecondsUntilDusk( time_t cur_time,
     double last_angle = -99999.0;
     time_t best_time = cur_time;
 
-    for ( time_t secs = cur_time; secs < cur_time + day_secs; secs += 300 ) {
+    for ( time_t secs = cur_time - half_day_secs;
+          secs < cur_time + half_day_secs;
+          secs += step_secs )
+    {
         t.update( lon_rad, lat_rad, secs, 0 );
         double angle = sun_angle( t, world_up, lon_rad, lat_rad );
         double diff = fabs( angle - 90.0 );
@@ -187,10 +190,6 @@ time_t fgTimeSecondsUntilDusk( time_t cur_time,
         last_angle = angle;
     }
 
-    if ( best_time > day_secs / 2 ) {
-        best_time -= day_secs;
-    }
-
     return best_time - cur_time;
 }
 
@@ -214,7 +213,10 @@ time_t fgTimeSecondsUntilDawn( time_t cur_time,
     double last_angle = -99999.0;
     time_t best_time = cur_time;
 
-    for ( time_t secs = cur_time; secs < cur_time + day_secs; secs += 300 ) {
+    for ( time_t secs = cur_time - half_day_secs;
+          secs < cur_time + half_day_secs;
+          secs += step_secs )
+    {
         t.update( lon_rad, lat_rad, secs, 0 );
         double angle = sun_angle( t, world_up, lon_rad, lat_rad );
         double diff = fabs( angle - 90.0 );
@@ -230,9 +232,5 @@ time_t fgTimeSecondsUntilDawn( time_t cur_time,
         last_angle = angle;
     }
 
-    if ( best_time > day_secs / 2 ) {
-        best_time -= day_secs;
-    }
-
     return best_time - cur_time;
 }