]> git.mxchange.org Git - flightgear.git/blobdiff - src/Systems/submodel.hxx
Boris Koenig:
[flightgear.git] / src / Systems / submodel.hxx
index 3b96ec02ec2d58faac5ba7d7c7c6ca042f8e355e..a0c4dd6398e51e3f78b9626bf767c5b800b70a3d 100644 (file)
 
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
-#include <AIModel/AIManager.hxx>
+#include <AIModel/AIBase.hxx>
+#include <vector>
+#include <string>
+SG_USING_STD(vector);
+SG_USING_STD(string);
 
 
 class SubmodelSystem : public SGSubsystem
@@ -21,37 +25,116 @@ class SubmodelSystem : public SGSubsystem
 
 public:
 
+
+ typedef struct {
+  SGPropertyNode* trigger;
+  SGPropertyNode* prop;
+  SGPropertyNode* contents_node;
+  
+  string             name;
+  string             model;
+  double             speed;
+  bool               slaved;
+  bool               repeat;
+  double             delay;
+  double             timer;
+  int                count;
+  double             x_offset;
+  double             y_offset;
+  double             z_offset;
+  double             yaw_offset;
+  double             pitch_offset;
+  double             drag_area; 
+  double             life;
+  double             buoyancy;
+  bool               wind;
+  bool               first_time;
+  double             cd;
+  double             weight;
+  double             contents;
+ } submodel; 
+
+ typedef struct {
+  double     lat;
+  double     lon;
+  double     alt;
+  double     roll;
+  double     azimuth;
+  double     elevation;
+  double     speed;
+  double     wind_from_east;
+  double     wind_from_north;
+  double     speed_down_fps;
+  double     speed_east_fps;
+  double     speed_north_fps;
+  double     total_speed_down;
+  double     total_speed_east;
+  double     total_speed_north;
+  double     mass;
+ } IC_struct;  
+
     SubmodelSystem ();
     ~SubmodelSystem ();
 
+    void load ();
     void init ();
     void bind ();
     void unbind ();
     void update (double dt);
-    bool release (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::iterator submodel_vector_iterator;
+
+    submodel_vector_type       submodels;
+    submodel_vector_iterator   submodel_iterator;
+
+    float trans[3][3];
+    float in[3];
+    float out[3];
+
+    double Rx, Ry, Rz;
+    double Sx, Sy, Sz;
+    double Tx, Ty, Tz;
+
+    float cosRx, sinRx;
+    float cosRy, sinRy;
+    float cosRz, sinRz;
+
+    double ft_per_deg_longitude;
+    double ft_per_deg_latitude;
+
     double x_offset, y_offset, z_offset;
     double pitch_offset, yaw_offset;
 
-    SGPropertyNode_ptr _serviceable_node;
-    SGPropertyNode_ptr _trigger_node;
-    SGPropertyNode_ptr _amount_node;
+    static const double lbs_to_slugs; //conversion factor
 
-    SGPropertyNode_ptr _user_lat_node;
-    SGPropertyNode_ptr _user_lon_node;
-    SGPropertyNode_ptr _user_heading_node;
-    SGPropertyNode_ptr _user_alt_node;
-    SGPropertyNode_ptr _user_pitch_node;
-    SGPropertyNode_ptr _user_roll_node;
-    SGPropertyNode_ptr _user_yaw_node;
-    SGPropertyNode_ptr _user_speed_node;
+    SGPropertyNode* _serviceable_node;
+    SGPropertyNode* _user_lat_node;
+    SGPropertyNode* _user_lon_node;
+    SGPropertyNode* _user_heading_node;
+    SGPropertyNode* _user_alt_node;
+    SGPropertyNode* _user_pitch_node;
+    SGPropertyNode* _user_roll_node;
+    SGPropertyNode* _user_yaw_node;
+    SGPropertyNode* _user_alpha_node;
+    SGPropertyNode* _user_speed_node;
+    SGPropertyNode* _user_wind_from_east_node;
+    SGPropertyNode* _user_wind_from_north_node;
+    SGPropertyNode* _user_speed_down_fps_node;
+    SGPropertyNode* _user_speed_east_fps_node;
+    SGPropertyNode* _user_speed_north_fps_node;
 
-    double elapsed_time;
     FGAIManager* ai;
-    double initial_velocity;
-    bool firing;
+    IC_struct  IC;
+
 };
 
 #endif // __SYSTEMS_SUBMODEL_HXX
+
+
+