]> git.mxchange.org Git - flightgear.git/commitdiff
Fix scenery reload issues.
authorThorstenB <brehmt@gmail.com>
Sat, 7 Apr 2012 14:19:09 +0000 (16:19 +0200)
committerThorstenB <brehmt@gmail.com>
Sat, 7 Apr 2012 14:20:22 +0000 (16:20 +0200)
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.

src/Instrumentation/agradar.cxx
src/Instrumentation/rad_alt.cxx
src/Instrumentation/wxradar.cxx
src/Instrumentation/wxradar.hxx
src/Main/renderer.cxx
src/Scenery/tilemgr.cxx

index 772fd682a674bdcd3ad1069dffe4623fffd169ba..b5cd064f2a291c62c93151ec88b3cc3912f4333c 100644 (file)
@@ -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);
 }
index e26c24763415342e037cf21ca8ed225be71719ee..7fe4c644be694485f723dc641d834a09566ec700 100644 (file)
@@ -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 
 {
index 885754ea22d9db1575059ce68bbb1d62fcb2f46a..81e35c8124525ed2d51c0cea758d58e381108397 100644 (file)
@@ -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;
 
index 639302bdc61ea94bb55dd06ec44ecd45e23658f9..9caa586737f5ae5431805b49797a09c90931c9b2 100644 (file)
@@ -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;
 
index a4848d38fd975dd8daefb85c0d14926ebb8aebf6..6a200c846b13ca3cb4707cb279dc9405795fede2 100644 (file)
@@ -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();
index a746184206638b8096a8a5cd45c49897da9bff43..876826d5fe44c767e842a65f345f81fdc550dfb6 100644 (file)
@@ -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());