mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 17:56:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "loadgmst.hpp"
 | |
| 
 | |
| #include <stdexcept>
 | |
| 
 | |
| #include "esmreader.hpp"
 | |
| #include "esmwriter.hpp"
 | |
| 
 | |
| namespace ESM
 | |
| {
 | |
| 
 | |
| void GameSetting::load(ESMReader &esm)
 | |
| {
 | |
|     assert(mId != "");
 | |
| 
 | |
|     // We are apparently allowed to be empty
 | |
|     if (!esm.hasMoreSubs())
 | |
|     {
 | |
|         mType = VT_None;
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     // Load some data
 | |
|     esm.getSubName();
 | |
|     NAME n = esm.retSubName();
 | |
|     if (n == "STRV")
 | |
|     {
 | |
|         mStr = esm.getHString();
 | |
|         mType = VT_String;
 | |
|     }
 | |
|     else if (n == "INTV")
 | |
|     {
 | |
|         esm.getHT(mI);
 | |
|         mType = VT_Int;
 | |
|     }
 | |
|     else if (n == "FLTV")
 | |
|     {
 | |
|         esm.getHT(mF);
 | |
|         mType = VT_Float;
 | |
|     }
 | |
|     else
 | |
|         esm.fail("Unwanted subrecord type");
 | |
| }
 | |
| 
 | |
| void GameSetting::save(ESMWriter &esm)
 | |
| {
 | |
|     switch(mType)
 | |
|     {
 | |
|     case VT_String: esm.writeHNString("STRV", mStr); break;
 | |
|     case VT_Int: esm.writeHNT("INTV", mI); break;
 | |
|     case VT_Float: esm.writeHNT("FLTV", mF); break;
 | |
|     default: break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| int GameSetting::getInt() const
 | |
| {
 | |
|     switch (mType)
 | |
|     {
 | |
|         case VT_Float: return static_cast<int> (mF);
 | |
|         case VT_Int: return mI;
 | |
|         default: throw std::runtime_error ("GMST " + mId + " is not of a numeric type");
 | |
|     }
 | |
| }
 | |
| 
 | |
| float GameSetting::getFloat() const
 | |
| {
 | |
|     switch (mType)
 | |
|     {
 | |
|         case VT_Float: return mF;
 | |
|         case VT_Int: return mI;
 | |
|         default: throw std::runtime_error ("GMST " + mId + " is not of a numeric type");
 | |
|     }
 | |
| }
 | |
| 
 | |
| std::string GameSetting::getString() const
 | |
| {
 | |
|     if (mType==VT_String)
 | |
|         return mStr;
 | |
|         
 | |
|     throw std::runtime_error ("GMST " + mId + " is not a string");
 | |
| }
 | |
| 
 | |
| }
 |