2024-01-07 10:49:16 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* random_pcg.cpp */
|
|
|
|
/* From https://github.com/Relintai/pandemonium_engine (MIT) */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
//--STRIP
|
|
|
|
#include "core/random_pcg.h"
|
|
|
|
|
2024-01-13 19:08:12 +01:00
|
|
|
#include "core/sfw_time.h"
|
2024-01-07 10:49:16 +01:00
|
|
|
#include "core/error_macros.h"
|
|
|
|
//--STRIP
|
|
|
|
|
|
|
|
RandomPCG::RandomPCG(uint64_t p_seed, uint64_t p_inc) :
|
|
|
|
pcg(),
|
|
|
|
current_inc(p_inc) {
|
|
|
|
seed(p_seed);
|
|
|
|
}
|
|
|
|
|
|
|
|
void RandomPCG::randomize() {
|
2024-01-13 19:08:12 +01:00
|
|
|
seed((SFWTime::date() + SFWTime::time_us()) * pcg.state + PCG_DEFAULT_INC_64);
|
2024-01-07 10:49:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
double RandomPCG::random(double p_from, double p_to) {
|
|
|
|
return randd() * (p_to - p_from) + p_from;
|
|
|
|
}
|
|
|
|
|
|
|
|
float RandomPCG::random(float p_from, float p_to) {
|
|
|
|
return randf() * (p_to - p_from) + p_from;
|
|
|
|
}
|
|
|
|
|
|
|
|
int RandomPCG::random(int p_from, int p_to) {
|
|
|
|
if (p_from == p_to) {
|
|
|
|
return p_from;
|
|
|
|
}
|
|
|
|
return rand(abs(p_from - p_to) + 1) + MIN(p_from, p_to);
|
|
|
|
}
|