You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/components/esm/weatherstate.cpp

73 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]);
}
}
}
}