From 0147f78d20879561a3a32bbfa97b22b23bc2116f Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 28 Oct 2010 15:10:37 +0100 Subject: [PATCH] Remove persistent references to AI mananger and its objects from the submodel-manager. --- src/AIModel/submodel.cxx | 24 ++++++++++++---------- src/AIModel/submodel.hxx | 43 ++++++++++++++++------------------------ 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/src/AIModel/submodel.cxx b/src/AIModel/submodel.cxx index 29b658603..a25212198 100644 --- a/src/AIModel/submodel.cxx +++ b/src/AIModel/submodel.cxx @@ -43,6 +43,11 @@ FGSubmodelMgr::~FGSubmodelMgr() { } +FGAIManager* FGSubmodelMgr::aiManager() +{ + return (FGAIManager*)globals->get_subsystem("ai_model"); +} + void FGSubmodelMgr::init() { index = 0; @@ -74,8 +79,6 @@ void FGSubmodelMgr::init() _contrail_trigger = fgGetNode("ai/submodels/contrails", true); _contrail_trigger->setBoolValue(false); - ai = (FGAIManager*)globals->get_subsystem("ai_model"); - load(); } @@ -116,9 +119,9 @@ void FGSubmodelMgr::update(double dt) _expiry = false; // check if the submodel hit an object or terrain - sm_list = ai->get_ai_list(); - sm_list_iterator sm_list_itr = sm_list.begin(); - sm_list_iterator end = sm_list.end(); + FGAIManager::ai_list_type sm_list(aiManager()->get_ai_list()); + FGAIManager::ai_list_iterator sm_list_itr = sm_list.begin(), + end = sm_list.end(); for (; sm_list_itr != end; ++sm_list_itr) { FGAIBase::object_type object_type =(*sm_list_itr)->getType(); @@ -300,7 +303,8 @@ bool FGSubmodelMgr::release(submodel *sm, double dt) ballist->setParentNodes(_selected_ac); ballist->setContentsNode(sm->contents_node); ballist->setWeight(sm->weight); - ai->attach(ballist); + + aiManager()->attach(ballist); if (sm->count > 0) sm->count--; @@ -383,8 +387,6 @@ void FGSubmodelMgr::transform(submodel *sm) } else { // set the data for a submodel tied to an AI Object //cout << " set the data for a submodel tied to an AI Object " << id << endl; - sm_list_iterator sm_list_itr = sm_list.begin(); - sm_list_iterator end = sm_list.end(); setParentNode(id); } @@ -477,15 +479,15 @@ void FGSubmodelMgr::loadAI() { SG_LOG(SG_GENERAL, SG_DEBUG, "Submodels: Loading AI submodels "); - sm_list = ai->get_ai_list(); + FGAIManager::ai_list_type sm_list(aiManager()->get_ai_list()); if (sm_list.empty()) { SG_LOG(SG_GENERAL, SG_ALERT, "Submodels: Unable to read AI submodel list"); return; } - sm_list_iterator sm_list_itr = sm_list.begin(); - sm_list_iterator end = sm_list.end(); + FGAIManager::ai_list_iterator sm_list_itr = sm_list.begin(), + end = sm_list.end(); while (sm_list_itr != end) { string path = (*sm_list_itr)->_getSMPath(); diff --git a/src/AIModel/submodel.hxx b/src/AIModel/submodel.hxx index 2abff45ce..71ba8693d 100644 --- a/src/AIModel/submodel.hxx +++ b/src/AIModel/submodel.hxx @@ -13,17 +13,13 @@ #include #include -#include +#include + #include #include -#include
- -using std::vector; -using std::string; -using std::list; - class FGAIBase; +class FGAIManager; class FGSubmodelMgr : public SGSubsystem, public SGPropertyChangeListener { @@ -37,8 +33,8 @@ public: SGPropertyNode_ptr submodel_node; SGPropertyNode_ptr speed_node; - string name; - string model; + std::string name; + std::string model; double speed; bool slaved; bool repeat; @@ -68,13 +64,13 @@ public: bool collision; bool expiry; bool impact; - string impact_report; + std::string impact_report; double fuse_range; - string submodel; + std::string submodel; int sub_id; bool force_stabilised; bool ext_force; - string force_path; + std::string force_path; } submodel; typedef struct { @@ -112,7 +108,7 @@ public: private: - typedef vector submodel_vector_type; + typedef std::vector submodel_vector_type; typedef submodel_vector_type::iterator submodel_vector_iterator; submodel_vector_type submodels; @@ -186,22 +182,17 @@ private: SGPropertyNode_ptr _path_node; SGPropertyNode_ptr _selected_ac; - - FGAIManager* ai; IC_struct IC; - - // A list of pointers to AI objects - typedef list > sm_list_type; - typedef sm_list_type::iterator sm_list_iterator; - typedef sm_list_type::const_iterator sm_list_const_iterator; - - sm_list_type sm_list; - - + + /** + * Helper to retrieve the AI manager, if it currently exists + */ + FGAIManager* aiManager(); + void loadAI(); void loadSubmodels(); - void setData(int id, string& path, bool serviceable); - void setSubData(int id, string& path, bool serviceable); + void setData(int id, std::string& path, bool serviceable); + void setSubData(int id, std::string& path, bool serviceable); void valueChanged (SGPropertyNode *); void transform(submodel *); void setParentNode(int parent_id); -- 2.39.5