mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-06 09:11:32 +00:00
Do not create an 'all' animation.
This commit is contained in:
parent
e1e76bde76
commit
536f8104e6
2 changed files with 10 additions and 23 deletions
|
@ -70,11 +70,9 @@ void Animation::createEntityList(Ogre::SceneNode *node, const std::string &model
|
||||||
Ogre::Bone *bone = boneiter.getNext();
|
Ogre::Bone *bone = boneiter.getNext();
|
||||||
Ogre::UserObjectBindings &bindings = bone->getUserObjectBindings();
|
Ogre::UserObjectBindings &bindings = bone->getUserObjectBindings();
|
||||||
const Ogre::Any &data = bindings.getUserAny(NifOgre::sTextKeyExtraDataID);
|
const Ogre::Any &data = bindings.getUserAny(NifOgre::sTextKeyExtraDataID);
|
||||||
if(data.isEmpty())
|
if(data.isEmpty() || !Ogre::any_cast<bool>(data))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
mTextKeys["all"] = Ogre::any_cast<NifOgre::TextKeyMap>(data);
|
|
||||||
|
|
||||||
mAccumRoot = skelinst->getRootBone();
|
mAccumRoot = skelinst->getRootBone();
|
||||||
mAccumRoot->setManuallyControlled(true);
|
mAccumRoot->setManuallyControlled(true);
|
||||||
mNonAccumRoot = skelinst->getBone(bone->getHandle());
|
mNonAccumRoot = skelinst->getBone(bone->getHandle());
|
||||||
|
|
|
@ -308,7 +308,7 @@ static TextKeyMap extractTextKeys(const Nif::NiTextKeyExtraData *tk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, std::vector<Nif::NiKeyframeController const*> &ctrls, Ogre::Bone *parent=NULL)
|
void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, Ogre::Bone *&nonaccum, TextKeyMap &textkeys, std::vector<Nif::NiKeyframeController const*> &ctrls, Ogre::Bone *parent=NULL)
|
||||||
{
|
{
|
||||||
if(node->recType == Nif::RC_NiTriShape)
|
if(node->recType == Nif::RC_NiTriShape)
|
||||||
return;
|
return;
|
||||||
|
@ -341,7 +341,8 @@ void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, std::vector<Nif::Ni
|
||||||
if(e->recType == Nif::RC_NiTextKeyExtraData)
|
if(e->recType == Nif::RC_NiTextKeyExtraData)
|
||||||
{
|
{
|
||||||
const Nif::NiTextKeyExtraData *tk = static_cast<const Nif::NiTextKeyExtraData*>(e.getPtr());
|
const Nif::NiTextKeyExtraData *tk = static_cast<const Nif::NiTextKeyExtraData*>(e.getPtr());
|
||||||
bone->getUserObjectBindings().setUserAny(sTextKeyExtraDataID, Ogre::Any(extractTextKeys(tk)));
|
textkeys = extractTextKeys(tk);
|
||||||
|
nonaccum = bone;
|
||||||
}
|
}
|
||||||
e = e->extra;
|
e = e->extra;
|
||||||
}
|
}
|
||||||
|
@ -353,7 +354,7 @@ void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, std::vector<Nif::Ni
|
||||||
for(size_t i = 0;i < children.length();i++)
|
for(size_t i = 0;i < children.length();i++)
|
||||||
{
|
{
|
||||||
if(!children[i].empty())
|
if(!children[i].empty())
|
||||||
buildBones(skel, children[i].getPtr(), ctrls, bone);
|
buildBones(skel, children[i].getPtr(), nonaccum, textkeys, ctrls, bone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,8 +383,10 @@ void loadResource(Ogre::Resource *resource)
|
||||||
const Nif::Node *node = dynamic_cast<const Nif::Node*>(nif.getRecord(0));
|
const Nif::Node *node = dynamic_cast<const Nif::Node*>(nif.getRecord(0));
|
||||||
|
|
||||||
std::vector<const Nif::NiKeyframeController*> ctrls;
|
std::vector<const Nif::NiKeyframeController*> ctrls;
|
||||||
|
Ogre::Bone *nonaccum = NULL;
|
||||||
|
TextKeyMap textkeys;
|
||||||
try {
|
try {
|
||||||
buildBones(skel, node, ctrls);
|
buildBones(skel, node, nonaccum, textkeys, ctrls);
|
||||||
}
|
}
|
||||||
catch(std::exception &e) {
|
catch(std::exception &e) {
|
||||||
std::cerr<< "Exception while loading "<<skel->getName() <<std::endl;
|
std::cerr<< "Exception while loading "<<skel->getName() <<std::endl;
|
||||||
|
@ -413,21 +416,8 @@ void loadResource(Ogre::Resource *resource)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TextKeyMap textkeys;
|
Ogre::UserObjectBindings &bindings = nonaccum->getUserObjectBindings();
|
||||||
Ogre::Skeleton::BoneIterator boneiter = skel->getBoneIterator();
|
bindings.setUserAny(sTextKeyExtraDataID, Ogre::Any(true));
|
||||||
while(boneiter.hasMoreElements())
|
|
||||||
{
|
|
||||||
Ogre::Bone *bone = boneiter.peekNext();
|
|
||||||
const Ogre::Any &data = bone->getUserObjectBindings().getUserAny(sTextKeyExtraDataID);
|
|
||||||
if(!data.isEmpty())
|
|
||||||
{
|
|
||||||
textkeys = Ogre::any_cast<NifOgre::TextKeyMap>(data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
boneiter.moveNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
buildAnimation(skel, "all", ctrls, targets, 0.0f, maxtime);
|
|
||||||
|
|
||||||
std::string currentgroup;
|
std::string currentgroup;
|
||||||
TextKeyMap::const_iterator keyiter = textkeys.begin();
|
TextKeyMap::const_iterator keyiter = textkeys.begin();
|
||||||
|
@ -459,7 +449,6 @@ void loadResource(Ogre::Resource *resource)
|
||||||
groupkeys.insert(std::make_pair(insiter->first - keyiter->first, insiter->second));
|
groupkeys.insert(std::make_pair(insiter->first - keyiter->first, insiter->second));
|
||||||
} while(insiter++ != lastkeyiter);
|
} while(insiter++ != lastkeyiter);
|
||||||
|
|
||||||
Ogre::UserObjectBindings &bindings = boneiter.peekNext()->getUserObjectBindings();
|
|
||||||
bindings.setUserAny(std::string(sTextKeyExtraDataID)+"@"+currentgroup, Ogre::Any(groupkeys));
|
bindings.setUserAny(std::string(sTextKeyExtraDataID)+"@"+currentgroup, Ogre::Any(groupkeys));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue