]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIBase.hxx
ITM radio calculations are only considered valid
[flightgear.git] / src / AIModel / AIBase.hxx
index 3a6e2e22d64171c3094c4bd583a0c55dd33acd38..b4782eb4374cc6fdc8b34d062227d35f3b9141cd 100644 (file)
 #define _FG_AIBASE_HXX
 
 #include <string>
-#include <list>
 
 #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>
 
 #include <simgear/math/sg_geodesy.hxx>
 
-
-#include <Scripting/NasalSys.hxx>
 #include <Main/fg_props.hxx>
 
 
 using std::string;
-using std::list;
 
 class SGMaterial;
 class FGAIManager;
 class FGAIFlightPlan;
 class FGFX;
+class FGNasalModelData;
 class FGAIModelData;   // defined below
 
 
@@ -230,9 +228,8 @@ private:
     bool _initialized;
     osg::ref_ptr<osg::LOD> _model; //The 3D model LOD object
 
-    FGAIModelData* _aimodel;
+    osg::ref_ptr<FGAIModelData> _modeldata;
 
-    string _fxpath;
     SGSharedPtr<FGFX>  _fx;
 
 public:
@@ -451,18 +448,26 @@ inline void FGAIBase::setMaxSpeed(double m) {
 
 class FGAIModelData : public simgear::SGModelData {
 public:
-    FGAIModelData(SGPropertyNode *root = 0)
-       : _nasal( new FGNasalModelData(root) ),
-         _path("") {};
-    ~FGAIModelData() {
-        delete _nasal;
-    };
+    FGAIModelData(SGPropertyNode *root = 0);
+    ~FGAIModelData();
+
+    /** osg callback, thread-safe */
     void modelLoaded(const string& path, SGPropertyNode *prop, osg::Node *n);
-    inline string& get_sound_path() { return _path; };
+
+    /** init hook to be called after model is loaded.
+     * Not thread-safe. Call from main thread only. */
+    void init(void);
+
+    bool needInitilization(void) { return _ready && !_initialized;}
+    bool isInitialized(void) { return _initialized;}
+    inline std::string& get_sound_path() { return _fxpath;}
 
 private:
     FGNasalModelData *_nasal;
-    string _path;
+    SGPropertyNode_ptr _prop;
+    std::string _path, _fxpath;
+    bool _ready;
+    bool _initialized;
 };
 
 #endif // _FG_AIBASE_HXX