1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-24 03:11:36 +00:00

Merge branch 'accumroot' into 'master'

Use the anim source to find mAccumRoot (bug #6417)

Closes #6417

See merge request OpenMW/openmw!1431
This commit is contained in:
Evil Eye 2021-11-25 19:13:21 +00:00
commit a231037449
2 changed files with 27 additions and 9 deletions

View file

@ -80,6 +80,7 @@
Bug #6386: Artifacts in water reflection due to imprecise screen-space coordinate computation Bug #6386: Artifacts in water reflection due to imprecise screen-space coordinate computation
Bug #6396: Inputting certain Unicode characters triggers an assertion Bug #6396: Inputting certain Unicode characters triggers an assertion
Bug #6416: Morphs are applied to the wrong target Bug #6416: Morphs are applied to the wrong target
Bug #6417: OpenMW doesn't always use the right node to accumulate movement
Bug #6429: Wyrmhaven: Can't add AI packages to player Bug #6429: Wyrmhaven: Can't add AI packages to player
Bug #6433: Items bound to Quick Keys sometimes do not appear until the Quick Key menu is opened. Bug #6433: Items bound to Quick Keys sometimes do not appear until the Quick Key menu is opened.
Feature #890: OpenMW-CS: Column filtering Feature #890: OpenMW-CS: Column filtering

View file

@ -624,9 +624,8 @@ namespace MWRender
return; return;
const NodeMap& nodeMap = getNodeMap(); const NodeMap& nodeMap = getNodeMap();
const auto& controllerMap = animsrc->mKeyframes->mKeyframeControllers;
for (SceneUtil::KeyframeHolder::KeyframeControllerMap::const_iterator it = animsrc->mKeyframes->mKeyframeControllers.begin(); for (SceneUtil::KeyframeHolder::KeyframeControllerMap::const_iterator it = controllerMap.begin(); it != controllerMap.end(); ++it)
it != animsrc->mKeyframes->mKeyframeControllers.end(); ++it)
{ {
std::string bonename = Misc::StringUtils::lowerCase(it->first); std::string bonename = Misc::StringUtils::lowerCase(it->first);
NodeMap::const_iterator found = nodeMap.find(bonename); NodeMap::const_iterator found = nodeMap.find(bonename);
@ -652,14 +651,32 @@ namespace MWRender
SceneUtil::AssignControllerSourcesVisitor assignVisitor(mAnimationTimePtr[0]); SceneUtil::AssignControllerSourcesVisitor assignVisitor(mAnimationTimePtr[0]);
mObjectRoot->accept(assignVisitor); mObjectRoot->accept(assignVisitor);
// Determine the movement accumulation bone if necessary
if (!mAccumRoot) if (!mAccumRoot)
{ {
NodeMap::const_iterator found = nodeMap.find("bip01"); // Priority matters! bip01 is preferred.
if (found == nodeMap.end()) static const std::array<std::string, 2> accumRootNames =
found = nodeMap.find("root bone"); {
"bip01",
if (found != nodeMap.end()) "root bone"
mAccumRoot = found->second; };
NodeMap::const_iterator found = nodeMap.end();
for (const std::string& name : accumRootNames)
{
found = nodeMap.find(name);
if (found == nodeMap.end())
continue;
for (SceneUtil::KeyframeHolder::KeyframeControllerMap::const_iterator it = controllerMap.begin(); it != controllerMap.end(); ++it)
{
if (Misc::StringUtils::lowerCase(it->first) == name)
{
mAccumRoot = found->second;
break;
}
}
if (mAccumRoot)
break;
}
} }
} }