X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIBase.hxx;h=2f83623310c89f178ba42ff517f65920fcd7fd5b;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=c1a533bed0ea0667d0f05dd14080e8b93c8603be;hpb=f08012d14f6c5093ac7d849f523279233f51d90f;p=flightgear.git diff --git a/src/AIModel/AIBase.hxx b/src/AIModel/AIBase.hxx index c1a533bed..2f8362331 100644 --- a/src/AIModel/AIBase.hxx +++ b/src/AIModel/AIBase.hxx @@ -29,6 +29,10 @@ #include #include #include +#include + +#include + #include
@@ -66,6 +70,7 @@ public: void setCallSign(const string& ); void setSpeed( double speed_KTAS ); void setAltitude( double altitude_ft ); + void setAltitudeAGL( double altitude_agl_ft ); void setHeading( double heading ); void setLatitude( double latitude ); void setLongitude( double longitude ); @@ -86,6 +91,15 @@ public: void setImpactLon( double lon ); void setImpactElev( double e ); void setParentName(const string& p); + void setName(const string& n); + void setMaxSpeed(double kts); + + void calcRangeBearing(double lat, double lon, double lat2, double lon2, + double &range, double &bearing) const; + double calcRelBearingDeg(double bearing, double heading); + double calcTrueBearingDeg(double bearing, double heading); + double calcRecipBearingDeg(double bearing); + bool setParentNode(); int getID() const; @@ -99,6 +113,9 @@ public: bool getGroundElevationM(const SGGeod& pos, double& elev, const SGMaterial** material) const; + double _elevation_m; + const SGMaterial* _material; + double _getCartPosX() const; double _getCartPosY() const; double _getCartPosZ() const; @@ -111,6 +128,8 @@ public: double _roll_offset; double _yaw_offset; + double _max_speed; + string _path; string _callsign; string _submodel; @@ -139,6 +158,7 @@ protected: double speed_north_deg_sec; double speed_east_deg_sec; double turn_radius_ft; // turn radius ft at 15 kts rudder angle 15 degrees + double altitude_agl_ft; double ft_per_deg_lon; double ft_per_deg_lat; @@ -173,6 +193,7 @@ protected: bool invisible; bool no_roll; bool serviceable; + bool _installed; int _subID; double life; @@ -216,6 +237,8 @@ public: void _setSubID( int s ); void _setUserPos(); + double _getAltitudeAGL(SGGeod inpos, double start); + double _getVS_fps() const; double _getAltitude() const; double _getLongitude() const; @@ -317,6 +340,10 @@ inline void FGAIBase::setAltitude( double alt_ft ) { pos.setElevationFt(altitude_ft); } +inline void FGAIBase::setAltitudeAGL( double alt_ft ) { + altitude_agl_ft = alt_ft; +} + inline void FGAIBase::setBank( double bank ) { roll = tgt_roll = bank; no_roll = false; @@ -365,10 +392,45 @@ inline void FGAIBase::setParentName(const string& p) { _parent = p; } +inline void FGAIBase::setName(const string& n) { + _name = n; +} + inline void FGAIBase::setDie( bool die ) { delete_me = die; } inline bool FGAIBase::getDie() { return delete_me; } inline FGAIBase::object_type FGAIBase::getType() { return _otype; } +inline void FGAIBase::calcRangeBearing(double lat, double lon, double lat2, double lon2, + double &range, double &bearing) const +{ + // calculate the bearing and range of the second pos from the first + double az2, distance; + geo_inverse_wgs_84(lat, lon, lat2, lon2, &bearing, &az2, &distance); + range = distance * SG_METER_TO_NM; +} + +inline double FGAIBase::calcRelBearingDeg(double bearing, double heading){ + double angle = bearing - heading; + SG_NORMALIZE_RANGE(angle, -180.0, 180.0); + return angle; +} + +inline double FGAIBase::calcTrueBearingDeg(double bearing, double heading){ + double angle = bearing + heading; + SG_NORMALIZE_RANGE(angle, 0.0, 360.0); + return angle; +} + +inline double FGAIBase::calcRecipBearingDeg(double bearing){ + double angle = bearing - 180; + SG_NORMALIZE_RANGE(angle, 0.0, 360.0); + return angle; +} + +inline void FGAIBase::setMaxSpeed(double m) { + _max_speed = m; +} + #endif // _FG_AIBASE_HXX