mirror of https://github.com/OpenMW/openmw.git
adds a replacement for osg::NodeCallback (#3144)
* nodecallback.hpp * lightmanager.hpp * lightmanager.cpp * lightmanager.hpp * nodecallback.hpp * nodecallback.hpp * [ci skip] * lightmanager.hpp * nodecallback.hpp * nodecallback.hpp * lightmanager.cpp * lightmanager.cpp * nodecallback.hpp * [ci skip] * [ci skip] * controller.cpp * [ci skip] * osgacontroller.cpp * keyframe.hpp * controller.hpp * keyframe.hpp * [ci skip] * keyframe.hpp * animation.hpp * [ci skip] * weaponanimation.cpp * nodecallback.hpppull/3146/head
parent
0e07fc38e5
commit
aaf7b423d6
@ -0,0 +1,41 @@
|
||||
#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 virtual osg::Callback
|
||||
{
|
||||
public:
|
||||
NodeCallback(){}
|
||||
NodeCallback(const NodeCallback& nc,const osg::CopyOp& copyop):
|
||||
osg::Callback(nc, copyop) {}
|
||||
META_Object(SceneUtil, NodeCallback)
|
||||
|
||||
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
|
Loading…
Reference in New Issue