mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
985 B
C++
43 lines
985 B
C++
#ifndef SCENEUTIL_NODECALLBACK_H
|
|
#define SCENEUTIL_NODECALLBACK_H
|
|
|
|
#include <osg/Callback>
|
|
|
|
namespace osg
|
|
{
|
|
class Node;
|
|
class NodeVisitor;
|
|
}
|
|
|
|
namespace SceneUtil
|
|
{
|
|
|
|
template <class Derived, typename NodeType = osg::Node*, typename VisitorType = osg::NodeVisitor*>
|
|
class NodeCallback : public osg::Callback
|
|
{
|
|
public:
|
|
NodeCallback() {}
|
|
NodeCallback(const NodeCallback& nc, const osg::CopyOp& copyop)
|
|
: osg::Callback(nc, copyop)
|
|
{
|
|
}
|
|
|
|
bool run(osg::Object* object, osg::Object* data) override
|
|
{
|
|
static_cast<Derived*>(this)->operator()((NodeType)object, (VisitorType)data->asNodeVisitor());
|
|
return true;
|
|
}
|
|
|
|
template <typename VT>
|
|
void traverse(NodeType object, VT data)
|
|
{
|
|
if (_nestedCallback.valid())
|
|
_nestedCallback->run(object, data);
|
|
else
|
|
data->traverse(*object);
|
|
}
|
|
};
|
|
|
|
}
|
|
#endif
|