#ifndef OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H #define OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H #include #include namespace SceneUtil { class ControllerSource { public: virtual float getValue(osg::NodeVisitor* nv) = 0; }; class FrameTimeSource : public ControllerSource { public: FrameTimeSource(); virtual float getValue(osg::NodeVisitor* nv); }; class ControllerFunction { public: virtual float calculate(float input) = 0; }; class Controller { public: Controller(); bool hasInput() const; float getInputValue(osg::NodeVisitor* nv); boost::shared_ptr mSource; // The source value gets passed through this function before it's passed on to the DestValue. boost::shared_ptr mFunction; }; class AssignControllerSourcesVisitor : public osg::NodeVisitor { public: AssignControllerSourcesVisitor(); AssignControllerSourcesVisitor(boost::shared_ptr toAssign); virtual void apply(osg::Node& node); virtual void apply(osg::Geode& geode); /// Assign the wanted ControllerSource. May be overriden in derived classes. /// By default assigns the ControllerSource passed to the constructor of this class if no ControllerSource is assigned to that controller yet. virtual void assign(osg::Node& node, Controller& ctrl); private: boost::shared_ptr mToAssign; }; } #endif