From 081240c4dad0076d9e0deb0cde21bee4dbd7629a Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 20 Jun 2013 00:24:33 +0100 Subject: [PATCH] Issue #631, reset scenarios on sim-reset --- src/AIModel/AIManager.cxx | 27 +++++++++++++++++++++++++++ src/AIModel/AIManager.hxx | 2 ++ 2 files changed, 29 insertions(+) diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx index 8ded9204b..0e14b015c 100644 --- a/src/AIModel/AIManager.cxx +++ b/src/AIModel/AIManager.cxx @@ -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) { diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 383eba648..605577d19 100644 --- a/src/AIModel/AIManager.hxx +++ b/src/AIModel/AIManager.hxx @@ -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; -- 2.39.5