1
0
Fork 0
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:
Chris Robinson 2013-01-20 17:24:43 -08:00
parent e1e76bde76
commit 536f8104e6
2 changed files with 10 additions and 23 deletions

View file

@ -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());

View file

@ -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));
} }
} }