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 <glm/vec2.hpp>
14#include <glm/vec3.hpp>
15#include <glm/vec4.hpp>
16
18
19namespace galaxy
20{
21 namespace math
22 {
26 template<typename Type>
27 using conditional_distribution = std::conditional_t<
28 std::is_integral<Type>::value,
29 std::uniform_int_distribution<Type>,
30 std::conditional_t<std::is_floating_point<Type>::value, std::uniform_real_distribution<Type>, void>>;
31
42 template<meta::is_arithmetic T>
43 [[nodiscard]]
44 inline T random(const T min, const T max) noexcept
45 {
46 thread_local std::random_device rd;
47 thread_local std::mt19937_64 mt {rd()};
48
49 conditional_distribution<T> dist {min, max};
50 return dist(mt);
51 }
52
61 [[nodiscard]]
62 glm::vec2 random_vec2(const glm::vec2& min, const glm::vec2& max) noexcept;
63
72 [[nodiscard]]
73 glm::vec3 random_vec3(const glm::vec3& min, const glm::vec3& max) noexcept;
74
83 [[nodiscard]]
84 glm::vec4 random_vec4(const glm::vec4& min, const glm::vec4& max) noexcept;
85 } // namespace math
86} // namespace galaxy
87
88#endif
glm::vec3 random_vec3(const glm::vec3 &min, const glm::vec3 &max) noexcept
Generate a random vec3.
Definition Random.cpp:19
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:27
glm::vec2 random_vec2(const glm::vec2 &min, const glm::vec2 &max) noexcept
Generate a random vec2.
Definition Random.cpp:14
glm::vec4 random_vec4(const glm::vec4 &min, const glm::vec4 &max) noexcept
Generate a random vec4.
Definition Random.cpp:24
T random(const T min, const T max) noexcept
Generate a random number of type T.
Definition Random.hpp:44
Timer.hpp galaxy.
Definition Timer.cpp:18