X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIManager.hxx;h=0ed6c9fcbf81992f938c36d74e286ef7a37bb86b;hb=4bfd1722df24f5be89459b25010e5d7352720a7b;hp=032cc01001233973f577d83aa094827575e2575c;hpb=cd0c447b43bf9f7ea2e11a1e8914efc3b0516158;p=flightgear.git diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 032cc0100..0ed6c9fcb 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 // @@ -23,24 +23,38 @@ #ifndef _FG_AIMANAGER_HXX #define _FG_AIMANAGER_HXX +#include + #include +#include +#include + #include
-#include -#include "AIBase.hxx" + +#include +#include + +#include +#include SG_USING_STD(list); +SG_USING_STD(vector); + +class FGModelID +{ +private: + ssgSharedPtr model; + string path; +public: + FGModelID(const string& pth, ssgBranch * mdl) { path =pth; model=mdl;}; + ssgBranch * const getModelId() const { return model;}; + const string & getPath() const { return path;}; +}; + +typedef vector ModelVec; +typedef vector::const_iterator ModelVecIterator; - struct PERF_STRUCT { - double accel; - double decel; - double climb_rate; - double descent_rate; - double takeoff_speed; - double climb_speed; - double cruise_speed; - double descent_speed; - double land_speed; - }; +class FGAIThermal; class FGAIManager : public SGSubsystem @@ -49,31 +63,86 @@ class FGAIManager : public SGSubsystem private: // 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; + ModelVec loadedModels; public: - enum object_type { otAircraft, otShip, otBallistic, otRocket }; - FGAIManager(); ~FGAIManager(); void init(); + void reinit(); void bind(); void unbind(); void update(double dt); + void attach(SGSharedPtr model); + + void destroyObject( int ID ); + + 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 int getNum( FGAIBase::object_type ot ) const { + return (0 < ot && ot < FGAIBase::MAX_OBJECTS) ? numObjects[ot] : numObjects[0]; + } + + void processScenario( const string &filename ); + + ssgBranch * getModel(const string& path) const; + void setModel(const string& path, ssgBranch *model); + + static SGPropertyNode_ptr loadScenarioFile(const std::string& filename); + + static bool getStartPosition(const string& id, const string& pid, + Point3D& geodPos, double& hdng, sgdVec3 uvw); private: - bool initDone; + bool enabled; + int numObjects[FGAIBase::MAX_OBJECTS]; + SGPropertyNode* root; + SGPropertyNode* wind_from_down_node; + SGPropertyNode* user_latitude_node; + SGPropertyNode* user_longitude_node; + SGPropertyNode* user_altitude_node; + SGPropertyNode* user_heading_node; + SGPropertyNode* user_pitch_node; + SGPropertyNode* user_yaw_node; + SGPropertyNode* user_speed_node; + SGPropertyNode* wind_from_east_node ; + SGPropertyNode* wind_from_north_node ; + + string scenario_filename; + + double user_latitude; + double user_longitude; + double user_altitude; + double user_heading; + double user_pitch; + double user_yaw; + double user_speed; + double wind_from_east; + double wind_from_north; + double _dt; + void fetchUserState( void ); + + // used by thermals + double range_nearest; + double strength; + void processThermal( FGAIThermal* thermal ); };