]> git.mxchange.org Git - flightgear.git/commitdiff
Allow instruments/systems to reset on sim reset
authorThorstenB <brehmt@gmail.com>
Wed, 19 Sep 2012 18:57:52 +0000 (20:57 +0200)
committerThorstenB <brehmt@gmail.com>
Wed, 19 Sep 2012 18:57:52 +0000 (20:57 +0200)
so they can instantly adjust to the changed environment.
(Not fully working yet, since some environment settings, like environemnt
pressure/temperature, still changes slowly after a sim reset - instead of
immediately jumping to the new setting. Also, METAR sometimes arrives too
late...).

src/Environment/environment.cxx
src/Instrumentation/instrument_mgr.cxx
src/Instrumentation/instrument_mgr.hxx
src/Main/fg_init.cxx

index 4b0a6e3284bc56c415f0ab451bbefa8a2cf288e3..328bc188099ee6d52ce45176c8532c53ed20bfcb 100644 (file)
@@ -268,95 +268,84 @@ void FGEnvironment::Tie( SGPropertyNode_ptr base, bool archivable )
 
   _tiedProperties.Tie( "visibility-m", this, 
       &FGEnvironment::get_visibility_m, 
-      &FGEnvironment::set_visibility_m)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_visibility_m);
 
   _tiedProperties.Tie("temperature-sea-level-degc", this, 
       &FGEnvironment::get_temperature_sea_level_degc, 
-      &FGEnvironment::set_temperature_sea_level_degc)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_temperature_sea_level_degc);
 
   _tiedProperties.Tie("temperature-degc", this, 
       &FGEnvironment::get_temperature_degc,
-      &FGEnvironment::set_temperature_degc)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
-
-  _tiedProperties.Tie("temperature-degf", this, 
-      &FGEnvironment::get_temperature_degf);
+      &FGEnvironment::set_temperature_degc);
 
   _tiedProperties.Tie("dewpoint-sea-level-degc", this, 
       &FGEnvironment::get_dewpoint_sea_level_degc, 
-      &FGEnvironment::set_dewpoint_sea_level_degc)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_dewpoint_sea_level_degc);
 
   _tiedProperties.Tie("dewpoint-degc", this, 
       &FGEnvironment::get_dewpoint_degc,
-      &FGEnvironment::set_dewpoint_degc)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_dewpoint_degc);
 
   _tiedProperties.Tie("pressure-sea-level-inhg", this, 
       &FGEnvironment::get_pressure_sea_level_inhg, 
-      &FGEnvironment::set_pressure_sea_level_inhg)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_pressure_sea_level_inhg);
 
   _tiedProperties.Tie("pressure-inhg", this, 
       &FGEnvironment::get_pressure_inhg,
-      &FGEnvironment::set_pressure_inhg)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
-
-  _tiedProperties.Tie("density-slugft3", this, 
-      &FGEnvironment::get_density_slugft3); // read-only
-
-  _tiedProperties.Tie("relative-humidity", this, 
-      &FGEnvironment::get_relative_humidity); //ro
-
-  _tiedProperties.Tie("atmosphere/density-tropo-avg", this, 
-      &FGEnvironment::get_density_tropo_avg_kgm3); //ro
+      &FGEnvironment::set_pressure_inhg);
 
   _tiedProperties.Tie("atmosphere/altitude-half-to-sun", this, 
       &FGEnvironment::get_altitude_half_to_sun_m, 
-      &FGEnvironment::set_altitude_half_to_sun_m)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_altitude_half_to_sun_m);
 
   _tiedProperties.Tie("atmosphere/altitude-troposphere-top", this, 
       &FGEnvironment::get_altitude_tropo_top_m, 
-      &FGEnvironment::set_altitude_tropo_top_m)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_altitude_tropo_top_m);
 
   _tiedProperties.Tie("wind-from-heading-deg", this, 
       &FGEnvironment::get_wind_from_heading_deg, 
-      &FGEnvironment::set_wind_from_heading_deg)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_wind_from_heading_deg);
 
   _tiedProperties.Tie("wind-speed-kt", this, 
       &FGEnvironment::get_wind_speed_kt, 
-      &FGEnvironment::set_wind_speed_kt)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_wind_speed_kt);
 
   _tiedProperties.Tie("wind-from-north-fps", this, 
       &FGEnvironment::get_wind_from_north_fps, 
-      &FGEnvironment::set_wind_from_north_fps)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_wind_from_north_fps);
 
   _tiedProperties.Tie("wind-from-east-fps", this, 
       &FGEnvironment::get_wind_from_east_fps, 
-      &FGEnvironment::set_wind_from_east_fps)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_wind_from_east_fps);
 
   _tiedProperties.Tie("wind-from-down-fps", this, 
       &FGEnvironment::get_wind_from_down_fps, 
-      &FGEnvironment::set_wind_from_down_fps)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_wind_from_down_fps);
 
   _tiedProperties.Tie("turbulence/magnitude-norm", this, 
       &FGEnvironment::get_turbulence_magnitude_norm, 
-      &FGEnvironment::set_turbulence_magnitude_norm)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_turbulence_magnitude_norm);
 
   _tiedProperties.Tie("turbulence/rate-hz", this, 
       &FGEnvironment::get_turbulence_rate_hz, 
-      &FGEnvironment::set_turbulence_rate_hz)
-      ->setAttribute( SGPropertyNode::ARCHIVE, archivable );
+      &FGEnvironment::set_turbulence_rate_hz);
+
+  _tiedProperties.setAttribute( SGPropertyNode::ARCHIVE, archivable );
+
+  _tiedProperties.Tie("temperature-degf", this,
+      &FGEnvironment::get_temperature_degf);
+
+  _tiedProperties.Tie("density-slugft3", this,
+      &FGEnvironment::get_density_slugft3); // read-only
+
+  _tiedProperties.Tie("relative-humidity", this,
+      &FGEnvironment::get_relative_humidity); //ro
+
+  _tiedProperties.Tie("atmosphere/density-tropo-avg", this,
+      &FGEnvironment::get_density_tropo_avg_kgm3); //ro
+
+  // do not auto reset/restore attributes on reset
+  _tiedProperties.setAttribute( SGPropertyNode::PRESERVE, true );
 }
 
 void FGEnvironment::Untie()
