mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 18:56:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///Functions used to read raw binary data from .nif files
 | |
| 
 | |
| #ifndef OPENMW_COMPONENTS_NIF_NIFSTREAM_HPP
 | |
| #define OPENMW_COMPONENTS_NIF_NIFSTREAM_HPP
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include <stdexcept>
 | |
| 
 | |
| #include <OgreDataStream.h>
 | |
| #include <OgreVector2.h>
 | |
| #include <OgreVector3.h>
 | |
| #include <OgreVector4.h>
 | |
| #include <OgreMatrix3.h>
 | |
| #include <OgreQuaternion.h>
 | |
| #include <OgreStringConverter.h>
 | |
| 
 | |
| #include "niftypes.hpp"
 | |
| 
 | |
| namespace Nif
 | |
| {
 | |
| 
 | |
| class NIFFile;
 | |
| 
 | |
| class NIFStream {
 | |
| 
 | |
|     /// Input stream
 | |
|     Ogre::DataStreamPtr inp;
 | |
| 
 | |
|     uint8_t read_byte();
 | |
|     uint16_t read_le16();
 | |
|     uint32_t read_le32();
 | |
|     float read_le32f();
 | |
| 
 | |
| public:
 | |
| 
 | |
|     NIFFile * const file;
 | |
| 
 | |
|     NIFStream (NIFFile * file, Ogre::DataStreamPtr inp): file (file), inp (inp) {}
 | |
| 
 | |
|     void skip(size_t size) { inp->skip(size); }
 | |
| 
 | |
|     char getChar() { return read_byte(); }
 | |
|     short getShort() { return read_le16(); }
 | |
|     unsigned short getUShort() { return read_le16(); }
 | |
|     int getInt() { return read_le32(); }
 | |
|     unsigned int getUInt() { return read_le32(); }
 | |
|     float getFloat() { return read_le32f(); }
 | |
| 
 | |
|     Ogre::Vector2 getVector2();
 | |
|     Ogre::Vector3 getVector3();
 | |
|     Ogre::Vector4 getVector4();
 | |
|     Ogre::Matrix3 getMatrix3();
 | |
|     Ogre::Quaternion getQuaternion();
 | |
|     Transformation getTrafo();
 | |
| 
 | |
|     ///Read in a string of the given length
 | |
|     std::string getString(size_t length);
 | |
|     ///Read in a string of the length specified in the file
 | |
|     std::string getString();
 | |
|     ///This is special since the version string doesn't start with a number, and ends with "\n"
 | |
|     std::string getVersionString();
 | |
| 
 | |
|     void getShorts(std::vector<short> &vec, size_t size);
 | |
|     void getFloats(std::vector<float> &vec, size_t size);
 | |
|     void getVector2s(std::vector<Ogre::Vector2> &vec, size_t size);
 | |
|     void getVector3s(std::vector<Ogre::Vector3> &vec, size_t size);
 | |
|     void getVector4s(std::vector<Ogre::Vector4> &vec, size_t size);
 | |
|     void getQuaternions(std::vector<Ogre::Quaternion> &quat, size_t size);
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 |