mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 13:09:40 +00:00
Add prng to World instance and serialize state in Save
This commit is contained in:
parent
aa6cba9b17
commit
b502dc12f0
5 changed files with 31 additions and 2 deletions
|
@ -9,6 +9,7 @@
|
|||
#include <deque>
|
||||
|
||||
#include <components/esm3/cellid.hpp>
|
||||
#include <components/misc/rng.hpp>
|
||||
|
||||
#include <osg/Timer>
|
||||
|
||||
|
@ -658,6 +659,8 @@ namespace MWBase
|
|||
virtual void reportStats(unsigned int frameNumber, osg::Stats& stats) const = 0;
|
||||
|
||||
virtual std::vector<MWWorld::Ptr> getAll(const std::string& id) = 0;
|
||||
|
||||
virtual Misc::Rng::Generator& getPrng() = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -359,6 +359,12 @@ namespace MWWorld
|
|||
writer.writeHNT("LEVT", mLevitationEnabled);
|
||||
writer.endRecord(ESM::REC_ENAB);
|
||||
|
||||
std::stringstream ssPrng;
|
||||
ssPrng << mPrng;
|
||||
writer.startRecord(ESM::REC_RAND);
|
||||
writer.writeHString(ssPrng.str());
|
||||
writer.endRecord(ESM::REC_RAND);
|
||||
|
||||
writer.startRecord(ESM::REC_CAM_);
|
||||
writer.writeHNT("FIRS", isFirstPerson());
|
||||
writer.endRecord(ESM::REC_CAM_);
|
||||
|
@ -376,6 +382,14 @@ namespace MWWorld
|
|||
reader.getHNT(mTeleportEnabled, "TELE");
|
||||
reader.getHNT(mLevitationEnabled, "LEVT");
|
||||
return;
|
||||
case ESM::REC_RAND:
|
||||
{
|
||||
std::stringstream ssPrng;
|
||||
ssPrng << reader.getHString();
|
||||
ssPrng.seekg(0);
|
||||
ssPrng >> mPrng;
|
||||
}
|
||||
break;
|
||||
case ESM::REC_PLAY:
|
||||
mStore.checkPlayer();
|
||||
mPlayer->readRecord(reader, type);
|
||||
|
@ -3999,4 +4013,10 @@ namespace MWWorld
|
|||
{
|
||||
return mCells.getAll(id);
|
||||
}
|
||||
|
||||
Misc::Rng::Generator& World::getPrng()
|
||||
{
|
||||
return mPrng;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <osg/ref_ptr>
|
||||
|
||||
#include <components/settings/settings.hpp>
|
||||
#include <components/misc/rng.hpp>
|
||||
|
||||
#include "../mwbase/world.hpp"
|
||||
|
||||
|
@ -84,7 +85,7 @@ namespace MWWorld
|
|||
GroundcoverStore mGroundcoverStore;
|
||||
LocalScripts mLocalScripts;
|
||||
MWWorld::Globals mGlobalVariables;
|
||||
|
||||
Misc::Rng::Generator mPrng;
|
||||
Cells mCells;
|
||||
|
||||
std::string mCurrentWorldSpace;
|
||||
|
@ -736,6 +737,8 @@ namespace MWWorld
|
|||
void reportStats(unsigned int frameNumber, osg::Stats& stats) const override;
|
||||
|
||||
std::vector<MWWorld::Ptr> getAll(const std::string& id) override;
|
||||
|
||||
Misc::Rng::Generator& getPrng() override;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -173,6 +173,9 @@ enum RecNameInts : unsigned int
|
|||
|
||||
// format 16 - Lua scripts in saved games
|
||||
REC_LUAM = fourCC("LUAM"), // LuaManager data
|
||||
|
||||
// format 21 - Random state in saved games.
|
||||
REC_RAND = fourCC("RAND"), // Random state.
|
||||
};
|
||||
|
||||
/// Common subrecords
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "esmwriter.hpp"
|
||||
|
||||
unsigned int ESM::SavedGame::sRecordId = ESM::REC_SAVE;
|
||||
int ESM::SavedGame::sCurrentFormat = 20;
|
||||
int ESM::SavedGame::sCurrentFormat = 21;
|
||||
|
||||
void ESM::SavedGame::load (ESMReader &esm)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue