#include <vector>
#include <simgear/compiler.h> // for SG_USING_STD
-
-#include <Main/fgfs.hxx> // for FGSubsystem
+#include <simgear/structure/subsystem_mgr.hxx>
SG_USING_STD(vector);
// Don't pull in headers, since we don't need them here.
-class ssgSelector;
class SGPropertyNode;
-class FGModelPlacement;
+class SGModelPlacement;
/**
* Manage a list of user-specified models.
*/
-class FGModelMgr : public FGSubsystem
+class FGModelMgr : public SGSubsystem
{
public:
* The model manager uses the property nodes to update the model's
* position and orientation; any of the property node pointers may
* be set to zero to avoid update. Normally, a caller should
- * load the model by instantiating FGModelPlacement with the path
+ * load the model by instantiating SGModelPlacement with the path
* to the model or its XML wrapper, then assign any relevant
* property node pointers.
*
- * @see FGModelPlacement
+ * @see SGModelPlacement
* @see FGModelMgr#add_instance
*/
struct Instance
{
Instance ();
virtual ~Instance ();
- FGModelPlacement * model;
- SGPropertyNode * lon_deg_node;
- SGPropertyNode * lat_deg_node;
- SGPropertyNode * elev_ft_node;
- SGPropertyNode * roll_deg_node;
- SGPropertyNode * pitch_deg_node;
- SGPropertyNode * heading_deg_node;
+ SGModelPlacement * model;
+ SGPropertyNode_ptr node;
+ SGPropertyNode_ptr lon_deg_node;
+ SGPropertyNode_ptr lat_deg_node;
+ SGPropertyNode_ptr elev_ft_node;
+ SGPropertyNode_ptr roll_deg_node;
+ SGPropertyNode_ptr pitch_deg_node;
+ SGPropertyNode_ptr heading_deg_node;
+ bool shadow;
};
FGModelMgr ();
virtual void unbind ();
virtual void update (double dt);
+ virtual void add_model (SGPropertyNode * node);
+
/**
* Add an instance of a dynamic model to the manager.
*
*/
virtual void remove_instance (Instance * instance);
- virtual void draw ();
private:
+ /**
+ * Listener class that adds models at runtime.
+ */
+ class Listener : public SGPropertyChangeListener
+ {
+ public:
+ Listener(FGModelMgr *mgr) : _mgr(mgr) {}
+ virtual void childAdded (SGPropertyNode * parent, SGPropertyNode * child);
+ virtual void childRemoved (SGPropertyNode * parent, SGPropertyNode * child);
- vector<Instance *> _instances;
+ private:
+ FGModelMgr * _mgr;
+ };
- ssgSelector * _selector;
+ SGPropertyNode_ptr _models;
+ Listener * _listener;
+
+ vector<Instance *> _instances;
};