From: ThorstenB Date: Sat, 7 Apr 2012 14:19:09 +0000 (+0200) Subject: Fix scenery reload issues. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=9effb060470785b770a68088453d833766f52c80;p=flightgear.git Fix scenery reload issues. Aircraft could fall through the ground on scenery reload. Properly reset the "sceneryloaded" flag to pause FDM processing while scenery is being reloaded. Also stop processing some instruments while scenery is reloaded. --- diff --git a/src/Instrumentation/agradar.cxx b/src/Instrumentation/agradar.cxx index 772fd682a..b5cd064f2 100644 --- a/src/Instrumentation/agradar.cxx +++ b/src/Instrumentation/agradar.cxx @@ -102,13 +102,8 @@ agRadar::init () void agRadar::update (double delta_time_sec) { - if ( ! _sim_init_done ) { - - if ( ! fgGetBool("sim/sceneryloaded", false) ) - return; - - _sim_init_done = true; - } + if (!_sceneryLoaded->getBoolValue()) + return; if ( !_odg || ! _serviceable_node->getBoolValue() ) { _Instrument->setStringValue("status",""); @@ -122,7 +117,6 @@ agRadar::update (double delta_time_sec) _time = 0.0; - update_terrain(); // wxRadarBg::update(delta_time_sec); } diff --git a/src/Instrumentation/rad_alt.cxx b/src/Instrumentation/rad_alt.cxx index e26c24763..7fe4c644b 100644 --- a/src/Instrumentation/rad_alt.cxx +++ b/src/Instrumentation/rad_alt.cxx @@ -97,13 +97,8 @@ radAlt::init () void radAlt::update (double delta_time_sec) { - if ( ! _sim_init_done ) { - - if ( ! fgGetBool("sim/sceneryloaded", false) ) - return; - - _sim_init_done = true; - } + if (!_sceneryLoaded->getBoolValue()) + return; if ( !_odg || ! _serviceable_node->getBoolValue() ) { _Instrument->setStringValue("status",""); @@ -111,16 +106,14 @@ radAlt::update (double delta_time_sec) } _time += delta_time_sec; - if (_time < _interval) return; _time = 0.0; + update_altitude(); } - - double radAlt::getDistanceAntennaToHit(SGVec3d nearestHit) const { diff --git a/src/Instrumentation/wxradar.cxx b/src/Instrumentation/wxradar.cxx index 885754ea2..81e35c812 100644 --- a/src/Instrumentation/wxradar.cxx +++ b/src/Instrumentation/wxradar.cxx @@ -77,7 +77,6 @@ wxRadarBg::wxRadarBg(SGPropertyNode *node) : _interval(node->getDoubleValue("update-interval-sec", 1.0)), _elapsed_time(0), _persistance(0), - _sim_init_done(false), _odg(0), _range_nm(0), _scale(0), @@ -127,6 +126,7 @@ void wxRadarBg::init () { _serviceable_node = _Instrument->getNode("serviceable", true); + _sceneryLoaded = fgGetNode("/sim/sceneryloaded", true); // texture name to use in 2D and 3D instruments _texture_path = _Instrument->getStringValue("radar-texture-path", @@ -287,22 +287,17 @@ osg::Matrixf wxRotate(float angle) void wxRadarBg::update (double delta_time_sec) { - if (!_sim_init_done) { - if (!fgGetBool("sim/sceneryloaded", false)) - return; + if (!_sceneryLoaded->getBoolValue()) + return; - _sim_init_done = true; - } if (!_odg || !_serviceable_node->getBoolValue()) { _Instrument->setStringValue("status", ""); return; } + _time += delta_time_sec; - if (_time < _interval){ -// cout << "WXradar update too soon " << _time << endl; + if (_time < _interval) return; - } -// cout << "WXradar updating" << _time<< endl; _time = 0.0; diff --git a/src/Instrumentation/wxradar.hxx b/src/Instrumentation/wxradar.hxx index 639302bdc..9caa58673 100644 --- a/src/Instrumentation/wxradar.hxx +++ b/src/Instrumentation/wxradar.hxx @@ -57,9 +57,9 @@ protected: double _interval; double _elapsed_time; double _persistance; - bool _sim_init_done; SGPropertyNode_ptr _serviceable_node; + SGPropertyNode_ptr _sceneryLoaded; SGPropertyNode_ptr _Instrument; SGPropertyNode_ptr _radar_mode_control_node; diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx index a4848d38f..6a200c846 100644 --- a/src/Main/renderer.cxx +++ b/src/Main/renderer.cxx @@ -1612,8 +1612,8 @@ FGRenderer::update( ) { if (_splash_alpha->getDoubleValue()>0.0) { // Fade out the splash screen - const double fade_time = 0.8; - const double fade_steps_per_sec = 20; + const double fade_time = 0.5; + const double fade_steps_per_sec = 10; double delay_time = SGMiscd::min(fade_time/fade_steps_per_sec, (SGTimeStamp::now() - _splash_time).toSecs()); _splash_time = SGTimeStamp::now(); diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx index a74618420..876826d5f 100644 --- a/src/Scenery/tilemgr.cxx +++ b/src/Scenery/tilemgr.cxx @@ -101,6 +101,11 @@ void FGTileMgr::refresh_tile(void* tileMgr, long tileIndex) void FGTileMgr::reinit() { + // reset flag, stop FDM processing, otherwise aircraft fall through + // the ground while reloading scenery + fgSetBool("/sim/sceneryloaded",false); + fgSetDouble("/sim/startup/splash-alpha", 1.0); + // remove all old scenery nodes from scenegraph and clear cache osg::Group* group = globals->get_scenery()->get_terrain_branch(); group->removeChildren(0, group->getNumChildren());