mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-18 18:56:36 +02:00
add Squirrel Eiserloh's rng, and own helper
This commit is contained in:
@ -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)
|
||||
|
24
framework/random/CMakeLists.txt
Normal file
24
framework/random/CMakeLists.txt
Normal 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()
|
||||
|
2
framework/random/src/mm/random/srng.cpp
Normal file
2
framework/random/src/mm/random/srng.cpp
Normal file
@ -0,0 +1,2 @@
|
||||
#include "./srng.hpp"
|
||||
|
57
framework/random/src/mm/random/srng.hpp
Normal file
57
framework/random/src/mm/random/srng.hpp
Normal 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
|
||||
|
@ -22,4 +22,3 @@ if (BUILD_TESTING)
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user