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