1
0
Fork 0

TimeManager: handle reposition better

Extend the timeManager unit-tests to check for some movements, all
seems to work correctly now.
This commit is contained in:
James Turner 2021-03-12 14:45:25 +00:00
parent 9704c1cc93
commit 4eecd088e8
4 changed files with 29 additions and 4 deletions

View file

@ -1241,9 +1241,11 @@ void fgStartReposition()
globals->get_subsystem("xml-autopilot")->reinit(); globals->get_subsystem("xml-autopilot")->reinit();
// need to update the timezone // need to update the timezone
SGTime *t = globals->get_time_params(); auto timeManager = globals->get_subsystem<TimeManager>();
t->updateLocal(globals->get_aircraft_position(), globals->get_fg_root() / "Timezone"); if (timeManager) {
timeManager->reposition();
}
// setup state to end re-init // setup state to end re-init
fgSetBool("/sim/signals/reinit", false); fgSetBool("/sim/signals/reinit", false);
if ( !freeze ) { if ( !freeze ) {

View file

@ -404,6 +404,12 @@ void TimeManager::throttleUpdateRate()
_frameWait->setDoubleValue(frameWaitStart.elapsedMSec()); _frameWait->setDoubleValue(frameWaitStart.elapsedMSec());
} }
void TimeManager::reposition()
{
// force a zone check, next update()
_lastTimeZoneCheckPosition = SGVec3d::zeros();
}
// periodic time updater wrapper // periodic time updater wrapper
void TimeManager::updateLocalTime() void TimeManager::updateLocalTime()
{ {

View file

@ -43,6 +43,8 @@ public:
void unbind() override; void unbind() override;
void update(double dt) override; void update(double dt) override;
void reposition();
// Subsystem identification. // Subsystem identification.
static const char* staticSubsystemClassId() { return "time"; } static const char* staticSubsystemClassId() { return "time"; }

View file

@ -143,7 +143,7 @@ void TimeManagerTests::testTimeZones()
timeManager->update(0.0); timeManager->update(0.0);
CPPUNIT_ASSERT_EQUAL((time_t) 18000, globals->get_time_params()->get_local_offset()); CPPUNIT_ASSERT_EQUAL((time_t)19800, globals->get_time_params()->get_local_offset());
auto gmt = globals->get_time_params()->getGmt(); auto gmt = globals->get_time_params()->getGmt();
CPPUNIT_ASSERT_EQUAL(79, gmt->tm_year); CPPUNIT_ASSERT_EQUAL(79, gmt->tm_year);
@ -152,6 +152,21 @@ void TimeManagerTests::testTimeZones()
// relocate to somewhere, check the time values update // relocate to somewhere, check the time values update
auto eddf = FGAirport::getByIdent("EDDF");
FGTestApi::setPositionAndStabilise(eddf->geod());
timeManager->reposition();
timeManager->update(0.0);
CPPUNIT_ASSERT_EQUAL((time_t)3600, globals->get_time_params()->get_local_offset());
auto zbaa = FGAirport::getByIdent("ZBAA");
FGTestApi::setPositionAndStabilise(zbaa->geod());
timeManager->reposition();
timeManager->update(0.0);
CPPUNIT_ASSERT_EQUAL((time_t)28800, globals->get_time_params()->get_local_offset());
} }
void TimeManagerTests::testSpecifyTimeOffset() void TimeManagerTests::testSpecifyTimeOffset()