mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-04 03:40:14 +00:00
Check for a Geometry node when attaching bodyparts (Fixes #3957)
This commit is contained in:
parent
bc82c6a35d
commit
3fc8634206
@ -1130,6 +1130,8 @@ namespace NifOsg
|
|||||||
triShapeToGeometry(triShape, geometry, parentNode, composite, boundTextures, animflags);
|
triShapeToGeometry(triShape, geometry, parentNode, composite, boundTextures, animflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geometry->setName(triShape->name);
|
||||||
|
|
||||||
if (geometry->getDataVariance() == osg::Object::DYNAMIC)
|
if (geometry->getDataVariance() == osg::Object::DYNAMIC)
|
||||||
{
|
{
|
||||||
// Add a copy, we will alternate between the two copies every other frame using the FrameSwitch
|
// Add a copy, we will alternate between the two copies every other frame using the FrameSwitch
|
||||||
@ -1219,6 +1221,7 @@ namespace NifOsg
|
|||||||
|
|
||||||
osg::ref_ptr<SceneUtil::RigGeometry> rig(new SceneUtil::RigGeometry);
|
osg::ref_ptr<SceneUtil::RigGeometry> rig(new SceneUtil::RigGeometry);
|
||||||
rig->setSourceGeometry(geometry);
|
rig->setSourceGeometry(geometry);
|
||||||
|
rig->setName(triShape->name);
|
||||||
|
|
||||||
const Nif::NiSkinInstance *skin = triShape->skin.getPtr();
|
const Nif::NiSkinInstance *skin = triShape->skin.getPtr();
|
||||||
|
|
||||||
|
@ -32,29 +32,29 @@ namespace SceneUtil
|
|||||||
|
|
||||||
virtual void apply(osg::MatrixTransform& node)
|
virtual void apply(osg::MatrixTransform& node)
|
||||||
{
|
{
|
||||||
applyNode(node);
|
traverse(node);
|
||||||
}
|
|
||||||
virtual void apply(osg::Geometry& node)
|
|
||||||
{
|
|
||||||
applyNode(node);
|
|
||||||
}
|
}
|
||||||
virtual void apply(osg::Node& node)
|
virtual void apply(osg::Node& node)
|
||||||
{
|
{
|
||||||
applyNode(node);
|
traverse(node);
|
||||||
}
|
}
|
||||||
virtual void apply(osg::Group& node)
|
virtual void apply(osg::Group& node)
|
||||||
{
|
{
|
||||||
applyNode(node);
|
traverse(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyNode(osg::Node& node)
|
virtual void apply(osg::Geometry& geom)
|
||||||
{
|
{
|
||||||
std::string lowerName = Misc::StringUtils::lowerCase(node.getName());
|
std::string lowerName = Misc::StringUtils::lowerCase(geom.getName());
|
||||||
if ((lowerName.size() >= mFilter.size() && lowerName.compare(0, mFilter.size(), mFilter) == 0)
|
if ((lowerName.size() >= mFilter.size() && lowerName.compare(0, mFilter.size(), mFilter) == 0)
|
||||||
|| (lowerName.size() >= mFilter2.size() && lowerName.compare(0, mFilter2.size(), mFilter2) == 0))
|
|| (lowerName.size() >= mFilter2.size() && lowerName.compare(0, mFilter2.size(), mFilter2) == 0))
|
||||||
mToCopy.push_back(&node);
|
{
|
||||||
else
|
osg::Node* node = &geom;
|
||||||
traverse(node);
|
while (node && node->getNumParents() && !node->getStateSet())
|
||||||
|
node = node->getParent(0);
|
||||||
|
if (node)
|
||||||
|
mToCopy.push_back(node);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void doCopy()
|
void doCopy()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user