mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-01 13:36:40 +00:00
Skip inactive controllers. Fixes those bloody bone boots again.
This commit is contained in:
parent
4ec86d1c68
commit
bbd15b185d
4 changed files with 62 additions and 50 deletions
|
@ -140,6 +140,9 @@ struct NiNode : Node
|
|||
ParticleFlag_AutoPlay = 0x0020,
|
||||
ParticleFlag_LocalSpace = 0x0080
|
||||
};
|
||||
enum ControllerFlags {
|
||||
ControllerFlag_Active = 0x8
|
||||
};
|
||||
|
||||
void read(NIFStream *nif)
|
||||
{
|
||||
|
|
|
@ -341,7 +341,7 @@ void NIFMeshLoader::createSubMesh(Ogre::Mesh *mesh, const Nif::NiTriShape *shape
|
|||
Nif::ControllerPtr ctrl = shape->controller;
|
||||
do {
|
||||
// Load GeomMorpherController into an Ogre::Pose and Animation
|
||||
if(ctrl->recType == Nif::RC_NiGeomMorpherController)
|
||||
if(ctrl->recType == Nif::RC_NiGeomMorpherController && ctrl->flags & Nif::NiNode::ControllerFlag_Active)
|
||||
{
|
||||
const Nif::NiGeomMorpherController *geom =
|
||||
static_cast<const Nif::NiGeomMorpherController*>(ctrl.getPtr());
|
||||
|
|
|
@ -635,6 +635,8 @@ class NIFObjectLoader
|
|||
|
||||
Nif::ControllerPtr ctrl = node->controller;
|
||||
while(!ctrl.empty())
|
||||
{
|
||||
if (ctrl->flags & Nif::NiNode::ControllerFlag_Active)
|
||||
{
|
||||
if(ctrl->recType == Nif::RC_NiUVController)
|
||||
{
|
||||
|
@ -667,6 +669,7 @@ class NIFObjectLoader
|
|||
|
||||
scene->mControllers.push_back(Ogre::Controller<Ogre::Real>(srcval, dstval, func));
|
||||
}
|
||||
}
|
||||
ctrl = ctrl->next;
|
||||
}
|
||||
|
||||
|
@ -852,7 +855,7 @@ class NIFObjectLoader
|
|||
Nif::ControllerPtr ctrl = partnode->controller;
|
||||
while(!ctrl.empty())
|
||||
{
|
||||
if(ctrl->recType == Nif::RC_NiParticleSystemController)
|
||||
if(ctrl->recType == Nif::RC_NiParticleSystemController && ctrl->flags & Nif::NiNode::ControllerFlag_Active)
|
||||
{
|
||||
const Nif::NiParticleSystemController *partctrl = static_cast<const Nif::NiParticleSystemController*>(ctrl.getPtr());
|
||||
|
||||
|
@ -893,6 +896,8 @@ class NIFObjectLoader
|
|||
static void createNodeControllers(const std::string &name, Nif::ControllerPtr ctrl, ObjectScenePtr scene, int animflags)
|
||||
{
|
||||
do {
|
||||
if (ctrl->flags & Nif::NiNode::ControllerFlag_Active)
|
||||
{
|
||||
if(ctrl->recType == Nif::RC_NiVisController)
|
||||
{
|
||||
const Nif::NiVisController *vis = static_cast<const Nif::NiVisController*>(ctrl.getPtr());
|
||||
|
@ -930,6 +935,7 @@ class NIFObjectLoader
|
|||
scene->mControllers.push_back(Ogre::Controller<Ogre::Real>(srcval, dstval, func));
|
||||
}
|
||||
}
|
||||
}
|
||||
ctrl = ctrl->next;
|
||||
} while(!ctrl.empty());
|
||||
}
|
||||
|
@ -1151,6 +1157,9 @@ public:
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!(ctrl->flags & Nif::NiNode::ControllerFlag_Active))
|
||||
continue;
|
||||
|
||||
const Nif::NiStringExtraData *strdata = static_cast<const Nif::NiStringExtraData*>(extra.getPtr());
|
||||
const Nif::NiKeyframeController *key = static_cast<const Nif::NiKeyframeController*>(ctrl.getPtr());
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ bool NIFSkeletonLoader::needSkeleton(const Nif::Node *node)
|
|||
{
|
||||
Nif::ControllerPtr ctrl = node->controller;
|
||||
do {
|
||||
if(ctrl->recType == Nif::RC_NiKeyframeController)
|
||||
if(ctrl->recType == Nif::RC_NiKeyframeController && ctrl->flags & Nif::NiNode::ControllerFlag_Active)
|
||||
return true;
|
||||
} while(!(ctrl=ctrl->next).empty());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue