mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-25 17:56:37 +00:00 
			
		
		
		
	Fixed several issues: * Waiting/jail time/training all now properly skip remaining transitions * ChangeWeather no longer permanently sets the region's weather * ChangeWeather being called during a transition now correctly queues up another transition * Corrected transition delta and factor calculations * ModRegion settings are now saved
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "weatherstate.hpp"
 | |
| 
 | |
| #include "esmreader.hpp"
 | |
| #include "esmwriter.hpp"
 | |
| 
 | |
| namespace
 | |
| {
 | |
|     const char* currentRegionRecord     = "CREG";
 | |
|     const char* timePassedRecord        = "TMPS";
 | |
|     const char* fastForwardRecord       = "FAST";
 | |
|     const char* weatherUpdateTimeRecord = "WUPD";
 | |
|     const char* transitionFactorRecord  = "TRFC";
 | |
|     const char* currentWeatherRecord    = "CWTH";
 | |
|     const char* nextWeatherRecord       = "NWTH";
 | |
|     const char* queuedWeatherRecord     = "QWTH";
 | |
|     const char* regionNameRecord        = "RGNN";
 | |
|     const char* regionWeatherRecord     = "RGNW";
 | |
|     const char* regionChanceRecord      = "RGNC";
 | |
| }
 | |
| 
 | |
| namespace ESM
 | |
| {
 | |
|     void WeatherState::load(ESMReader& esm)
 | |
|     {
 | |
|         mCurrentRegion = esm.getHNString(currentRegionRecord);
 | |
|         esm.getHNT(mTimePassed, timePassedRecord);
 | |
|         esm.getHNT(mFastForward, fastForwardRecord);
 | |
|         esm.getHNT(mWeatherUpdateTime, weatherUpdateTimeRecord);
 | |
|         esm.getHNT(mTransitionFactor, transitionFactorRecord);
 | |
|         esm.getHNT(mCurrentWeather, currentWeatherRecord);
 | |
|         esm.getHNT(mNextWeather, nextWeatherRecord);
 | |
|         esm.getHNT(mQueuedWeather, queuedWeatherRecord);
 | |
| 
 | |
|         while(esm.peekNextSub(regionNameRecord))
 | |
|         {
 | |
|             std::string regionID = esm.getHNString(regionNameRecord);
 | |
|             RegionWeatherState region;
 | |
|             esm.getHNT(region.mWeather, regionWeatherRecord);
 | |
|             while(esm.peekNextSub(regionChanceRecord))
 | |
|             {
 | |
|                 char chance;
 | |
|                 esm.getHNT(chance, regionChanceRecord);
 | |
|                 region.mChances.push_back(chance);
 | |
|             }
 | |
| 
 | |
|             mRegions.insert(std::make_pair(regionID, region));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void WeatherState::save(ESMWriter& esm) const
 | |
|     {
 | |
|         esm.writeHNCString(currentRegionRecord, mCurrentRegion.c_str());
 | |
|         esm.writeHNT(timePassedRecord, mTimePassed);
 | |
|         esm.writeHNT(fastForwardRecord, mFastForward);
 | |
|         esm.writeHNT(weatherUpdateTimeRecord, mWeatherUpdateTime);
 | |
|         esm.writeHNT(transitionFactorRecord, mTransitionFactor);
 | |
|         esm.writeHNT(currentWeatherRecord, mCurrentWeather);
 | |
|         esm.writeHNT(nextWeatherRecord, mNextWeather);
 | |
|         esm.writeHNT(queuedWeatherRecord, mQueuedWeather);
 | |
| 
 | |
|         std::map<std::string, RegionWeatherState>::const_iterator it = mRegions.begin();
 | |
|         for(; it != mRegions.end(); ++it)
 | |
|         {
 | |
|             esm.writeHNCString(regionNameRecord, it->first.c_str());
 | |
|             esm.writeHNT(regionWeatherRecord, it->second.mWeather);
 | |
|             for(size_t i = 0; i < it->second.mChances.size(); ++i)
 | |
|             {
 | |
|                 esm.writeHNT(regionChanceRecord, it->second.mChances[i]);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |