globals->get_scenery()->get_scene_graph()->addKid(model->getSceneGraph());
// Save this instance for updating
- _instances.push_back(instance);
+ add_instance(instance);
}
}
}
}
+void
+FGModelMgr::add_instance (Instance * instance)
+{
+ _instances.push_back(instance);
+}
+
+void
+FGModelMgr::remove_instance (Instance * instance)
+{
+ _instances.erase(find(_instances.begin(), _instances.end(), instance));
+ delete instance;
+}
+
void
FGModelMgr::draw ()
{
class FGModelMgr : public FGSubsystem
{
public:
- FGModelMgr ();
- virtual ~FGModelMgr ();
-
- virtual void init ();
- virtual void bind ();
- virtual void unbind ();
- virtual void update (double dt);
-
- virtual void draw ();
-
-private:
+ /**
+ * A dynamically-placed model using properties.
+ *
+ * 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
+ * to the model or its XML wrapper, then assign any relevant
+ * property node pointers.
+ *
+ * @see FGModelPlacement
+ * @see FGModelMgr#add_instance
+ */
struct Instance
{
Instance ();
SGPropertyNode * heading_deg_node;
};
+ FGModelMgr ();
+ virtual ~FGModelMgr ();
+
+ virtual void init ();
+ virtual void bind ();
+ virtual void unbind ();
+ virtual void update (double dt);
+
+ /**
+ * Add an instance of a dynamic model to the manager.
+ *
+ * NOTE: pointer ownership is transferred to the model manager!
+ *
+ * The caller is responsible for setting up the Instance structure
+ * as required. The model manager will continuously update the
+ * location and orientation of the model based on the current
+ * values of the properties.
+ */
+ virtual void add_instance (Instance * instance);
+
+
+ /**
+ * Remove an instance of a dynamic model from the manager.
+ *
+ * NOTE: the manager will delete the instance as well.
+ */
+ virtual void remove_instance (Instance * instance);
+
+ virtual void draw ();
+
+private:
+
vector<Instance *> _instances;
ssgSelector * _selector;