]> git.mxchange.org Git - flightgear.git/commitdiff
Remove persistent references to AI mananger and its objects from the submodel-manager.
authorJames Turner <zakalawe@mac.com>
Thu, 28 Oct 2010 14:10:37 +0000 (15:10 +0100)
committerJames Turner <zakalawe@mac.com>
Thu, 28 Oct 2010 14:10:37 +0000 (15:10 +0100)
src/AIModel/submodel.cxx
src/AIModel/submodel.hxx

index 29b658603d437c4cc05fd026f656cb51348d3fa0..a25212198584427cbcb3fa74c4013d6cce694153 100644 (file)
@@ -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();
index 2abff45ce9ab621ecf76263a15262c04ce50ac84..71ba8693df25ad71f811a6b55d9cd201a9cf6379 100644 (file)
 
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
-#include <AIModel/AIBase.hxx>
+#include <simgear/math/SGMath.hxx>
+
 #include <vector>
 #include <string>
 
-#include <Main/fg_props.hxx>
-
-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*> submodel_vector_type;
+    typedef std::vector <submodel*> 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 <SGSharedPtr<FGAIBase> > 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);