diff --git a/other/build.nr b/other/build.nr index 78d529c..23357b1 100644 --- a/other/build.nr +++ b/other/build.nr @@ -1 +1 @@ -1908 +1909 diff --git a/src/ostd/Random.cpp b/src/ostd/Random.cpp index f65abc4..bf1013b 100755 --- a/src/ostd/Random.cpp +++ b/src/ostd/Random.cpp @@ -6,7 +6,7 @@ namespace ostd void RandomGenerator::seed(int64_t _seed) { m_engine.seed(_seed); - m_noiseGen.SetSeed(_seed); + m_noiseGen.SetSeed(_seed); m_seed = _seed; } @@ -14,85 +14,95 @@ namespace ostd { m_seed = std::chrono::steady_clock::now().time_since_epoch().count(); m_engine.seed(m_seed); - m_noiseGen.SetSeed(m_seed); + m_noiseGen.SetSeed(m_seed); } - + int64_t RandomGenerator::getSeed(void) { return m_seed; } - + float RandomGenerator::getf32(float min, float max) { + __swap_if_first_is_bigger(min, max); std::uniform_real_distribution dist(min, max); return dist(m_engine); } - + double RandomGenerator::getf64(double min, double max) { + __swap_if_first_is_bigger(min, max); std::uniform_real_distribution dist(min, max); return dist(m_engine); } - + uint64_t RandomGenerator::getui64(uint64_t min, uint64_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + uint32_t RandomGenerator::getui32(uint32_t min, uint32_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + uint16_t RandomGenerator::getui16(uint16_t min, uint16_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + uint8_t RandomGenerator::getui8(uint8_t min, uint8_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + int64_t RandomGenerator::geti64(int64_t min, int64_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + int32_t RandomGenerator::geti32(int32_t min, int32_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + int16_t RandomGenerator::geti16(int16_t min, int16_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + int8_t RandomGenerator::geti8(int8_t min, int8_t max) { + __swap_if_first_is_bigger(min, max); std::uniform_int_distribution dist(min, max); return dist(m_engine); } - + bool RandomGenerator::getb(float true_percentage) { return getf32() >= (1.0f - std::clamp(true_percentage, 0.0f, 1.0f)); } - + Vec2 RandomGenerator::getVec2(float min, float max, bool match_xy) { float x = getf32(min, max); return { x, (match_xy ? x : getf32(min, max)) }; } - + Vec2 RandomGenerator::getVec2(Vec2 minmax_x, Vec2 minmax_y) { return { getf32(minmax_x.x, minmax_x.y), getf32(minmax_y.x, minmax_y.y) }; @@ -103,5 +113,5 @@ namespace ostd m_noiseGen.SetNoiseType(FastNoiseLite::NoiseType_OpenSimplex2); return m_noiseGen.GetNoise(x, y); } - + } diff --git a/src/ostd/Random.hpp b/src/ostd/Random.hpp index d4ee341..410d57c 100755 --- a/src/ostd/Random.hpp +++ b/src/ostd/Random.hpp @@ -42,6 +42,16 @@ namespace ostd return list[index]; } + private: + template + inline void __swap_if_first_is_bigger(T& n1, T& n2) + { + if (n1 <= n2) return; + T n3 = n1; + n1 = n2; + n2 = n3; + } + private: int64_t m_seed { 0 }; std::mt19937_64 m_engine;