return;
int Offset = 0;
- double ratio;
+ double ratio = 1.0;
if (pLastBuffer)
{
double NextSimTime = _pNextBuffer->sim_time;
double LastSimTime = _pLastBuffer->sim_time;
- ratio = (SimTime - LastSimTime) / (NextSimTime - LastSimTime);
- }
- else
- {
- ratio = 1.0;
+ double Numerator = SimTime - LastSimTime;
+ double dt = NextSimTime - LastSimTime;
+ // avoid divide by zero and other quirks
+ if ((Numerator > 0.0)&&(dt != 0.0))
+ {
+ ratio = Numerator / dt;
+ if (ratio > 1.0)
+ ratio = 1.0;
+ }
}
Offset += sizeof(double);
// 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);
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