mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-25 17:56:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef OPENMW_COMPONENTS_NIFOSG_LOADER
 | |
| #define OPENMW_COMPONENTS_NIFOSG_LOADER
 | |
| 
 | |
| #include <components/nif/niffile.hpp>
 | |
| 
 | |
| #include <osg/ref_ptr>
 | |
| #include <osg/Referenced>
 | |
| 
 | |
| #include "controller.hpp"
 | |
| 
 | |
| namespace osg
 | |
| {
 | |
|     class Node;
 | |
| }
 | |
| 
 | |
| namespace Resource
 | |
| {
 | |
|     class ImageManager;
 | |
| }
 | |
| 
 | |
| namespace NifOsg
 | |
| {
 | |
|     typedef std::multimap<float,std::string> TextKeyMap;
 | |
| 
 | |
|     struct TextKeyMapHolder : public osg::Object
 | |
|     {
 | |
|     public:
 | |
|         TextKeyMapHolder() {}
 | |
|         TextKeyMapHolder(const TextKeyMapHolder& copy, const osg::CopyOp& copyop)
 | |
|             : osg::Object(copy, copyop)
 | |
|             , mTextKeys(copy.mTextKeys)
 | |
|         {}
 | |
| 
 | |
|         TextKeyMap mTextKeys;
 | |
| 
 | |
|         META_Object(NifOsg, TextKeyMapHolder)
 | |
| 
 | |
|     };
 | |
| 
 | |
|     class KeyframeHolder : public osg::Object
 | |
|     {
 | |
|     public:
 | |
|         KeyframeHolder() {}
 | |
|         KeyframeHolder(const KeyframeHolder& copy, const osg::CopyOp& copyop)
 | |
|             : mTextKeys(copy.mTextKeys)
 | |
|             , mKeyframeControllers(copy.mKeyframeControllers)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         TextKeyMap mTextKeys;
 | |
| 
 | |
|         META_Object(OpenMW, KeyframeHolder)
 | |
| 
 | |
|         typedef std::map<std::string, osg::ref_ptr<const KeyframeController> > KeyframeControllerMap;
 | |
|         KeyframeControllerMap mKeyframeControllers;
 | |
|     };
 | |
| 
 | |
|     /// The main class responsible for loading NIF files into an OSG-Scenegraph.
 | |
|     /// @par This scene graph is self-contained and can be cloned using osg::clone if desired. Particle emitters
 | |
|     ///      and programs hold a pointer to their ParticleSystem, which would need to be manually updated when cloning.
 | |
|     class Loader
 | |
|     {
 | |
|     public:
 | |
|         /// Create a scene graph for the given NIF. Auto-detects when skinning is used and wraps the graph in a Skeleton if so.
 | |
|         static osg::ref_ptr<osg::Node> load(Nif::NIFFilePtr file, Resource::ImageManager* imageManager);
 | |
| 
 | |
|         /// Load keyframe controllers from the given kf file.
 | |
|         static void loadKf(Nif::NIFFilePtr kf, KeyframeHolder& target);
 | |
| 
 | |
|         /// Set whether or not nodes marked as "MRK" should be shown.
 | |
|         /// These should be hidden ingame, but visible in the editor.
 | |
|         /// Default: false.
 | |
|         static void setShowMarkers(bool show);
 | |
| 
 | |
|         static bool getShowMarkers();
 | |
| 
 | |
|     private:
 | |
| 
 | |
|         static bool sShowMarkers;
 | |
|     };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 |