X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2Fsubmodel.hxx;h=5d01d3d761b534d88d94b3ae71fe982129f67fe3;hb=9d995907db00728da7eac9297ecbab93ed8a7400;hp=7764a51509b5f5babeeb3c5e5cdc5f9645c25987;hpb=3233ce8a44b0d608d19bee809c23a38431d50e45;p=flightgear.git diff --git a/src/AIModel/submodel.hxx b/src/AIModel/submodel.hxx index 7764a5150..5d01d3d76 100644 --- a/src/AIModel/submodel.hxx +++ b/src/AIModel/submodel.hxx @@ -13,29 +13,28 @@ #include #include -#include +#include + #include #include -SG_USING_STD(vector); -SG_USING_STD(string); class FGAIBase; +class FGAIManager; -class FGSubmodelMgr : public SGSubsystem +class FGSubmodelMgr : public SGSubsystem, public SGPropertyChangeListener { public: - typedef struct - { + typedef struct { SGPropertyNode_ptr trigger_node; SGPropertyNode_ptr prop; SGPropertyNode_ptr contents_node; SGPropertyNode_ptr submodel_node; SGPropertyNode_ptr speed_node; - string name; - string model; + std::string name; + std::string model; double speed; bool slaved; bool repeat; @@ -50,20 +49,31 @@ public: double drag_area; double life; double buoyancy; + double randomness; bool wind; bool first_time; double cd; double weight; + double mass; double contents; bool aero_stabilised; int id; bool no_roll; bool serviceable; - } - submodel; - - typedef struct - { + bool random; + bool collision; + bool expiry; + bool impact; + std::string impact_report; + double fuse_range; + std::string submodel; + int sub_id; + bool force_stabilised; + bool ext_force; + std::string force_path; + } submodel; + + typedef struct { double lat; double lon; double alt; @@ -82,8 +92,8 @@ public: double mass; int id; bool no_roll; - } - IC_struct; + int parent_id; + } IC_struct; FGSubmodelMgr(); ~FGSubmodelMgr(); @@ -94,25 +104,20 @@ public: void bind(); void unbind(); void update(double dt); - bool release(submodel* sm, double dt); - void transform(submodel* sm); void updatelat(double lat); private: - typedef vector submodel_vector_type; - typedef submodel_vector_type::const_iterator submodel_vector_iterator; + typedef std::vector submodel_vector_type; + typedef submodel_vector_type::iterator submodel_vector_iterator; submodel_vector_type submodels; - submodel_vector_iterator submodel_iterator; - - float trans[3][3]; - float in[3]; - float out[3]; + submodel_vector_type subsubmodels; + submodel_vector_iterator submodel_iterator, subsubmodel_iterator; - double Rx, Ry, Rz; - double Sx, Sy, Sz; - double Tx, Ty, Tz; + //double Rx, Ry, Rz; + //double Sx, Sy, Sz; + //double Tx, Ty, Tz; float cosRx, sinRx; float cosRy, sinRy; @@ -126,10 +131,29 @@ private: double x_offset, y_offset, z_offset; double pitch_offset, yaw_offset; + double _parent_lat; + double _parent_lon; + double _parent_elev; + double _parent_hdg; + double _parent_pitch; + double _parent_roll; + double _parent_speed; + //double _parent_ID; + + double _x_offset; + double _y_offset; + double _z_offset; + + static const double lbs_to_slugs; //conversion factor double contrail_altitude; + bool _impact; + bool _hit; + bool _expiry; + bool _found_sub; + SGPropertyNode_ptr _serviceable_node; SGPropertyNode_ptr _user_lat_node; SGPropertyNode_ptr _user_lon_node; @@ -147,20 +171,37 @@ private: SGPropertyNode_ptr _user_speed_north_fps_node; SGPropertyNode_ptr _contrail_altitude_node; SGPropertyNode_ptr _contrail_trigger; + SGPropertyNode_ptr _count_node; + SGPropertyNode_ptr _trigger_node; + SGPropertyNode_ptr props; + SGPropertyNode_ptr _model_added_node; + SGPropertyNode_ptr _path_node; + SGPropertyNode_ptr _selected_ac; - FGAIManager* ai; IC_struct IC; + + /** + * Helper to retrieve the AI manager, if it currently exists + */ + FGAIManager* aiManager(); + + void loadAI(); + void loadSubmodels(); + void setData(int id, const std::string& path, bool serviceable); + void setSubData(int id, const std::string& path, bool serviceable); + void valueChanged (SGPropertyNode *); + void transform(submodel *); + void setParentNode(int parent_id); - // A list of pointers to AI objects - typedef list > sm_list_type; - typedef sm_list_type::iterator sm_list_iterator; - typedef sm_list_type::const_iterator sm_list_const_iterator; + bool release(submodel *, double dt); - sm_list_type sm_list; - void loadAI(); - void loadSubmodels(); - double getRange(double lat, double lon, double lat2, double lon2) const; + int _count; + + SGGeod userpos; + SGGeod offsetpos; + SGVec3d getCartOffsetPos() const; + void setOffsetPos(); };