= 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) );
"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 = "
#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 ) {
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 ) {
}
}
- if ( best_time > day_secs / 2 ) {
- best_time -= day_secs;
- }
-
return best_time - 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 ) {
}
}
- if ( best_time > day_secs / 2 ) {
- best_time -= day_secs;
- }
-
return best_time - 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 );
last_angle = angle;
}
- if ( best_time > day_secs / 2 ) {
- best_time -= day_secs;
- }
-
return best_time - 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 );
last_angle = angle;
}
- if ( best_time > day_secs / 2 ) {
- best_time -= day_secs;
- }
-
return best_time - cur_time;
}