#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
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:
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