mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 04:56:39 +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
 |