mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 17:26:38 +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
 |