private:
// Number of milliseconds elapsed since the start of the program.
- long elapsed_time_ms;
+ double sim_time_ms;
// Root of FlightGear data tree
string fg_root;
FGGlobals();
~FGGlobals();
- inline long get_elapsed_time_ms () const { return elapsed_time_ms; }
- inline void set_elapsed_time_ms (long t) { elapsed_time_ms = t; }
+ inline double get_sim_time_ms () const { return sim_time_ms; }
+ inline void inc_sim_time_ms (double dt) { sim_time_ms += dt; }
+ inline void set_sim_time_ms (double t) { sim_time_ms = t; }
inline const string &get_fg_root () const { return fg_root; }
inline void set_fg_root (const string &root) { fg_root = root; }
void
FGLogger::update (int dt)
{
- long elapsed_ms = globals->get_elapsed_time_ms();
+ double sim_time_ms = globals->get_sim_time_ms();
for (unsigned int i = 0; i < _logs.size(); i++) {
- if ((elapsed_ms - _logs[i].last_time_ms) >= _logs[i].interval_ms) {
- _logs[i].last_time_ms = elapsed_ms;
- (*_logs[i].output) << globals->get_elapsed_time_ms();
+ if ((sim_time_ms - _logs[i].last_time_ms) >= _logs[i].interval_ms) {
+ _logs[i].last_time_ms = sim_time_ms;
+ (*_logs[i].output) << globals->get_sim_time_ms();
for (unsigned int j = 0; j < _logs[i].nodes.size(); j++) {
(*_logs[i].output) << _logs[i].delimiter
<< _logs[i].nodes[j]->getStringValue();
FGLogger::Log::Log ()
: output(0),
interval_ms(0),
- last_time_ms(-999999L),
+ last_time_ms(-999999.0),
delimiter(',')
{
}
ssgSimpleState *hud_and_panel;
ssgSimpleState *menus;
-SGTimeStamp start_time_stamp;
+SGTimeStamp last_time_stamp;
SGTimeStamp current_time_stamp;
void fgBuildRenderStates( void ) {
// Update all Visuals (redraws anything graphics related)
void fgRenderFrame( void ) {
- static long old_elapsed_ms = 0;
-
- int dt_ms = int(globals->get_elapsed_time_ms() - old_elapsed_ms);
- old_elapsed_ms = globals->get_elapsed_time_ms();
+ // Update the elapsed time.
+ current_time_stamp.stamp();
+ int dt_ms = (current_time_stamp - last_time_stamp) / 1000L;
+ globals->inc_sim_time_ms( dt_ms );
+ last_time_stamp = current_time_stamp;
// Process/manage pending events
global_events.update( dt_ms );
if ( fgGetBool("/sim/startup/splash-screen") ) {
fgSplashUpdate(0.0);
}
- start_time_stamp.stamp(); // Keep resetting the start time
+ // Keep resetting sim time while the sim is initializing
+ globals->set_sim_time_ms( 0.0 );
} else {
// idle_state is now 1000 meaning we've finished all our
// initializations and are running the main loop, so this will
// now work without seg faulting the system.
- // Update the elapsed time.
- current_time_stamp.stamp();
- globals->set_elapsed_time_ms( (current_time_stamp - start_time_stamp)
- / 1000L );
-
// calculate our current position in cartesian space
scenery.set_center( scenery.get_next_center() );