index d47917468e60b7d96d4f27d384eac398878911e6..e1ca12775f9727a0efd4b9f13e9df1af8d873bf2 100644 (file)
@@ -113,20 +113,6 @@ void FGInstrumentMgr::init()
   SGSubsystemGroup::init();
 }
 
-void FGInstrumentMgr::reinit()
-{  
-// delete all our instrument
-  for (unsigned int i=0; i<_instruments.size(); ++i) {
-    const std::string& nm(_instruments[i]);
-    SGSubsystem* instr = get_subsystem(nm);
-    instr->unbind();
-    remove_subsystem(nm);
-    delete instr;
-  }
-  
-  init();
-}
-
 bool FGInstrumentMgr::build (SGPropertyNode* config_props)
 {
     for ( int i = 0; i < config_props->nChildren(); ++i ) {
index cda6550e5ee41a94c399a3a0614a68c46313bcbe..58d92afbef858250a9ce1746b4f825901db5d2d6 100644 (file)
@@ -34,7 +34,7 @@ public:
     
     virtual void init();
     virtual InitStatus incrementalInit();
-    virtual void reinit();
+
 private:
     bool build (SGPropertyNode* config_props);
     
index 67cf89250fc3a6aa508d0030dba2c2a21f97f08f..78fc7639d182693f77965ca194d1fa8927077c16 100644 (file)
@@ -824,6 +824,10 @@ void fgReInitSubsystems()
     // need to bind FDMshell again, since we manually unbound it above...
     globals->get_subsystem("flight")->bind();
 
+    // need to reset aircraft (systems/instruments) so they can adapt to current environment
+    globals->get_subsystem("systems")->reinit();
+    globals->get_subsystem("instrumentation")->reinit();
+
 // setup state to end re-init
     fgSetBool("/sim/signals/reinit", false);
     if ( !freeze ) {