mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-10 15:45:37 +00:00
Store text keys for each animation
This commit is contained in:
parent
bb98542c5a
commit
4054934f16
@ -431,23 +431,29 @@ void loadResource(Ogre::Resource *resource)
|
|||||||
for(keyiter = textkeys.begin();keyiter != textkeys.end();keyiter++)
|
for(keyiter = textkeys.begin();keyiter != textkeys.end();keyiter++)
|
||||||
{
|
{
|
||||||
std::string::size_type sep = keyiter->second.find(':');
|
std::string::size_type sep = keyiter->second.find(':');
|
||||||
if(sep == currentgroup.length() && keyiter->second.compare(0, sep, currentgroup) == 0)
|
if((sep == currentgroup.length() && keyiter->second.compare(0, sep, currentgroup) == 0) ||
|
||||||
|
(sep == sizeof("soundgen")-1 && keyiter->second.compare(0, sep, "soundgen") == 0) ||
|
||||||
|
(sep == sizeof("sound")-1 && keyiter->second.compare(0, sep, "sound") == 0))
|
||||||
continue;
|
continue;
|
||||||
currentgroup = keyiter->second.substr(0, sep);
|
currentgroup = keyiter->second.substr(0, sep);
|
||||||
|
|
||||||
if(skel->hasAnimation(currentgroup))
|
if(skel->hasAnimation(currentgroup))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
TextKeyMap::const_reverse_iterator lastkeyiter = textkeys.rbegin();
|
TextKeyMap::const_iterator lastkeyiter = textkeys.end();
|
||||||
while(lastkeyiter->first > keyiter->first)
|
while((--lastkeyiter)->first > keyiter->first)
|
||||||
{
|
{
|
||||||
if(lastkeyiter->second.find(':') == currentgroup.length() &&
|
if(lastkeyiter->second.find(':') == currentgroup.length() &&
|
||||||
lastkeyiter->second.compare(0, currentgroup.length(), currentgroup) == 0)
|
lastkeyiter->second.compare(0, currentgroup.length(), currentgroup) == 0)
|
||||||
break;
|
break;
|
||||||
lastkeyiter++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildAnimation(skel, currentgroup, ctrls, targets, keyiter->first, lastkeyiter->first);
|
buildAnimation(skel, currentgroup, ctrls, targets, keyiter->first, lastkeyiter->first);
|
||||||
|
|
||||||
|
TextKeyMap groupkeys;
|
||||||
|
groupkeys.insert(keyiter, ++lastkeyiter);
|
||||||
|
Ogre::UserObjectBindings &bindings = boneiter.peekNext()->getUserObjectBindings();
|
||||||
|
bindings.setUserAny(std::string(sTextKeyExtraDataID)+"@"+currentgroup, Ogre::Any(groupkeys));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,12 +465,7 @@ bool createSkeleton(const std::string &name, const std::string &group, const Nif
|
|||||||
if(node->boneTrafo != NULL)
|
if(node->boneTrafo != NULL)
|
||||||
{
|
{
|
||||||
Ogre::SkeletonManager &skelMgr = Ogre::SkeletonManager::getSingleton();
|
Ogre::SkeletonManager &skelMgr = Ogre::SkeletonManager::getSingleton();
|
||||||
Ogre::SkeletonPtr skel = skelMgr.getByName(name);
|
skelMgr.create(name, group, true, &sLoaders[name]);
|
||||||
if(skel.isNull())
|
|
||||||
{
|
|
||||||
NIFSkeletonLoader *loader = &sLoaders[name];
|
|
||||||
skel = skelMgr.create(name, group, true, loader);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1129,8 +1130,12 @@ MeshInfoList NIFLoader::load(const std::string &name, const std::string &skelNam
|
|||||||
return meshes;
|
return meshes;
|
||||||
}
|
}
|
||||||
|
|
||||||
NIFSkeletonLoader skelldr;
|
bool hasSkel = Ogre::SkeletonManager::getSingleton().resourceExists(name);
|
||||||
bool hasSkel = skelldr.createSkeleton(name, group, node);
|
if(!hasSkel)
|
||||||
|
{
|
||||||
|
NIFSkeletonLoader skelldr;
|
||||||
|
hasSkel = skelldr.createSkeleton(name, group, node);
|
||||||
|
}
|
||||||
|
|
||||||
NIFMeshLoader meshldr(name, group, (hasSkel ? skelName : std::string()));
|
NIFMeshLoader meshldr(name, group, (hasSkel ? skelName : std::string()));
|
||||||
meshldr.createMeshes(node, meshes);
|
meshldr.createMeshes(node, meshes);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user