galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
Random.hpp
Go to the documentation of this file.
1
7
8#ifndef GALAXY_MATH_RANDOM_HPP_
9#define GALAXY_MATH_RANDOM_HPP_
10
11#include <random>
12
13#include <SFML/System/Vector2.hpp>
14#include <SFML/System/Vector3.hpp>
15
17
18namespace galaxy
19{
20 namespace math
21 {
25 template<typename Type>
26 using conditional_distribution = std::conditional_t<
27 std::is_integral<Type>::value,
28 std::uniform_int_distribution<Type>,
29 std::conditional_t<std::is_floating_point<Type>::value, std::uniform_real_distribution<Type>, void>>;
30
36 class Random final
37 {
38 public:
42 Random() noexcept;
43
47 ~Random() noexcept;
48
59 template<meta::is_arithmetic T>
60 [[nodiscard]]
61 T gen(const T min, const T max) noexcept;
62
73
74 template<meta::is_arithmetic T>
75 [[nodiscard]]
76 sf::Vector2<T> gen_vec2(const sf::Vector2<T>& min, const sf::Vector2<T>& max) noexcept;
77
88 template<meta::is_arithmetic T>
89 [[nodiscard]]
90 sf::Vector3<T> gen_vec3(const sf::Vector3<T>& min, const sf::Vector3<T>& max) noexcept;
91
92 private:
96 std::random_device m_rd;
97
101 std::mt19937_64 m_mt;
102 };
103
104 template<meta::is_arithmetic T>
105 T Random::gen(const T min, const T max) noexcept
106 {
107 conditional_distribution<T> dist {min, max};
108 return dist(m_mt);
109 }
110
111 template<meta::is_arithmetic T>
112 sf::Vector2<T> Random::gen_vec2(const sf::Vector2<T>& min, const sf::Vector2<T>& max) noexcept
113 {
114 return sf::Vector2<T> {gen<T>(min.x, max.x), gen<T>(min.y, max.y)};
115 }
116
117 template<meta::is_arithmetic T>
118 sf::Vector3<T> Random::gen_vec3(const sf::Vector3<T>& min, const sf::Vector3<T>& max) noexcept
119 {
120 return sf::Vector3<T> {gen<T>(min.x, max.x), gen<T>(min.y, max.y), gen<T>(min.z, max.z)};
121 }
122 } // namespace math
123} // namespace galaxy
124
125#endif
Generates random numbers.
Definition Random.hpp:37
std::random_device m_rd
Randomizer device.
Definition Random.hpp:96
~Random() noexcept
Destructor.
Definition Random.cpp:20
T gen(const T min, const T max) noexcept
Generate a random number of type T.
Definition Random.hpp:105
sf::Vector2< T > gen_vec2(const sf::Vector2< T > &min, const sf::Vector2< T > &max) noexcept
Generate a random vec2.
Definition Random.hpp:112
sf::Vector3< T > gen_vec3(const sf::Vector3< T > &min, const sf::Vector3< T > &max) noexcept
Generate a random vec3.
Definition Random.hpp:118
Random() noexcept
Constructor.
Definition Random.cpp:14
std::mt19937_64 m_mt
Pseudo-random algorithm.
Definition Random.hpp:101
std::conditional_t< std::is_integral< Type >::value, std::uniform_int_distribution< Type >, std::conditional_t< std::is_floating_point< Type >::value, std::uniform_real_distribution< Type >, void > > conditional_distribution
Source: http://stackoverflow.com/a/32907541.
Definition Random.hpp:26
Timer.hpp galaxy.
Definition Async.hpp:17