add Squirrel Eiserloh's rng, and own helper

This commit is contained in:
2021-03-23 19:14:11 +01:00
parent 1f483b1752
commit 066457adba
11 changed files with 1157 additions and 1 deletions

View File

@ -6,6 +6,7 @@ add_subdirectory(logger)
add_subdirectory(resource_manager)
add_subdirectory(common_components)
add_subdirectory(std_utils)
add_subdirectory(random)
add_subdirectory(screen_director)
add_subdirectory(filesystem)
add_subdirectory(simple_scene)

View File

@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.2)
project(random CXX)
add_library(random
./src/mm/random/srng.hpp
./src/mm/random/srng.cpp
)
target_include_directories(random PUBLIC "src")
target_compile_features(random PUBLIC cxx_std_17)
target_link_libraries(random
PUBLIC
squirrel_noise
std_utils
)
##############################
#if (BUILD_TESTING)
#add_subdirectory(test)
#endif()

View File

@ -0,0 +1,2 @@
#include "./srng.hpp"

View File

@ -0,0 +1,57 @@
#pragma once
#include <squirrel_noise/RawNoise.hpp>
#include <mm/scalar_range2.hpp>
namespace MM::Random {
// Seeded (Pseudo-) Random Number Generator
struct SRNG {
uint32_t seed = 1337;
int32_t pos = 0;
// basic
uint32_t getNext(void) {
return SquirrelNoise4::Get1dNoiseUint32(pos++, seed);
}
float zeroToOne(void) {
return SquirrelNoise4::Get1dNoiseZeroToOne(pos++, seed);
}
float negOneToOne(void) {
return SquirrelNoise4::Get1dNoiseNegOneToOne(pos++, seed);
}
// advanced
uint32_t minMax(uint32_t min, uint32_t max) {
return (getNext() % ((max - min) + 1)) + min;
}
bool roll(float prob) {
return zeroToOne() <= prob;
}
// more advanced
// inclusive
// TODO: test for floats
template<typename T>
T range(const ScalarRange2<T>& range) {
return (getNext() % ((range.max() - range.min()) + 1)) + range.min();
}
// for conviniece
uint32_t operator()(void) {
return getNext();
}
bool operator()(float prob) {
return roll(prob);
}
};
} // MM::Random

View File

@ -22,4 +22,3 @@ if (BUILD_TESTING)
add_subdirectory(test)
endif()