mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-14 09:40:39 +00:00
65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#ifndef OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H
|
|
#define OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
#include <osg/NodeVisitor>
|
|
|
|
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<ControllerSource> mSource;
|
|
|
|
// The source value gets passed through this function before it's passed on to the DestValue.
|
|
boost::shared_ptr<ControllerFunction> mFunction;
|
|
};
|
|
|
|
class AssignControllerSourcesVisitor : public osg::NodeVisitor
|
|
{
|
|
public:
|
|
AssignControllerSourcesVisitor();
|
|
AssignControllerSourcesVisitor(boost::shared_ptr<ControllerSource> 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<ControllerSource> mToAssign;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|