X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIManager.hxx;h=5c951912e645e824a4395428c45bec5512cb6cc5;hb=f89ad9baf0f72d613c755f4fb3704f57ff7ef973;hp=4b6d4ef085fc2e05151877772dffb1d91f0e2d20;hpb=b0f9d24f9dbab9eb2de07c48e8bfe48f3851d7e4;p=flightgear.git diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 4b6d4ef08..5c951912e 100644 --- a/src/AIModel/AIManager.hxx +++ b/src/AIModel/AIManager.hxx @@ -27,6 +27,7 @@ #include #include +#include #include
@@ -36,31 +37,14 @@ #include #include -SG_USING_STD(list); -SG_USING_STD(vector); - -class FGModelID -{ -private: - osg::ref_ptr model; - string path; -public: - FGModelID(const string& pth, osg::Node* mdl) { path =pth; model=mdl;}; - osg::Node* const getModelId() const { return model.get();}; - const string & getPath() const { return path;}; - int getNumRefs() const { return model->referenceCount(); }; -}; - -typedef vector ModelVec; -typedef vector::iterator ModelVecIterator; +using std::list; class FGAIThermal; - class FGAIManager : public SGSubsystem { -private: +public: // A list of pointers to AI objects typedef list > ai_list_type; @@ -68,22 +52,26 @@ private: typedef ai_list_type::const_iterator ai_list_const_iterator; ai_list_type ai_list; - ModelVec loadedModels; -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(SGSharedPtr model); + void updateLOD(SGPropertyNode* node); + void attach(FGAIBase *model); void destroyObject( int ID ); + const FGAIBase *calcCollision(double alt, double lat, double lon, double fuse_range); inline double get_user_latitude() const { return user_latitude; } inline double get_user_longitude() const { return user_longitude; } @@ -94,18 +82,17 @@ public: 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; } + inline double get_user_agl() const { return user_altitude_agl; } int getNumAiObjects(void) const; void processScenario( const string &filename ); - osg::Node* getModel(const string& path); - void setModel(const string& path, osg::Node *model); - - static SGPropertyNode_ptr loadScenarioFile(const std::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); + static bool getStartPosition(const string& id, const string& pid, + SGGeod& geodPos, double& hdng, SGVec3d& uvw); private: @@ -113,30 +100,36 @@ private: int mNumAiTypeModels[FGAIBase::MAX_OBJECTS]; int mNumAiModels; + double calcRange(double lat, double lon, double lat2, double lon2)const; + SGPropertyNode_ptr root; - SGPropertyNode_ptr wind_from_down_node; + SGPropertyNode_ptr thermal_lift_node; SGPropertyNode_ptr user_latitude_node; SGPropertyNode_ptr user_longitude_node; SGPropertyNode_ptr user_altitude_node; + SGPropertyNode_ptr user_altitude_agl_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 ; - - string scenario_filename; + SGPropertyNode_ptr wind_from_east_node; + SGPropertyNode_ptr wind_from_north_node; double user_latitude; double user_longitude; double user_altitude; + double user_altitude_agl; double user_heading; double user_pitch; double user_yaw; + double user_roll; double user_speed; + double user_agl; double wind_from_east; double wind_from_north; double _dt; + void fetchUserState( void ); // used by thermals @@ -144,6 +137,8 @@ private: double strength; void processThermal( FGAIThermal* thermal ); + SGPropertyChangeCallback cb_ai_bare; + SGPropertyChangeCallback cb_ai_detailed; }; #endif // _FG_AIMANAGER_HXX