Make sure each carrier gets its own valocity.

Modified Files:
	simgear/scene/model/ModelRegistry.cxx
This commit is contained in:
frohlich
2009-03-13 05:45:11 +00:00
committed by Tim Moore
parent 1eade74e5a
commit 42e76477cf

View File

@@ -226,6 +226,28 @@ private:
FilePathList _pathList;
};
// Create new userdata structs in a copied model.
// The BVH trees are shared with the original model, but the velocity fields
// should usually be distinct fields for distinct models.
class UserDataCopyVisitor : public osg::NodeVisitor {
public:
UserDataCopyVisitor() :
osg::NodeVisitor(osg::NodeVisitor::NODE_VISITOR,
osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
{
}
virtual void apply(osg::Node& node)
{
osg::ref_ptr<SGSceneUserData> userData;
userData = SGSceneUserData::getSceneUserData(&node);
if (userData.valid()) {
SGSceneUserData* newUserData = new SGSceneUserData(*userData);
newUserData->setVelocity(0);
node.setUserData(newUserData);
}
node.traverse(*this);
}
};
class SGTexCompressionVisitor : public SGTextureStateAttributeVisitor {
public:
@@ -427,6 +449,11 @@ osg::Node* DefaultCopyPolicy::copy(osg::Node* model, const string& fileName,
TextureUpdateVisitor liveryUpdate(opt->getDatabasePathList());
res->accept(liveryUpdate);
// Copy the userdata fields, still sharing the boundingvolumes,
// but introducing new data for velocities.
UserDataCopyVisitor userDataCopyVisitor;
res->accept(userDataCopyVisitor);
return res;
}