#pragma once
#include <random>
#include <type_traits>
struct Random {
std::mt19937 engine;
// std::uniform_real_distribution<f32> dist{0.0f, 1.0f}; // easier to generate a unit vector
Random() : engine(std::random_device{}()) {
}
explicit Random(u32 seed) : engine(seed) {
}
template <typename T> T Range(T min, T max) {
if constexpr (std::is_integral_v<T>) {
std::uniform_int_distribution<T> dist(min, max);
return dist(engine);
} else {
std::uniform_real_distribution<T> dist(min, max);
return dist(engine);
}
}
};