Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
1.2 kB · 59 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include "rng.hpp"
#include <chrono>#include <random>#include <sstream>
namespace Misc::Rng{ static Generator sGenerator;
Generator& getGenerator() { return sGenerator; }
std::string serialize(const Generator& prng) { std::stringstream ss; ss << prng;
return ss.str(); }
void deserialize(std::string_view data, Generator& prng) { std::stringstream ss; ss << data;
ss.seekg(0); ss >> prng; }
unsigned int generateDefaultSeed() { auto res = static_cast<unsigned int>(std::chrono::high_resolution_clock::now().time_since_epoch().count()); return res; }
void init(unsigned int seed) { sGenerator.seed(seed); }
float rollProbability(Generator& prng) { return std::uniform_real_distribution<float>(0, 1 - std::numeric_limits<float>::epsilon())(prng); }
float rollClosedProbability(Generator& prng) { return std::uniform_real_distribution<float>(0, 1)(prng); }
float deviate(float mean, float deviation, Generator& prng) { return std::uniform_real_distribution<float>(mean - deviation, mean + deviation)(prng); }
}