mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 01:26:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			985 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			42 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
 |