X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIManager.hxx;h=8f582801afee5880e9060b7992b3ff7e6ac78929;hb=8112ff5842d24ac12dbeeaaa02b981d24ebbf339;hp=66c89a2f4ddece343ac99392f5ebd4ee24d0e57a;hpb=b24dbb3f8b0ebb53321a64be2f86dbb5f244833c;p=flightgear.git diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 66c89a2f4..8f582801a 100644 --- a/src/AIModel/AIManager.hxx +++ b/src/AIModel/AIManager.hxx @@ -18,7 +18,7 @@ // // 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 @@ -26,71 +26,50 @@ #include #include +#include #include
#include -#include #include #include #include -SG_USING_STD(list); -SG_USING_STD(vector); - -class FGModelID -{ -private: - ssgBranch * 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; +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; - 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* createBallistic( FGAIModelEntity *entity ); - void* createAircraft( FGAIModelEntity *entity, FGAISchedule *ref=0 ); - void* createThermal( FGAIModelEntity *entity ); - void* createStorm( FGAIModelEntity *entity ); - void* createShip( FGAIModelEntity *entity ); - void* createCarrier( FGAIModelEntity *entity ); - void* createStatic( FGAIModelEntity *entity ); + 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; } @@ -101,37 +80,37 @@ 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 int getNum( FGAIBase::object_type ot ) const { - return (0 < ot && ot < FGAIBase::MAX_OBJECTS) ? numObjects[ot] : numObjects[0]; - } + int getNumAiObjects(void) const; 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); + SGGeod& geodPos, double& hdng, SGVec3d& 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; + 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; @@ -139,11 +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