]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/submodel.hxx
assign a unique module name to ai/mp embedded nasal (again): __model%u
[flightgear.git] / src / AIModel / submodel.hxx
index 2024359daf0f219b6698c5101a198bc394fd2f34..7ca046f9dc0789f8334c3a572634772d7635ea15 100644 (file)
 #include <AIModel/AIBase.hxx>
 #include <vector>
 #include <string>
-SG_USING_STD(vector);
-SG_USING_STD(string);
+
+#include <Main/fg_props.hxx>
+
+using std::vector;
+using std::string;
+using std::list;
 
 class FGAIBase;
 
@@ -26,8 +30,7 @@ class FGSubmodelMgr : public SGSubsystem
 
 public:
 
-    typedef struct
-    {
+    typedef struct {
         SGPropertyNode_ptr trigger_node;
         SGPropertyNode_ptr prop;
         SGPropertyNode_ptr contents_node;
@@ -59,11 +62,18 @@ public:
         int                id;
         bool               no_roll;
         bool               serviceable;
-    }
-    submodel;
-
-    typedef struct
-    {
+        bool               collision;
+        bool               impact;
+        string             impact_report;
+        double             fuse_range;
+        string             submodel;
+        int                sub_id;
+        bool               force_stabilised;
+        bool               ext_force;
+        string             force_path;
+    }   submodel;
+
+    typedef struct {
         double     lat;
         double     lon;
         double     alt;
@@ -82,36 +92,35 @@ public:
         double     mass;
         int        id;
         bool       no_roll;
-    }
-    IC_struct;
+    }   IC_struct;
 
     FGSubmodelMgr();
     ~FGSubmodelMgr();
 
     void load();
     void init();
+    void postinit();
     void bind();
     void unbind();
     void update(double dt);
-    bool release(submodel* sm, double dt);
-    void transform(submodel* sm);
     void updatelat(double lat);
 
 private:
 
     typedef vector <submodel*> submodel_vector_type;
-    typedef submodel_vector_type::const_iterator submodel_vector_iterator;
+    typedef submodel_vector_type::iterator submodel_vector_iterator;
 
     submodel_vector_type       submodels;
-    submodel_vector_iterator   submodel_iterator;
+    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;
+    //double Rx, Ry, Rz;
+    //double Sx, Sy, Sz;
+    //double Tx, Ty, Tz;
 
     float cosRx, sinRx;
     float cosRy, sinRy;
@@ -125,10 +134,21 @@ private:
     double x_offset, y_offset, z_offset;
     double pitch_offset, yaw_offset;
 
+    double _parent_lat;
+    double _parent_lon;
+    double _parent_elev;
+    double _parent_hdg;
+    double _parent_pitch;
+    double _parent_roll;
+    double _parent_speed;
+
     static const double lbs_to_slugs; //conversion factor
 
     double contrail_altitude;
 
+    bool _impact;
+    bool _hit;
+
     SGPropertyNode_ptr _serviceable_node;
     SGPropertyNode_ptr _user_lat_node;
     SGPropertyNode_ptr _user_lon_node;
@@ -146,21 +166,34 @@ private:
     SGPropertyNode_ptr _user_speed_north_fps_node;
     SGPropertyNode_ptr _contrail_altitude_node;
     SGPropertyNode_ptr _contrail_trigger;
+    SGPropertyNode_ptr _count_node;
+    SGPropertyNode_ptr _trigger_node;
+    SGPropertyNode_ptr props;
 
     FGAIManager* ai;
     IC_struct  IC;
 
     // A list of pointers to AI objects
-    typedef list <SGSharedPtr<FGAIBase> > sm_list_type;
+    typedef list <osg::ref_ptr<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;
 
+
     void loadAI();
     void loadSubmodels();
+    void setData(int id, string& path, bool serviceable);
+    void setSubData(int id, string& path, bool serviceable);
+    void valueChanged (SGPropertyNode *);
+    void transform(submodel *);
+
+    bool release(submodel *, double dt);
+
     double getRange(double lat, double lon, double lat2, double lon2) const;
 
+    int _count;
+
 };
 
 #endif // __SYSTEMS_SUBMODEL_HXX