#ifndef _FG_AIBALLISTIC_HXX
#define _FG_AIBALLISTIC_HXX
-#include <math.h>
+#include <cmath>
#include <vector>
#include <simgear/structure/SGSharedPtr.hxx>
#include <simgear/scene/material/mat.hxx>
#include "AIManager.hxx"
#include "AIBase.hxx"
-using std::vector;
-using std::list;
-
class FGAIBallistic : public FGAIBase {
public:
void setAzimuth( double az );
void setElevation( double el );
+ void setAzimuthRandomError(double error);
+ void setElevationRandomError(double error);
void setRoll( double rl );
void setStabilisation( bool val );
void setDragArea( double a );
void setWind_from_east( double fps );
void setWind_from_north( double fps );
void setWind( bool val );
- void setCd( double c );
+ void setCd(double cd);
+ void setCdRandomness(double randomness);
void setMass( double m );
void setWeight( double w );
void setNoRoll( bool nr );
void setRandom( bool r );
- void setRandomness( double r );
-// void setName(const string&);
+ void setLifeRandomness(double randomness);
void setCollision(bool c);
void setExpiry(bool e);
void setImpact(bool i);
- void setImpactReportNode(const string&);
+ void setImpactReportNode(const std::string&);
void setContentsNode(const SGPropertyNode_ptr);
void setFuseRange(double f);
- void setSMPath(const string&);
+ void setSMPath(const std::string&);
void setSubID(int i);
- void setSubmodel(const string&);
+ void setSubmodel(const std::string&);
void setExternalForce( bool f );
- void setForcePath(const string&);
- void setContentsPath(const string&);
+ void setForcePath(const std::string&);
+ void setContentsPath(const std::string&);
void setForceStabilisation( bool val );
void setGroundOffset(double g);
void setLoadOffset(double l);
bool getHtAGL(double start);
bool getSlaved() const;
-// bool getFormate() const;
bool getSlavedLoad() const;
FGAIBallistic *ballistic;
SGPropertyNode_ptr _force_azimuth_node;
SGPropertyNode_ptr _force_elevation_node;
- SGPropertyNode_ptr _pnode; // node for parent model
- SGPropertyNode_ptr _p_pos_node; // nodes for parent parameters
+ // Node for parent model
+ SGPropertyNode_ptr _pnode;
+
+ // Nodes for parent parameters
+ SGPropertyNode_ptr _p_pos_node;
SGPropertyNode_ptr _p_lat_node;
SGPropertyNode_ptr _p_lon_node;
SGPropertyNode_ptr _p_alt_node;
private:
+ double _az_random_error; // maximum azimuth error in degrees
+ double _el_random_error; // maximum elevation error in degrees
bool _aero_stabilised; // if true, object will align with trajectory
double _drag_area; // equivalent drag area in ft2
- double _life_timer; // seconds
+ double _cd; // current drag coefficient
+ double _init_cd; // initial drag coefficient
+ double _cd_randomness; // randomness of Cd. 1.0 means +- 100%, 0.0 means no randomness
double _buoyancy; // fps^2
+ double _life_timer; // seconds
bool _wind; // if true, local wind will be applied to object
- double _Cd; // drag coefficient
double _mass; // slugs
bool _random; // modifier for Cd, life, az
- double _randomness; // dimension for _random, only applies to life at present
+ double _life_randomness; // dimension for _random, only applies to life at present
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 _slave_load_to_ac;// if true, object will be slaved to the parent ac pos
double _contents_lb; // contents of the object
double _weight_lb; // weight of the object (no contents if appropriate) (lbs)
- string _mat_name;
+ std::string _mat_name;
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
SGPropertyNode_ptr _impact_report_node; // report node for impact and collision
SGPropertyNode_ptr _contents_node; // node for droptank etc. contents
- //SGPropertyNode_ptr _pnode; // node for parent model
- //SGPropertyNode_ptr _p_pos_node; // nodes for parent parameters
- //SGPropertyNode_ptr _p_lat_node;
- //SGPropertyNode_ptr _p_lon_node;
- //SGPropertyNode_ptr _p_alt_node;
- //SGPropertyNode_ptr _p_agl_node;
- //SGPropertyNode_ptr _p_ori_node;
- //SGPropertyNode_ptr _p_pch_node;
- //SGPropertyNode_ptr _p_rll_node;
- //SGPropertyNode_ptr _p_hdg_node;
- //SGPropertyNode_ptr _p_vel_node;
- //SGPropertyNode_ptr _p_spd_node;
double _fuse_range;
- double _distance;
- double _dt_count;
- double _next_run;
- string _submodel;
- string _force_path;
- string _contents_path;
-
- const SGMaterial* _material;
+ std::string _submodel;
+ std::string _force_path;
+ std::string _contents_path;
+ void handleEndOfLife(double);
void handle_collision();
void handle_expiry();
void handle_impact();
void setContents(double c);
void calcVSHS();
void calcNE();
- //void setOffsetPos(SGGeod pos, double heading, double pitch, double roll);
- //void setOffsetVelocity(double dt, SGGeod pos);
- SGVec3d getCartUserPos() const;
SGVec3d getCartOffsetPos(SGGeod pos, double heading, double pitch, double roll) const;
- //double getDistanceLoadToHitch() const;
- //double getElevLoadToHitch() const;
- //double getBearingLoadToHitch() const;
double getRecip(double az);
double getMass() const;
double _ground_offset;
double _load_offset;
- double _old_height;
SGVec3d _oldcartoffsetPos;
SGVec3d _oldcartPos;
-
- //SGGeod _parentpos;
- //SGGeod _oldpos;
- //SGGeod _offsetpos;
- //SGGeod _oldoffsetpos;
-
};
#endif // _FG_AIBALLISTIC_HXX