mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 00:39:41 +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:
commit
a231037449
2 changed files with 27 additions and 9 deletions
|
@ -80,6 +80,7 @@
|
|||
Bug #6386: Artifacts in water reflection due to imprecise screen-space coordinate computation
|
||||
Bug #6396: Inputting certain Unicode characters triggers an assertion
|
||||
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 #6433: Items bound to Quick Keys sometimes do not appear until the Quick Key menu is opened.
|
||||
Feature #890: OpenMW-CS: Column filtering
|
||||
|
|
|
@ -624,9 +624,8 @@ namespace MWRender
|
|||
return;
|
||||
|
||||
const NodeMap& nodeMap = getNodeMap();
|
||||
|
||||
for (SceneUtil::KeyframeHolder::KeyframeControllerMap::const_iterator it = animsrc->mKeyframes->mKeyframeControllers.begin();
|
||||
it != animsrc->mKeyframes->mKeyframeControllers.end(); ++it)
|
||||
const auto& controllerMap = animsrc->mKeyframes->mKeyframeControllers;
|
||||
for (SceneUtil::KeyframeHolder::KeyframeControllerMap::const_iterator it = controllerMap.begin(); it != controllerMap.end(); ++it)
|
||||
{
|
||||
std::string bonename = Misc::StringUtils::lowerCase(it->first);
|
||||
NodeMap::const_iterator found = nodeMap.find(bonename);
|
||||
|
@ -652,14 +651,32 @@ namespace MWRender
|
|||
SceneUtil::AssignControllerSourcesVisitor assignVisitor(mAnimationTimePtr[0]);
|
||||
mObjectRoot->accept(assignVisitor);
|
||||
|
||||
// Determine the movement accumulation bone if necessary
|
||||
if (!mAccumRoot)
|
||||
{
|
||||
NodeMap::const_iterator found = nodeMap.find("bip01");
|
||||
if (found == nodeMap.end())
|
||||
found = nodeMap.find("root bone");
|
||||
|
||||
if (found != nodeMap.end())
|
||||
mAccumRoot = found->second;
|
||||
// Priority matters! bip01 is preferred.
|
||||
static const std::array<std::string, 2> accumRootNames =
|
||||
{
|
||||
"bip01",
|
||||
"root bone"
|
||||
};
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue