1 #include "rng.hpp" 2 3 #include <chrono> 4 #include <random> 5 6 namespace 7 { 8 Misc::Rng::Seed sSeed; 9 } 10 11 namespace Misc 12 { 13 Seed()14 Rng::Seed::Seed() {} 15 Seed(unsigned int seed)16 Rng::Seed::Seed(unsigned int seed) 17 { 18 mGenerator.seed(seed); 19 } 20 getSeed()21 Rng::Seed& Rng::getSeed() 22 { 23 return sSeed; 24 } 25 init(unsigned int seed)26 void Rng::init(unsigned int seed) 27 { 28 sSeed.mGenerator.seed(seed); 29 } 30 rollProbability(Seed & seed)31 float Rng::rollProbability(Seed& seed) 32 { 33 return std::uniform_real_distribution<float>(0, 1 - std::numeric_limits<float>::epsilon())(seed.mGenerator); 34 } 35 rollClosedProbability(Seed & seed)36 float Rng::rollClosedProbability(Seed& seed) 37 { 38 return std::uniform_real_distribution<float>(0, 1)(seed.mGenerator); 39 } 40 rollDice(int max,Seed & seed)41 int Rng::rollDice(int max, Seed& seed) 42 { 43 return max > 0 ? std::uniform_int_distribution<int>(0, max - 1)(seed.mGenerator) : 0; 44 } 45 generateDefaultSeed()46 unsigned int Rng::generateDefaultSeed() 47 { 48 return static_cast<unsigned int>(std::chrono::high_resolution_clock::now().time_since_epoch().count()); 49 } 50 deviate(float mean,float deviation,Seed & seed)51 float Rng::deviate(float mean, float deviation, Seed& seed) 52 { 53 return std::uniform_real_distribution<float>(mean - deviation, mean + deviation)(seed.mGenerator); 54 } 55 } 56