]> git.mxchange.org Git - flightgear.git/commitdiff
Issue #631, reset scenarios on sim-reset
authorJames Turner <jmt@Bishop.local>
Wed, 19 Jun 2013 23:24:33 +0000 (00:24 +0100)
committerJames Turner <jmt@Bishop.local>
Wed, 19 Jun 2013 23:24:33 +0000 (00:24 +0100)
src/AIModel/AIManager.cxx
src/AIModel/AIManager.hxx

index 8ded9204b1803574f7b1e0ecefd25a34a6c3c17d..0e14b015cee218faf6c00f5e107eb7dec7c8a612 100644 (file)
@@ -162,8 +162,20 @@ FGAIManager::postinit()
 void
 FGAIManager::reinit()
 {
+    // shutdown scenarios
+    unloadAllScenarios();
+    
     update(0.0);
     std::for_each(ai_list.begin(), ai_list.end(), boost::mem_fn(&FGAIBase::reinit));
+    
+    // (re-)load scenarios
+    postinit();
+}
+
+void
+FGAIManager::shutdown()
+{
+    unloadAllScenarios();
 }
 
 void
@@ -429,6 +441,21 @@ FGAIManager::unloadScenario( const string &filename)
     return true;
 }
 
+void
+FGAIManager::unloadAllScenarios()
+{
+    ScenarioDict::iterator it = _scenarios.begin();
+    for (; it != _scenarios.end(); ++it) {
+        delete it->second;
+    } // of scenarios iteration
+    
+    
+    // remove /sim/ai node
+    root->removeChildren("scenario");
+    _scenarios.clear();
+}
+
+
 SGPropertyNode_ptr
 FGAIManager::loadScenarioFile(const std::string& filename)
 {
index 383eba6485e6bdd1ff022044b99c8be979e3f1cd..605577d19efdad43fb8b67b081617b9b9fec7875 100644 (file)
@@ -60,6 +60,7 @@ public:
     virtual ~FGAIManager();
 
     void init();
+    virtual void shutdown();
     void postinit();
     void reinit();
     void bind();
@@ -101,6 +102,7 @@ private:
     
     bool removeObject(const SGPropertyNode* args);
     bool unloadScenario( const std::string &filename );
+    void unloadAllScenarios();
     
     SGPropertyNode_ptr root;
     SGPropertyNode_ptr enabled;