X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIBase.hxx;h=70e7c97184c834ab0ebbea4ad8349cbf52661647;hb=d70e26d87b5294315ca6d67b8c11fabe51abbc4b;hp=68127fe4de3a23b18c1078fc2f61d1728bb9189e;hpb=72c5a314e6daa5052165310a600c4a9a4c20e43f;p=flightgear.git diff --git a/src/AIModel/AIBase.hxx b/src/AIModel/AIBase.hxx index 68127fe4d..70e7c9718 100644 --- a/src/AIModel/AIBase.hxx +++ b/src/AIModel/AIBase.hxx @@ -1,7 +1,7 @@ // FGAIBase.hxx - abstract base class for AI objects // Written by David Culp, started Nov 2003, based on // David Luff's FGAIEntity class. -// - davidculp2@comcast.net +// - davidculp2@comcast.net // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -21,24 +21,32 @@ #define _FG_AIBASE_HXX #include -#include #include -#include #include +#include #include #include #include +#include +#include + +#include #include
using std::string; -using std::list; -class SGMaterial; +namespace simgear { +class BVHMaterial; +} class FGAIManager; class FGAIFlightPlan; +class FGFX; +class FGNasalModelDataProxy; +class FGAIModelData; // defined below + class FGAIBase : public SGReferenced { @@ -46,9 +54,9 @@ public: enum object_type { otNull = 0, otAircraft, otShip, otCarrier, otBallistic, otRocket, otStorm, otThermal, otStatic, otWingman, otGroundVehicle, otEscort, otMultiplayer, - MAX_OBJECTS }; // Needs to be last!!! + MAX_OBJECTS }; // Needs to be last!!! - FGAIBase(object_type ot); + FGAIBase(object_type ot, bool enableHot); virtual ~FGAIBase(); virtual void readFromScenario(SGPropertyNode* scFileNode); @@ -60,12 +68,14 @@ public: virtual void unbind(); virtual void reinit() {} + void updateLOD(); void setManager(FGAIManager* mgr, SGPropertyNode* p); void setPath( const char* model ); void setSMPath( const string& p ); 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 ); @@ -85,6 +95,17 @@ public: void setImpactLat( double lat ); 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; int _getSubID() const; @@ -95,7 +116,9 @@ public: SGVec3d getCartPos() const; bool getGroundElevationM(const SGGeod& pos, double& elev, - const SGMaterial** material) const; + const simgear::BVHMaterial** material) const; + + double _elevation_m; double _getCartPosX() const; double _getCartPosY() const; @@ -109,32 +132,43 @@ public: double _roll_offset; double _yaw_offset; + double _max_speed; + string _path; string _callsign; string _submodel; - string _name; - - SGGeod userpos; - + std::string _name; + string _parent; protected: - + /** + * Tied-properties helper, record nodes which are tied for easy un-tie-ing + */ + template + void tie(const char* aRelPath, const SGRawValue& aRawValue) + { + _tiedProperties.Tie(props->getNode(aRelPath, true), aRawValue); + } + + simgear::TiedPropertyList _tiedProperties; + SGPropertyNode_ptr _selected_ac; SGPropertyNode_ptr props; SGPropertyNode_ptr trigger_node; SGPropertyNode_ptr model_removed; // where to report model removal FGAIManager* manager; // these describe the model's actual state - SGGeod pos; // WGS84 lat & lon in degrees, elev above sea-level in meters - double hdg; // True heading in degrees - double roll; // degrees, left is negative - double pitch; // degrees, nose-down is negative + SGGeod pos; // WGS84 lat & lon in degrees, elev above sea-level in meters + double hdg; // True heading in degrees + double roll; // degrees, left is negative + double pitch; // degrees, nose-down is negative double speed; // knots true airspeed double altitude_ft; // feet above sea level double vs; // vertical speed, feet per minute 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; @@ -159,16 +193,16 @@ protected: double x_shift; // value used by radar display instrument double y_shift; // value used by radar display instrument double rotation; // value used by radar display instrument - double ht_diff; // value used by radar display instrument + double ht_diff; // value used by radar display instrument - string model_path; //Path to the 3D model - osg::ref_ptr model; //The 3D model object + string model_path; //Path to the 3D model SGModelPlacement aip; bool delete_me; bool invisible; bool no_roll; bool serviceable; + bool _installed; int _subID; double life; @@ -191,12 +225,20 @@ protected: void CalculateMach(); double UpdateRadar(FGAIManager* manager); + void removeModel(); + void removeSoundFx(); + static int _newAIModelID(); private: int _refID; object_type _otype; bool _initialized; + osg::ref_ptr _model; //The 3D model LOD object + + osg::ref_ptr _modeldata; + + SGSharedPtr _fx; public: object_type getType(); @@ -210,7 +252,8 @@ public: void _setLongitude( double longitude ); void _setLatitude ( double latitude ); void _setSubID( int s ); - void _setUserPos(); + + double _getAltitudeAGL(SGGeod inpos, double start); double _getVS_fps() const; double _getAltitude() const; @@ -273,10 +316,9 @@ public: inline double _getRange() { return range; }; inline double _getBearing() { return bearing; }; - virtual osg::Node* load3DModel(const string &path, - SGPropertyNode *prop_root); - static bool _isNight(); + + string & getCallSign(); }; inline void FGAIBase::setManager(FGAIManager* mgr, SGPropertyNode* p) { @@ -289,7 +331,6 @@ inline void FGAIBase::setPath(const char* model ) { } inline void FGAIBase::setSMPath(const string& p) { - cout << "setSMPath " << p <