forked from teamnwah/openmw-tes3coop
Animation: do not assume the object root is a Group
This commit is contained in:
parent
0731595c2b
commit
0a723ab075
2 changed files with 21 additions and 14 deletions
|
@ -975,20 +975,27 @@ namespace MWRender
|
||||||
mAccumCtrl = NULL;
|
mAccumCtrl = NULL;
|
||||||
|
|
||||||
if (!forceskeleton)
|
if (!forceskeleton)
|
||||||
mObjectRoot = mResourceSystem->getSceneManager()->createInstance(model, mInsert);
|
{
|
||||||
|
osg::ref_ptr<osg::Node> created = mResourceSystem->getSceneManager()->createInstance(model, mInsert);
|
||||||
|
mObjectRoot = created->asGroup();
|
||||||
|
if (!mObjectRoot)
|
||||||
|
{
|
||||||
|
mObjectRoot = new osg::Group;
|
||||||
|
mObjectRoot->addChild(created);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
osg::ref_ptr<osg::Node> newObjectRoot = mResourceSystem->getSceneManager()->createInstance(model);
|
osg::ref_ptr<osg::Node> created = mResourceSystem->getSceneManager()->createInstance(model);
|
||||||
mSkeleton = dynamic_cast<SceneUtil::Skeleton*>(newObjectRoot.get());
|
osg::ref_ptr<SceneUtil::Skeleton> skel = dynamic_cast<SceneUtil::Skeleton*>(created.get());
|
||||||
if (!mSkeleton)
|
if (!skel)
|
||||||
{
|
{
|
||||||
osg::ref_ptr<SceneUtil::Skeleton> skel = new SceneUtil::Skeleton;
|
skel = new SceneUtil::Skeleton;
|
||||||
mSkeleton = skel.get();
|
skel->addChild(created);
|
||||||
skel->addChild(newObjectRoot);
|
|
||||||
newObjectRoot = skel;
|
|
||||||
}
|
}
|
||||||
mInsert->addChild(newObjectRoot);
|
mSkeleton = skel.get();
|
||||||
mObjectRoot = newObjectRoot;
|
mObjectRoot = skel;
|
||||||
|
mInsert->addChild(mObjectRoot);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (previousStateset)
|
if (previousStateset)
|
||||||
|
@ -1017,17 +1024,17 @@ namespace MWRender
|
||||||
|
|
||||||
osg::Group* Animation::getObjectRoot()
|
osg::Group* Animation::getObjectRoot()
|
||||||
{
|
{
|
||||||
return static_cast<osg::Group*>(mObjectRoot.get());
|
return mObjectRoot.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::Group* Animation::getOrCreateObjectRoot()
|
osg::Group* Animation::getOrCreateObjectRoot()
|
||||||
{
|
{
|
||||||
if (mObjectRoot)
|
if (mObjectRoot)
|
||||||
return static_cast<osg::Group*>(mObjectRoot.get());
|
return mObjectRoot.get();
|
||||||
|
|
||||||
mObjectRoot = new osg::Group;
|
mObjectRoot = new osg::Group;
|
||||||
mInsert->addChild(mObjectRoot);
|
mInsert->addChild(mObjectRoot);
|
||||||
return static_cast<osg::Group*>(mObjectRoot.get());
|
return mObjectRoot.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Animation::addGlow(osg::ref_ptr<osg::Node> node, osg::Vec4f glowColor)
|
void Animation::addGlow(osg::ref_ptr<osg::Node> node, osg::Vec4f glowColor)
|
||||||
|
|
|
@ -208,7 +208,7 @@ protected:
|
||||||
|
|
||||||
osg::ref_ptr<osg::Group> mInsert;
|
osg::ref_ptr<osg::Group> mInsert;
|
||||||
|
|
||||||
osg::ref_ptr<osg::Node> mObjectRoot;
|
osg::ref_ptr<osg::Group> mObjectRoot;
|
||||||
SceneUtil::Skeleton* mSkeleton;
|
SceneUtil::Skeleton* mSkeleton;
|
||||||
|
|
||||||
// The node expected to accumulate movement during movement animations.
|
// The node expected to accumulate movement during movement animations.
|
||||||
|
|
Loading…
Reference in a new issue