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:
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 #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
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue