]> 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 6e3e5fbd73d32f75618665557a43d2e0a6e62b29..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,30 +62,84 @@ 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:
 
-    double azimuth;         // degrees true
-    double elevation;       // degrees
-    double rotation;        // degrees
-    bool   aero_stabilised; // if true, object will align with trajectory
-    double drag_area;       // equivalent drag area in ft2
-    double life_timer;      // seconds
-    double gravity;         // fps2
-    double buoyancy;        // fps2
-    double wind_from_east;  // fps
-    double wind_from_north; // fps
-    bool wind;              // if true, local wind will be applied to object
-    double Cd;              // drag coefficient
-    double mass;            // slugs
-    bool random;            // modifier for Cd
-    string name;
+    double _azimuth;         // degrees true
+    double _elevation;       // degrees
+    double _rotation;        // degrees
+    bool   _aero_stabilised; // if true, object will align with trajectory
+    double _drag_area;       // equivalent drag area in ft2
+    double _life_timer;      // seconds
+    double _gravity;         // fps2
+    double _buoyancy;        // fps2
+    double _wind_from_east;  // fps
+    double _wind_from_north; // fps
+    bool   _wind;            // if true, local wind will be applied to object
+    double _Cd;              // drag coefficient
+    double _mass;            // slugs
+    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
+    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;
+
+    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 _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);
+
 };
 
 #endif  // _FG_AIBALLISTIC_HXX