OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
controller.hpp
Go to the documentation of this file.
1 #ifndef OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H
2 #define OPENMW_COMPONENTS_SCENEUTIL_CONTROLLER_H
3 
4 #include <memory>
5 #include <osg/NodeVisitor>
6 
7 namespace SceneUtil
8 {
9 
11  {
12  public:
13  virtual ~ControllerSource() { }
14  virtual float getValue(osg::NodeVisitor* nv) = 0;
15  };
16 
18  {
19  public:
21  virtual float getValue(osg::NodeVisitor* nv);
22  };
23 
26  {
27  public:
28  virtual ~ControllerFunction() = default;
29 
30  virtual float calculate(float input) const = 0;
31 
34  virtual float getMaximum() const = 0;
35  };
36 
37  class Controller
38  {
39  public:
40  Controller();
41  virtual ~Controller() {}
42 
43  bool hasInput() const;
44 
45  float getInputValue(osg::NodeVisitor* nv);
46 
47  void setSource(std::shared_ptr<ControllerSource> source);
48  void setFunction(std::shared_ptr<ControllerFunction> function);
49 
50  std::shared_ptr<ControllerSource> getSource() const;
51  std::shared_ptr<ControllerFunction> getFunction() const;
52 
53  private:
54  std::shared_ptr<ControllerSource> mSource;
55 
56  // The source value gets passed through this function before it's passed on to the DestValue.
57  std::shared_ptr<ControllerFunction> mFunction;
58  };
59 
61  class ControllerVisitor : public osg::NodeVisitor
62  {
63  public:
65 
66  virtual void apply(osg::Node& node);
67 
68  // Technically not required as the default implementation would trickle down to apply(Node&) anyway,
69  // but we'll shortcut instead to avoid the chain of virtual function calls
70  virtual void apply(osg::MatrixTransform& node);
71  virtual void apply(osg::Geometry& node);
72 
73  void applyNode(osg::Node& node);
74 
75  virtual void visit(osg::Node& node, Controller& ctrl) = 0;
76  };
77 
79  {
80  public:
82  AssignControllerSourcesVisitor(std::shared_ptr<ControllerSource> toAssign);
83 
86  virtual void visit(osg::Node& node, Controller& ctrl);
87 
88  private:
89  std::shared_ptr<ControllerSource> mToAssign;
90  };
91 
94  {
95  public:
97 
98  virtual void visit(osg::Node& , Controller& ctrl);
99 
100  float getMaxLength() const;
101 
102  private:
103  float mMaxLength;
104  };
105 
106 }
107 
108 #endif
FrameTimeSource()
Definition: controller.cpp:53
std::shared_ptr< ControllerSource > mToAssign
Definition: controller.hpp:89
void applyNode(osg::Node &node)
Definition: controller.cpp:83
virtual void visit(osg::Node &node, Controller &ctrl)=0
virtual float getValue(osg::NodeVisitor *nv)
Definition: controller.cpp:57
Finds the maximum of all controller functions in the given scene graph.
Definition: controller.hpp:93
virtual void visit(osg::Node &, Controller &ctrl)
Definition: controller.cpp:130
float getMaxLength() const
Definition: controller.cpp:136
FindMaxControllerLengthVisitor()
Definition: controller.cpp:124
virtual ~ControllerFunction()=default
void setFunction(std::shared_ptr< ControllerFunction > function)
Definition: controller.cpp:38
float mMaxLength
Definition: controller.hpp:103
std::shared_ptr< ControllerSource > mSource
Definition: controller.hpp:54
Pure virtual base class - visit() all controllers that are attached as UpdateCallbacks in a scene gra...
Definition: controller.hpp:61
virtual ~Controller()
Definition: controller.hpp:41
virtual float getValue(osg::NodeVisitor *nv)=0
float getInputValue(osg::NodeVisitor *nv)
Definition: controller.cpp:25
Controller()
Definition: controller.cpp:16
virtual void visit(osg::Node &node, Controller &ctrl)
Definition: controller.cpp:118
Definition: controller.hpp:37
virtual float getMaximum() const =0
AssignControllerSourcesVisitor()
Definition: controller.cpp:107
virtual ~ControllerSource()
Definition: controller.hpp:13
std::shared_ptr< ControllerFunction > getFunction() const
Definition: controller.cpp:48
ControllerVisitor()
Definition: controller.cpp:62
Definition: controller.hpp:17
void setSource(std::shared_ptr< ControllerSource > source)
Definition: controller.cpp:33
Definition: controller.hpp:25
bool hasInput() const
Definition: controller.cpp:20
Definition: controller.hpp:10
virtual float calculate(float input) const =0
std::shared_ptr< ControllerFunction > mFunction
Definition: controller.hpp:57
Definition: controller.hpp:78
std::shared_ptr< ControllerSource > getSource() const
Definition: controller.cpp:43
virtual void apply(osg::Node &node)
Definition: controller.cpp:68