forked from mirror/openmw-tes3mp
Use a unique loader for each skeleton resource
This commit is contained in:
parent
a86ed46ec4
commit
e760219953
1 changed files with 12 additions and 5 deletions
|
@ -130,7 +130,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct NIFSkeletonLoader : public Ogre::ManualResourceLoader {
|
class NIFSkeletonLoader : public Ogre::ManualResourceLoader {
|
||||||
|
|
||||||
static void warn(const std::string &msg)
|
static void warn(const std::string &msg)
|
||||||
{
|
{
|
||||||
|
@ -171,6 +171,11 @@ void buildBones(Ogre::Skeleton *skel, const Nif::Node *node, Ogre::Bone *parent=
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typedef std::map<std::string,NIFSkeletonLoader,ciLessBoost> LoaderMap;
|
||||||
|
static LoaderMap sLoaders;
|
||||||
|
|
||||||
|
public:
|
||||||
void loadResource(Ogre::Resource *resource)
|
void loadResource(Ogre::Resource *resource)
|
||||||
{
|
{
|
||||||
Ogre::Skeleton *skel = dynamic_cast<Ogre::Skeleton*>(resource);
|
Ogre::Skeleton *skel = dynamic_cast<Ogre::Skeleton*>(resource);
|
||||||
|
@ -181,7 +186,7 @@ void loadResource(Ogre::Resource *resource)
|
||||||
buildBones(skel, node);
|
buildBones(skel, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool createSkeleton(const std::string &name, const std::string &group, Nif::Node *node)
|
bool createSkeleton(const std::string &name, const std::string &group, Nif::Node *node)
|
||||||
{
|
{
|
||||||
if(node->boneTrafo != NULL)
|
if(node->boneTrafo != NULL)
|
||||||
{
|
{
|
||||||
|
@ -190,8 +195,8 @@ static bool createSkeleton(const std::string &name, const std::string &group, Ni
|
||||||
Ogre::SkeletonPtr skel = skelMgr.getByName(name);
|
Ogre::SkeletonPtr skel = skelMgr.getByName(name);
|
||||||
if(skel.isNull())
|
if(skel.isNull())
|
||||||
{
|
{
|
||||||
static NIFSkeletonLoader loader;
|
NIFSkeletonLoader *loader = &sLoaders[name];
|
||||||
skel = skelMgr.create(name, group, true, &loader);
|
skel = skelMgr.create(name, group, true, loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -214,6 +219,7 @@ static bool createSkeleton(const std::string &name, const std::string &group, Ni
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
NIFSkeletonLoader::LoaderMap NIFSkeletonLoader::sLoaders;
|
||||||
|
|
||||||
|
|
||||||
// Conversion of blend / test mode from NIF -> OGRE.
|
// Conversion of blend / test mode from NIF -> OGRE.
|
||||||
|
@ -875,7 +881,8 @@ MeshPairList NIFLoader::load(std::string name, std::string skelName, const std::
|
||||||
return meshes;
|
return meshes;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasSkel = NIFSkeletonLoader::createSkeleton(name, group, node);
|
NIFSkeletonLoader skelldr;
|
||||||
|
bool 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…
Reference in a new issue