X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIManager.hxx;h=8f582801afee5880e9060b7992b3ff7e6ac78929;hb=0bce31ae9a80c571b9126427c093b8dc3d3f6820;hp=8db9d6f5f4723df835fbef708013e360b320fe06;hpb=af284e4bb922a3782c9bd9d947895e787e41adbf;p=flightgear.git diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 8db9d6f5f..8f582801a 100644 --- a/src/AIModel/AIManager.hxx +++ b/src/AIModel/AIManager.hxx @@ -1,4 +1,4 @@ -// AIManager.hxx - experimental! - David Culp - based on: +// AIManager.hxx - David Culp - based on: // AIMgr.hxx - definition of FGAIMgr // - a global management class for FlightGear generated AI traffic // @@ -18,122 +18,99 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #ifndef _FG_AIMANAGER_HXX #define _FG_AIMANAGER_HXX +#include + #include +#include + #include
-#include -#include "AIBase.hxx" -#include "AIScenario.hxx" -#include "AIFlightPlan.hxx" -SG_USING_STD(list); -class FGAIThermal; +#include +#include + +#include +#include +using std::list; + +class FGAIThermal; class FGAIManager : public SGSubsystem { -private: +public: // A list of pointers to AI objects - typedef list ai_list_type; + typedef list > ai_list_type; typedef ai_list_type::iterator ai_list_iterator; typedef ai_list_type::const_iterator ai_list_const_iterator; - // Everything put in this list should be created dynamically - // on the heap and ***DELETED WHEN REMOVED!!!!!*** ai_list_type ai_list; - ai_list_iterator ai_list_itr; - // array of already-assigned ID's - typedef vector id_vector_type; - id_vector_type ids; - id_vector_type::iterator id_itr; - -public: + inline const ai_list_type& get_ai_list() const { + SG_LOG(SG_GENERAL, SG_DEBUG, "AI Manager: AI model return list size " << ai_list.size()); + return ai_list; + } FGAIManager(); ~FGAIManager(); void init(); + void postinit(); + void reinit(); void bind(); void unbind(); void update(double dt); + void attach(FGAIBase *model); - int assignID(); - void freeID(int ID); - - int createAircraft( string model_class, // see FGAIAircraft.hxx for possible classes - string path, // path to exterior model - double latitude, // in degrees -90 to 90 - double longitude, // in degrees -180 to 180 - double altitude, // in feet - double heading, // true heading in degrees - double speed, // in knots true airspeed (KTAS) - double roll = 0 ); // in degrees - - int createAircraft( string model_class, // see FGAIAircraft.hxx for possible classes - string path, // path to exterior model - FGAIFlightPlan *flightplan ); - - int createShip( string path, // path to exterior model - double latitude, // in degrees -90 to 90 - double longitude, // in degrees -180 to 180 - double altitude, // in feet (ex. for a lake!) - double heading, // true heading in degrees - double speed, // in knots true - double rudder ); // in degrees (right is positive)(0 to 5 works best) - - int createShip( string path, // path to exterior model - FGAIFlightPlan *flightplan ); - - int createBallistic( string path, // path to exterior model - double latitude, // in degrees -90 to 90 - double longitude, // in degrees -180 to 180 - double altitude, // in feet - double azimuth, // in degrees (same as heading) - double elevation, // in degrees (same as pitch) - double speed, // in feet per second - double eda, // equivalent drag area, ft2 - double life ); // life span in seconds - - int createStorm( string path, // path to exterior model - double latitude, // in degrees -90 to 90 - double longitude, // in degrees -180 to 180 - double altitude, // in feet - double heading, // true heading in degrees - double speed ); // in knots true airspeed (KTAS) - - int createThermal( double latitude, // in degrees -90 to 90 - double longitude, // in degrees -180 to 180 - double strength, // in feet per second - double diameter ); // in feet - void destroyObject( int ID ); + const FGAIBase *calcCollision(double alt, double lat, double lon, double fuse_range); - inline double get_user_latitude() { return user_latitude; } - inline double get_user_longitude() { return user_longitude; } - inline double get_user_altitude() { return user_altitude; } - inline double get_user_heading() { return user_heading; } - inline double get_user_pitch() { return user_pitch; } - inline double get_user_yaw() { return user_yaw; } - inline double get_user_speed() {return user_speed; } + inline double get_user_latitude() const { return user_latitude; } + inline double get_user_longitude() const { return user_longitude; } + inline double get_user_altitude() const { return user_altitude; } + inline double get_user_heading() const { return user_heading; } + inline double get_user_pitch() const { return user_pitch; } + inline double get_user_yaw() const { return user_yaw; } + inline double get_user_speed() const {return user_speed; } + inline double get_wind_from_east() const {return wind_from_east; } + inline double get_wind_from_north() const {return wind_from_north; } + inline double get_user_roll() const { return user_roll; } - void processScenario( string filename ); - int getNum( FGAIBase::object_type ot); + int getNumAiObjects(void) const; + + void processScenario( const string &filename ); + + static SGPropertyNode_ptr loadScenarioFile(const std::string& filename); + + static bool getStartPosition(const string& id, const string& pid, + SGGeod& geodPos, double& hdng, SGVec3d& uvw); private: - bool initDone; bool enabled; - int numObjects; - SGPropertyNode* root; - SGPropertyNode* wind_from_down; - string scenario_filename; + int mNumAiTypeModels[FGAIBase::MAX_OBJECTS]; + int mNumAiModels; + + double calcRange(double lat, double lon, double lat2, double lon2)const; + + SGPropertyNode_ptr root; + SGPropertyNode_ptr thermal_lift_node; + SGPropertyNode_ptr user_latitude_node; + SGPropertyNode_ptr user_longitude_node; + SGPropertyNode_ptr user_altitude_node; + SGPropertyNode_ptr user_heading_node; + SGPropertyNode_ptr user_pitch_node; + SGPropertyNode_ptr user_yaw_node; + SGPropertyNode_ptr user_roll_node; + SGPropertyNode_ptr user_speed_node; + SGPropertyNode_ptr wind_from_east_node; + SGPropertyNode_ptr wind_from_north_node; double user_latitude; double user_longitude; @@ -141,9 +118,12 @@ private: double user_heading; double user_pitch; double user_yaw; + double user_roll; double user_speed; + double wind_from_east; + double wind_from_north; double _dt; - int dt_count; + void fetchUserState( void ); // used by thermals