#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 {
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:
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
-
- double _impact_energy;
- double _impact_speed;
- double _impact_lat;
- double _impact_lon;
- double _impact_elev;
-
- string _mat_name;
+ 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);
- // FGAIBase* _ai;
};
#endif // _FG_AIBALLISTIC_HXX