# include "config.h"
#endif
+#include <cstdio>
#include <float.h>
#include <simgear/constants.h>
}
// clear messages belonging to old replay session
- fgGetNode("/sim/replay/messages", 0, true)->removeChildren("msg", false);
+ fgGetNode("/sim/replay/messages", 0, true)->removeChildren("msg");
}
/**
// flight recording
- sim_time += dt * speed_up->getDoubleValue();
-
// sanity check, don't collect data if FDM data isn't good
- if (!fgGetBool("/sim/fdm-initialized", false)) {
+ if ((!fgGetBool("/sim/fdm-initialized", false))||(dt==0.0))
return;
+
+ {
+ double new_sim_time = sim_time + dt * speed_up->getDoubleValue();
+ // don't record multiple records with the same timestamp (or go backwards in time)
+ if (new_sim_time <= sim_time)
+ {
+ SG_LOG(SG_SYSTEMS, SG_ALERT, "ReplaySystem: Time warp detected!");
+ return;
+ }
+ sim_time = new_sim_time;
}
FGReplayData* r = record(sim_time);
{
FGReplayData* r = NULL;
- if (recycler.size())
+ if (! recycler.empty())
{
r = recycler.front();
recycler.pop_front();
FGReplay::interpolate( double time, const replay_list_type &list)
{
// sanity checking
- if ( list.size() == 0 )
+ if ( list.empty() )
{
// handle empty list
return;
replayMessage(time);
- if ( short_term.size() > 0 ) {
+ if ( ! short_term.empty() ) {
t1 = short_term.back()->sim_time;
t2 = short_term.front()->sim_time;
if ( time > t1 ) {
return true;
} else if ( time <= t1 && time >= t2 ) {
interpolate( time, short_term );
- } else if ( medium_term.size() > 0 ) {
+ } else if ( ! medium_term.empty() ) {
t1 = short_term.front()->sim_time;
t2 = medium_term.back()->sim_time;
if ( time <= t1 && time >= t2 )
t2 = medium_term.front()->sim_time;
if ( time <= t1 && time >= t2 ) {
interpolate( time, medium_term );
- } else if ( long_term.size() > 0 ) {
+ } else if ( ! long_term.empty() ) {
t1 = medium_term.front()->sim_time;
t2 = long_term.back()->sim_time;
if ( time <= t1 && time >= t2 )
double
FGReplay::get_start_time()
{
- if ( long_term.size() > 0 )
+ if ( ! long_term.empty() )
{
return long_term.front()->sim_time;
- } else if ( medium_term.size() > 0 )
+ } else if ( ! medium_term.empty() )
{
return medium_term.front()->sim_time;
- } else if ( short_term.size() )
+ } else if ( ! short_term.empty() )
{
return short_term.front()->sim_time;
} else
double
FGReplay::get_end_time()
{
- if ( short_term.size() )
+ if ( ! short_term.empty() )
{
return short_term.back()->sim_time;
} else
meta->setStringValue("closest-airport-id", fgGetString("/sim/airport/closest-airport-id", ""));
const char* aircraft_version = fgGetString("/sim/aircraft-version", "");
if (aircraft_version[0]==0)
- aircraft_version = "(unknown aircraft version)";
+ aircraft_version = "(undefined)";
meta->setStringValue("aircraft-version", aircraft_version);
// add information on the tape's recording duration
struct tm *local_tm;
local_tm = localtime( &calendar_time );
char time_str[256];
- strftime( time_str, 256, "%Y%02m%02d-%02H%02M%02S", local_tm);
+ strftime( time_str, 256, "%Y%m%d-%H%M%S", local_tm);
p.concat(time_str);
p.concat(".fgtape");
simgear::PathList list = dir.children(simgear::Dir::TYPE_FILE, ".fgtape");
SGPropertyNode* TapeList = fgGetNode("/sim/replay/tape-list", true);
- TapeList->removeChildren("tape", false);
+ TapeList->removeChildren("tape");
int Index = 0;
size_t l = aircraftType.size();
for (simgear::PathList::iterator it = list.begin(); it!=list.end(); ++it)