case 1:
{
// replay active
+ double current_time = replay_time->getDoubleValue();
+ if (current_time<0.0)
+ {
+ // initialize start time
+ fgSetDouble( "/sim/replay/start-time", get_start_time() );
+ fgSetDouble( "/sim/replay/end-time", get_end_time() );
+ double duration = fgGetDouble( "/sim/replay/duration" );
+ if( duration && duration < (get_end_time() - get_start_time()) ) {
+ current_time = get_end_time() - duration;
+ } else {
+ current_time = get_start_time();
+ }
+ }
bool IsFinished = replay( replay_time->getDoubleValue() );
if ((IsFinished)&&(replay_looped->getBoolValue()))
- replay_time->setDoubleValue(0.0);
+ current_time = -1;
else
- replay_time->setDoubleValue( replay_time->getDoubleValue()
- + ( dt * fgGetInt("/sim/speed-up") ) );
+ current_time += dt * fgGetInt("/sim/speed-up");
+ replay_time->setDoubleValue(current_time);
}
return; // don't record the replay session
case 2:
fgSetInt( "/sim/freeze/replay-state", 1 );
fgSetBool("/sim/freeze/master", 0 );
fgSetBool("/sim/freeze/clock", 0 );
-
- FGReplay *r = (FGReplay *)(globals->get_subsystem( "replay" ));
-
- fgSetDouble( "/sim/replay/start-time", r->get_start_time() );
- fgSetDouble( "/sim/replay/end-time", r->get_end_time() );
- double duration = fgGetDouble( "/sim/replay/duration" );
- if( duration && duration < (r->get_end_time() - r->get_start_time()) ) {
- fgSetDouble( "/sim/replay/time", r->get_end_time() - duration );
- } else {
- fgSetDouble( "/sim/replay/time", r->get_start_time() );
- }
+ fgSetDouble( "/sim/replay/time", -1 );
// cout << "start = " << r->get_start_time()
// << " end = " << r->get_end_time() << endl;