diff --git a/components/nifosg/controller.cpp b/components/nifosg/controller.cpp index bb698ed63..8f8b5003c 100644 --- a/components/nifosg/controller.cpp +++ b/components/nifosg/controller.cpp @@ -221,28 +221,25 @@ GeomMorpherController::GeomMorpherController(const Nif::NiMorphData *data) void GeomMorpherController::update(osg::NodeVisitor *nv, osg::Drawable *drawable) { - osgAnimation::MorphGeometry* morphGeom = dynamic_cast(drawable); - if (morphGeom) + osgAnimation::MorphGeometry* morphGeom = static_cast(drawable); + if (hasInput()) { - if (hasInput()) + if (mKeyFrames.size() <= 1) + return; + float input = getInputValue(nv); + int i = 0; + for (std::vector::iterator it = mKeyFrames.begin()+1; it != mKeyFrames.end(); ++it,++i) { - if (mKeyFrames.size() <= 1) - return; - float input = getInputValue(nv); - int i = 0; - for (std::vector::iterator it = mKeyFrames.begin()+1; it != mKeyFrames.end(); ++it,++i) - { - float val = 0; - if (!(*it)->mKeys.empty()) - val = interpKey((*it)->mKeys, input); - val = std::max(0.f, std::min(1.f, val)); - - morphGeom->setWeight(i, val); - } - } + float val = 0; + if (!(*it)->mKeys.empty()) + val = interpKey((*it)->mKeys, input); + val = std::max(0.f, std::min(1.f, val)); - morphGeom->transformSoftwareMethod(); + morphGeom->setWeight(i, val); + } } + + morphGeom->transformSoftwareMethod(); } UVController::UVController() diff --git a/components/nifosg/controller.hpp b/components/nifosg/controller.hpp index d0c6d1de3..803ce77a2 100644 --- a/components/nifosg/controller.hpp +++ b/components/nifosg/controller.hpp @@ -97,6 +97,7 @@ namespace NifOsg virtual float getMaximum() const; }; + /// Must be set on an osgAnimation::MorphGeometry. class GeomMorpherController : public osg::Drawable::UpdateCallback, public SceneUtil::Controller, public ValueInterpolator { public: