]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/submodel.hxx
Support helipad names in the --runway startup option
[flightgear.git] / src / AIModel / submodel.hxx
index 95e62f6b74b3dabca98f99995bdfb40d2d97565a..5d01d3d761b534d88d94b3ae71fe982129f67fe3 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;
@@ -58,6 +54,7 @@ public:
         bool               first_time;
         double             cd;
         double             weight;
+        double             mass;
         double             contents;
         bool               aero_stabilised;
         int                id;
@@ -67,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 {
@@ -95,6 +92,7 @@ public:
         double     mass;
         int        id;
         bool       no_roll;
+        int        parent_id;
     }   IC_struct;
 
     FGSubmodelMgr();
@@ -110,17 +108,13 @@ 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;
     submodel_vector_type       subsubmodels;
     submodel_vector_iterator   submodel_iterator, subsubmodel_iterator;
 
-    float trans[3][3];
-    float in[3];
-    float out[3];
-
     //double Rx, Ry, Rz;
     //double Sx, Sy, Sz;
     //double Tx, Ty, Tz;
@@ -144,6 +138,8 @@ private:
     double _parent_pitch;
     double _parent_roll;
     double _parent_speed;
+    //double _parent_ID;
+
     double _x_offset;
     double _y_offset;
     double _z_offset;
@@ -180,25 +176,22 @@ private:
     SGPropertyNode_ptr props;
     SGPropertyNode_ptr _model_added_node;
     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, const std::string& path, bool serviceable);
+    void setSubData(int id, const std::string& path, bool serviceable);
     void valueChanged (SGPropertyNode *);
     void transform(submodel *);
+    void setParentNode(int parent_id);
 
     bool release(submodel *, double dt);