Re-enable non-biped creature headtracking (bug #5424)

pull/2865/head
Capostrophic 5 years ago
parent a68a4338a0
commit 904b245d30

@ -16,6 +16,7 @@
Bug #5400: Editor: Verifier checks race of non-skin bodyparts Bug #5400: Editor: Verifier checks race of non-skin bodyparts
Bug #5415: Environment maps in ebony cuirass and HiRez Armors Indoril cuirass don't work Bug #5415: Environment maps in ebony cuirass and HiRez Armors Indoril cuirass don't work
Bug #5416: Junk non-node records before the root node are not handled gracefully Bug #5416: Junk non-node records before the root node are not handled gracefully
Bug #5424: Creatures do not headtrack player
Feature #5362: Show the soul gems' trapped soul in count dialog Feature #5362: Show the soul gems' trapped soul in count dialog
0.46.0 0.46.0

@ -1815,33 +1815,30 @@ namespace MWRender
{ {
mHeadController = nullptr; mHeadController = nullptr;
if (mPtr.getClass().isBipedal(mPtr)) NodeMap::const_iterator found = getNodeMap().find("bip01 head");
{ if (found == getNodeMap().end())
NodeMap::const_iterator found = getNodeMap().find("bip01 head"); return;
if (found != getNodeMap().end())
{
osg::MatrixTransform* node = found->second;
bool foundKeyframeCtrl = false; osg::MatrixTransform* node = found->second;
osg::Callback* cb = node->getUpdateCallback();
while (cb)
{
if (dynamic_cast<NifOsg::KeyframeController*>(cb))
{
foundKeyframeCtrl = true;
break;
}
cb = cb->getNestedCallback();
}
if (foundKeyframeCtrl) bool foundKeyframeCtrl = false;
{ osg::Callback* cb = node->getUpdateCallback();
mHeadController = new RotateController(mObjectRoot.get()); while (cb)
node->addUpdateCallback(mHeadController); {
mActiveControllers.emplace_back(node, mHeadController); if (dynamic_cast<NifOsg::KeyframeController*>(cb))
} {
foundKeyframeCtrl = true;
break;
} }
cb = cb->getNestedCallback();
} }
if (!foundKeyframeCtrl)
return;
mHeadController = new RotateController(mObjectRoot.get());
node->addUpdateCallback(mHeadController);
mActiveControllers.emplace_back(node, mHeadController);
} }
void Animation::setHeadPitch(float pitchRadians) void Animation::setHeadPitch(float pitchRadians)

Loading…
Cancel
Save