]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIBallistic.hxx
Clear chat messages when an aircraft becomes inactive in the property tree.
[flightgear.git] / src / AIModel / AIBallistic.hxx
index c8ad6d1b7a9bcea5f811074e39f86baa5d9059d1..68442fdb6f23efd3df0df3673b9eeb2803fad56f 100644 (file)
 #ifndef _FG_AIBALLISTIC_HXX
 #define _FG_AIBALLISTIC_HXX
 
+#include <math.h>
+#include <vector>
+#include <simgear/structure/SGSharedPtr.hxx>
+#include <simgear/scene/material/mat.hxx>
+
+
 #include "AIManager.hxx"
 #include "AIBase.hxx"
 
+SG_USING_STD(vector);
+SG_USING_STD(list);
 
 class FGAIBallistic : public FGAIBase {
 
@@ -54,13 +62,30 @@ public:
     void setNoRoll( bool nr );
     void setRandom( bool r );
     void setName(const string&);
+    void setCollision(bool c);
     void setImpact(bool i);
     void setImpactReportNode(const string&);
-
+    void setFuseRange(double f);
+    void setSMPath(const string&);
+    void setSubID(int i);
+    void setSubmodel(const string&);
+    void setExternalForce( bool f );
+    void setForcePath(const string&);
     double _getTime() const;
+    bool getHtAGL();
+    void setForceStabilisation( bool val );
+    void setXOffset(double x);
+    void setYOffset(double y);
+    void setZOffset(double z);
+
 
     virtual const char* getTypeString(void) const { return "ballistic"; }
     static const double slugs_to_kgs; //conversion factor
+    static const double slugs_to_lbs; //conversion factor
+
+    SGPropertyNode_ptr _force_node;
+    SGPropertyNode_ptr _force_azimuth_node;
+    SGPropertyNode_ptr _force_elevation_node;
 
 private:
 
@@ -80,24 +105,41 @@ private:
     bool   _random;          // modifier for Cd
     double _ht_agl_ft;       // height above ground level
     double _load_resistance; // ground load resistanc N/m^2
+    double _frictionFactor;  // dimensionless modifier for Coefficient of Friction
     bool   _solid;           // if true ground is solid for FDMs
-    bool   _impact;          // if true an impact point on the terrain is calculated
-    bool   _impact_data;     // if true impact data have been set
-    SGPropertyNode_ptr _impact_report_node;
+    double _elevation_m;     // ground elevation in meters
+    bool   _force_stabilised;// if true, object will align to external force
+    double _x_offset;
+    double _y_offset;
+    double _z_offset;
 
-    double _impact_energy;
-    double _impact_speed;
-    double _impact_lat;
-    double _impact_lon;
-    double _impact_elev;
+    bool   _report_collision;       // if true a collision point with AI Objects is calculated
+    bool   _report_impact;          // if true an impact point on the terrain is calculated
+    bool   _external_force;         // if true then apply external force
+
+    SGPropertyNode_ptr _impact_report_node;  // report node for impact and collision
+
+    double _fuse_range;
+
+    double _dt_count;
+    double _next_run;
 
-    string _mat_name;
     string _name;
+    string _path;
+    string _submodel;
+    string _force_path;
+
+    const SGMaterial* _material;
 
     void Run(double dt);
+    void handle_collision();
     void handle_impact();
+    void setPitch (double e, double dt, double c);
+    void setHdg (double dt, double c);
+    void report_impact(double elevation, const FGAIBase *target = 0);
+
+    double getRecip(double az);
 
-    // FGAIBase* _ai;
 };
 
 #endif  // _FG_AIBALLISTIC_HXX