PCG Lib
Library for procedural content generation
rng.h
Go to the documentation of this file.
1 #ifndef SKR_PCG_RNG_H
2 #define SKR_PCG_RNG_H
3 
4 #include "..\..\pch.h"
5 
6 #include <random>
7 
8 namespace skr
9 {
10 namespace pcg
11 {
14  class __declspec(dllexport) RNG
15  {
16  public:
20  RNG(bool printSeed = false);
21 
23  void SetRandomSeed();
24 
27  void SetSeed(uint32_t seed);
28 
31  void SetPrintSeed(bool printSeed);
32 
37  int GetRandomInteger(const int lower, const int upper);
38 
43  float GetRandomFloat(const float lower, const float upper);
44 
49  double GetRandomDouble(const double lower, const double upper);
50 
51  uint32_t _seed;
52 
53  private:
54 #pragma warning(disable:4251) // only using types from standard library, warning can be ignored. Source: https://docs.microsoft.com/en-s/cpp/ error-messages/compiler-warnings/compiler-warning-level-1-c4251
55  std::mt19937 _randomEngine;
56  std::vector<uint32_t> _seedBlacklist = { 72304668, 2126917180, 3620160884 };
57 #pragma warning(default:4251)
58 
59 
60  bool _printSeed;
61 
63  void InitWithRandomSeed();
64 
67  void InitWithFixedSeed(uint32_t seed);
68 
73  bool CheckViableSeed(uint32_t seed);
74 
77  uint32_t GenerateViableSeed();
78  };
79 }
80 }
81 
82 
83 #endif // ! SKR_PCG_RNG_H
skr::pcg::RNG
random number generator helper class
Definition: rng.h:15
skr::pcg::RNG::_printSeed
bool _printSeed
c list of seeds know to not produce a viable level, instead puts generation into an endless loop
Definition: rng.h:60
skr::pcg::RNG::GetRandomFloat
float GetRandomFloat(const float lower, const float upper)
returns a random float from given range
Definition: rng.cpp:37
skr::pcg::RNG::SetRandomSeed
void SetRandomSeed()
Initializes random number generator with random seed.
Definition: rng.cpp:15
skr::pcg::RNG::SetPrintSeed
void SetPrintSeed(bool printSeed)
Set printSeed Parameter.
Definition: rng.cpp:25
skr::pcg::RNG::CheckViableSeed
bool CheckViableSeed(uint32_t seed)
check if a given seed is not on the blacklist this is easy solution/hack to prevent levels with overl...
Definition: rng.cpp:78
skr::pcg::RNG::InitWithRandomSeed
void InitWithRandomSeed()
c true to print seed to cmd and log, otherwise false
Definition: rng.cpp:51
skr::pcg::RNG::_seed
uint32_t _seed
Seed value for random number generator // HACK this only public to make the core application update i...
Definition: rng.h:51
skr::pcg::RNG::_seedBlacklist
std::vector< uint32_t > _seedBlacklist
c mersenne-twister engine for random number generator
Definition: rng.h:56
skr
Definition: Definitions.h:7
skr::pcg::RNG::InitWithFixedSeed
void InitWithFixedSeed(uint32_t seed)
Initializes random number generator with given fixed seed.
Definition: rng.cpp:61
skr::pcg::RNG::_randomEngine
std::mt19937 _randomEngine
Definition: rng.h:55
skr::pcg::RNG::SetSeed
void SetSeed(uint32_t seed)
Initializes random number generator with given fixed seed.
Definition: rng.cpp:20
skr::pcg::RNG::RNG
RNG(bool printSeed=false)
constructor uses random seed
Definition: rng.cpp:8
skr::pcg::RNG::GetRandomDouble
double GetRandomDouble(const double lower, const double upper)
returns a random double from given range
Definition: rng.cpp:44
skr::pcg::RNG::GenerateViableSeed
uint32_t GenerateViableSeed()
Generates a new seed that is checked to be viable.
Definition: rng.cpp:91
skr::pcg::RNG::GetRandomInteger
int GetRandomInteger(const int lower, const int upper)
returns a random interger from given range
Definition: rng.cpp:30