]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIBase.hxx
Move some code from the header file to the source file.
[flightgear.git] / src / AIModel / AIBase.hxx
index 2f83623310c89f178ba42ff517f65920fcd7fd5b..f09a96e00fee8cbe8cf68afec0a40cee8cbc1fad 100644 (file)
@@ -26,6 +26,7 @@
 #include <simgear/constants.h>
 #include <simgear/math/SGMath.hxx>
 #include <simgear/scene/model/placement.hxx>
+#include <simgear/scene/model/modellib.hxx>
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/structure/SGSharedPtr.hxx>
 #include <simgear/structure/SGReferenced.hxx>
@@ -33,7 +34,6 @@
 
 #include <simgear/math/sg_geodesy.hxx>
 
-
 #include <Main/fg_props.hxx>
 
 
@@ -43,6 +43,10 @@ using std::list;
 class SGMaterial;
 class FGAIManager;
 class FGAIFlightPlan;
+class FGFX;
+class FGNasalModelData;
+class FGAIModelData;   // defined below
+
 
 class FGAIBase : public SGReferenced {
 
@@ -52,7 +56,7 @@ public:
         otEscort, otMultiplayer,
         MAX_OBJECTS }; // Needs to be last!!!
 
-    FGAIBase(object_type ot);
+    FGAIBase(object_type ot, bool enableHot);
     virtual ~FGAIBase();
 
     virtual void readFromScenario(SGPropertyNode* scFileNode);
@@ -64,6 +68,7 @@ public:
     virtual void unbind();
     virtual void reinit() {}
 
+    void updateLOD();
     void setManager(FGAIManager* mgr, SGPropertyNode* p);
     void setPath( const char* model );
     void setSMPath( const string& p );
@@ -133,7 +138,7 @@ public:
     string _path;
     string _callsign;
     string _submodel;
-    string _name;
+    std::string _name;
     string _parent;
 
     SGGeod userpos;
@@ -186,7 +191,6 @@ protected:
     double ht_diff;             // value used by radar display instrument
 
     string model_path;    //Path to the 3D model
-    osg::ref_ptr<osg::Node> model; //The 3D model object
     SGModelPlacement aip;
 
     bool delete_me;
@@ -216,12 +220,20 @@ protected:
     void CalculateMach();
     double UpdateRadar(FGAIManager* manager);
 
+    void removeModel();
+
     static int _newAIModelID();
 
 private:
     int _refID;
     object_type _otype;
     bool _initialized;
+    osg::ref_ptr<osg::LOD> _model; //The 3D model LOD object
+
+    FGAIModelData* _aimodel;
+
+    string _fxpath;
+    SGSharedPtr<FGFX>  _fx;
 
 public:
     object_type getType();
@@ -300,10 +312,9 @@ public:
     inline double _getRange() { return range; };
     inline double _getBearing() { return bearing; };
 
-    virtual osg::Node* load3DModel(const string &path,
-        SGPropertyNode *prop_root);
-
     static bool _isNight();
+
+     string & getCallSign();
 };
 
 inline void FGAIBase::setManager(FGAIManager* mgr, SGPropertyNode* p) {
@@ -364,6 +375,10 @@ inline void FGAIBase::setLatitude ( double latitude ) {
 inline void FGAIBase::setCallSign(const string& s) {
     _callsign = s;
 }
+inline string& FGAIBase::getCallSign() {
+    return _callsign;
+}
+
 inline void FGAIBase::setXoffset(double x) {
     _x_offset = x;
 }
@@ -433,4 +448,17 @@ inline void FGAIBase::setMaxSpeed(double m) {
     _max_speed = m;
 }
 
+
+class FGAIModelData : public simgear::SGModelData {
+public:
+    FGAIModelData(SGPropertyNode *root = 0);
+    ~FGAIModelData();
+    void modelLoaded(const string& path, SGPropertyNode *prop, osg::Node *n);
+    inline string& get_sound_path() { return _path; };
+
+private:
+    FGNasalModelData *_nasal;
+    string _path;
+};
+
 #endif // _FG_AIBASE_HXX