le2d v0.4.7
2D game engine framework
 
Loading...
Searching...
No Matches
random.hpp
Go to the documentation of this file.
1#pragma once
2#include <glm/vec2.hpp>
3#include <klib/random.hpp>
4
5namespace le {
8template <typename Gen>
10 public:
12 explicit BasicRandom(std::uint32_t const seed) : m_gen(seed) {}
13
15 explicit(false) BasicRandom() : BasicRandom(std::random_device{}()) {}
16
18 template <std::integral Type = int>
19 [[nodiscard]] auto next_int(Type const lo, Type const hi) -> Type {
20 return klib::random_int(m_gen, lo, hi);
21 }
22
24 [[nodiscard]] auto next_index(std::size_t const size) -> std::size_t { return klib::random_index(m_gen, size); }
25
27 [[nodiscard]] auto next_float(float const lo, float const hi) { return klib::random_float(m_gen, lo, hi); }
28
30 [[nodiscard]] auto next_bool() -> bool { return next_int(0, 1) == 1; }
31
33 [[nodiscard]] auto next_sign() -> float { return next_bool() ? -1.0f : 1.0f; }
34
36 [[nodiscard]] auto next_vec2(glm::vec2 const lo, glm::vec2 const hi) -> glm::vec2 { return glm::vec2{next_float(lo.x, hi.x), next_float(lo.y, hi.y)}; }
38 [[nodiscard]] auto next_vec2(float const lo, float const hi) -> glm::vec2 { return next_vec2(glm::vec2{lo}, glm::vec2{hi}); }
39
41 [[nodiscard]] auto next_signed_float(float const positive_lo, float const positive_hi) -> float {
42 return next_sign() * next_float(positive_lo, positive_hi);
43 }
44
46 [[nodiscard]] auto next_signed_vec2(glm::vec2 const positive_lo, glm::vec2 const positive_hi) -> glm::vec2 {
47 return glm::vec2{next_signed_float(positive_lo.x, positive_hi.x), next_signed_float(positive_lo.y, positive_hi.y)};
48 }
50 [[nodiscard]] auto next_signed_vec2(float const positive_lo, float const positive_hi) -> glm::vec2 {
51 return next_signed_vec2(glm::vec2{positive_lo}, glm::vec2{positive_hi});
52 }
53
54 private:
55 Gen m_gen;
56};
57
59} // namespace le
Stateful random number generator.
Definition random.hpp:9
auto next_vec2(glm::vec2 const lo, glm::vec2 const hi) -> glm::vec2
Definition random.hpp:36
auto next_signed_float(float const positive_lo, float const positive_hi) -> float
Definition random.hpp:41
auto next_signed_vec2(float const positive_lo, float const positive_hi) -> glm::vec2
Definition random.hpp:50
auto next_signed_vec2(glm::vec2 const positive_lo, glm::vec2 const positive_hi) -> glm::vec2
Definition random.hpp:46
BasicRandom(std::uint32_t const seed)
Initialize generator with a custom seed.
Definition random.hpp:12
auto next_sign() -> float
Definition random.hpp:33
auto next_int(Type const lo, Type const hi) -> Type
Definition random.hpp:19
auto next_vec2(float const lo, float const hi) -> glm::vec2
Definition random.hpp:38
auto next_index(std::size_t const size) -> std::size_t
Definition random.hpp:24
auto next_float(float const lo, float const hi)
Definition random.hpp:27
auto next_bool() -> bool
Definition random.hpp:30
Definition animation.hpp:8