]> git.mxchange.org Git - flightgear.git/commitdiff
Fix classes derived from SubsystemGroup.
authorJames Turner <zakalawe@mac.com>
Wed, 19 Sep 2012 10:37:19 +0000 (11:37 +0100)
committerJames Turner <zakalawe@mac.com>
Wed, 19 Sep 2012 10:37:19 +0000 (11:37 +0100)
Various classes derive from SubsystemGroup, but extend the init behaviour. Fix those for the incremental init scheme, generally by forcing their init to be atomic. Can convert them to be truly incremental in the future if it's needed, but probably not.

src/Autopilot/autopilotgroup.cxx
src/Environment/environment_mgr.cxx
src/Environment/environment_mgr.hxx
src/Environment/terrainsampler.cxx
src/Instrumentation/instrument_mgr.cxx
src/Instrumentation/instrument_mgr.hxx

index c9df860d220a58da2a65b0442eae59204c5e94ad..c60ea3010a6d2f8c27dc6ee0f22d51f74bfcedcc 100644 (file)
@@ -49,6 +49,7 @@ public:
     virtual void addAutopilot( const std::string & name, SGPropertyNode_ptr apNode, SGPropertyNode_ptr config );
     virtual void removeAutopilot( const std::string & name );
     void init();
+    InitStatus incrementalInit();
     void reinit();
     void update( double dt );
 private:
@@ -101,6 +102,12 @@ void FGXMLAutopilotGroupImplementation::reinit()
     init();
 }
 
+SGSubsystem::InitStatus FGXMLAutopilotGroupImplementation::incrementalInit()
+{
+  init();
+  return INIT_DONE;
+}
+
 void FGXMLAutopilotGroupImplementation::init()
 {
     initFrom( fgGetNode( "/sim/systems" ), _nodeName.c_str() );
index a1e22555d6fc72fa00899e6aab19a9f9f7f1ebc9..e7688d793b993b38b6d0c5efd51929561b0ad8f0 100644 (file)
@@ -132,23 +132,26 @@ FGEnvironmentMgr::~FGEnvironmentMgr ()
   delete _3dCloudsEnableListener;
 }
 
-void
-FGEnvironmentMgr::init ()
+SGSubsystem::InitStatus FGEnvironmentMgr::incrementalInit()
 {
-  SG_LOG( SG_ENVIRONMENT, SG_INFO, "Initializing environment subsystem");
-  SGSubsystemGroup::init();
-  fgClouds->Init();
-
-  // FIXME: is this really part of the environment_mgr?
-  // Initialize the longitude, latitude and altitude to the initial position
-  // of the aircraft so that the atmospheric properties (pressure, temperature
-  // and density) can be initialized accordingly.
-  _altitude_n->setDoubleValue(fgGetDouble("/sim/presets/altitude-ft"));
-  _longitude_n->setDoubleValue(fgGetDouble("/sim/presets/longitude-deg"));
-  _latitude_n->setDoubleValue(fgGetDouble("/sim/presets/latitude-deg"));
   
-  globals->get_event_mgr()->addTask("updateClosestAirport", this,
-                                    &FGEnvironmentMgr::updateClosestAirport, 30 );
+  InitStatus r = SGSubsystemGroup::incrementalInit();
+  if (r == INIT_DONE) {
+    fgClouds->Init();
+    
+    // FIXME: is this really part of the environment_mgr?
+    // Initialize the longitude, latitude and altitude to the initial position
+    // of the aircraft so that the atmospheric properties (pressure, temperature
+    // and density) can be initialized accordingly.
+    _altitude_n->setDoubleValue(fgGetDouble("/sim/presets/altitude-ft"));
+    _longitude_n->setDoubleValue(fgGetDouble("/sim/presets/longitude-deg"));
+    _latitude_n->setDoubleValue(fgGetDouble("/sim/presets/latitude-deg"));
+    
+    globals->get_event_mgr()->addTask("updateClosestAirport", this,
+                                      &FGEnvironmentMgr::updateClosestAirport, 30 );
+  }
+  
+  return r;
 }
 
 void
index 64e4d9f8faff48c710d09bda0b732cd2b1d2f8ed..93213ecb5c624ab309bdd3a78b47738e662a7c44 100644 (file)
@@ -54,7 +54,7 @@ public:
   FGEnvironmentMgr ();
   virtual ~FGEnvironmentMgr ();
 
-  virtual void init ();
+  virtual InitStatus incrementalInit ();
   virtual void reinit ();
   virtual void shutdown ();
   virtual void bind ();
@@ -103,7 +103,6 @@ private:
   simgear::TiedPropertyList _tiedProperties;
   SGPropertyChangeListener * _3dCloudsEnableListener;
   SGSky* _sky;
-    
 };
 
 #endif // _ENVIRONMENT_MGR_HXX
index b4a7beabf5a738174d63eaf4a578eb6d8b081bb6..744b3ef977b484a57d9c7ba63cbd32228d7c4c0c 100644 (file)
@@ -321,6 +321,7 @@ public:
     virtual ~TerrainSamplerImplementation ();
     
     virtual void init ();
+    virtual InitStatus incrementalInit ();
     virtual void postinit();
     virtual void reinit ();
     virtual void bind();
@@ -347,6 +348,12 @@ TerrainSamplerImplementation::TerrainSamplerImplementation( SGPropertyNode_ptr r
 TerrainSamplerImplementation::~TerrainSamplerImplementation()
 {
 }
+  
+SGSubsystem::InitStatus TerrainSamplerImplementation::incrementalInit()
+{
+  init();
+  return INIT_DONE;
+}
 
 void TerrainSamplerImplementation::init()
 {
index 121df9bd8b6065fecaf8dfe292b535b681b64de8..d47917468e60b7d96d4f27d384eac398878911e6 100644 (file)
@@ -63,6 +63,12 @@ FGInstrumentMgr::~FGInstrumentMgr ()
 {
 }
 
+SGSubsystem::InitStatus FGInstrumentMgr::incrementalInit()
+{
+  init();
+  return INIT_DONE;
+}
+
 void FGInstrumentMgr::init()
 {
   SGPropertyNode_ptr config_props = new SGPropertyNode;
index d7c9b2a07b66ef2474f4b6dcd7f402b30a7ba66d..cda6550e5ee41a94c399a3a0614a68c46313bcbe 100644 (file)
@@ -33,6 +33,7 @@ public:
     virtual ~FGInstrumentMgr ();
     
     virtual void init();
+    virtual InitStatus incrementalInit();
     virtual void reinit();
 private:
     bool build (SGPropertyNode* config_props);