random.h

cross platform rendering playground

src/core/random.h

626 B
#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);
        }
    }
};