mirror of
https://github.com/zhenyan121/Cubed.git
synced 2026-06-18 00:27:02 +08:00
feat: add ChunkGenerator
This commit is contained in:
@@ -2,33 +2,11 @@
|
||||
|
||||
#include <Cubed/tools/log.hpp>
|
||||
|
||||
#include <atomic>
|
||||
|
||||
namespace Cubed {
|
||||
|
||||
unsigned Random::get_base_seed() {
|
||||
static unsigned base = [] {
|
||||
std::random_device rd;
|
||||
return rd();
|
||||
}();
|
||||
return base;
|
||||
}
|
||||
|
||||
unsigned Random::get_thread_seed() {
|
||||
static std::atomic<unsigned> counter{0};
|
||||
thread_local static unsigned seed = get_base_seed() + counter.fetch_add(1);
|
||||
return seed;
|
||||
}
|
||||
|
||||
Random::Random() {
|
||||
m_seed = get_thread_seed();
|
||||
Logger::info("Seed: {}", m_seed);
|
||||
m_engine.seed(m_seed);
|
||||
}
|
||||
|
||||
Random& Random::get() {
|
||||
thread_local Random instance;
|
||||
return instance;
|
||||
|
||||
}
|
||||
|
||||
bool Random::random_bool(double probability) {
|
||||
@@ -44,6 +22,9 @@ unsigned Random::seed() {
|
||||
return m_seed;
|
||||
}
|
||||
|
||||
|
||||
void Random::init(unsigned seed) {
|
||||
m_seed = seed;
|
||||
m_engine.seed(seed);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,16 +10,14 @@
|
||||
namespace Cubed {
|
||||
|
||||
|
||||
void PerlinNoise::init() {
|
||||
void PerlinNoise::init(unsigned seed) {
|
||||
p.resize(256);
|
||||
std::iota(p.begin(), p.end(), 0);
|
||||
auto seed = std::random_device{}();
|
||||
Logger::info("Init Perlin Noise With Seed {}", seed);
|
||||
std::shuffle(p.begin(), p.end(), std::mt19937(seed));
|
||||
|
||||
p.insert(p.end(), p.begin(), p.end());
|
||||
is_init = true;
|
||||
m_seed = seed;
|
||||
}
|
||||
|
||||
float PerlinNoise::noise(float x, float y, float z) {
|
||||
@@ -74,27 +72,15 @@ float PerlinNoise::grad(int hash, float x, float y, float z) {
|
||||
return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
|
||||
}
|
||||
|
||||
void PerlinNoise::reload() {
|
||||
if (!is_seed_change) {
|
||||
Logger::warn("Seed Not Change");
|
||||
return;
|
||||
}
|
||||
void PerlinNoise::reload(unsigned seed) {
|
||||
is_init = false;
|
||||
p.resize(256);
|
||||
std::iota(p.begin(), p.end(), 0);
|
||||
Logger::info("Reload Perlin Noise With Seed {}", m_seed);
|
||||
std::shuffle(p.begin(), p.end(), std::mt19937(m_seed));
|
||||
Logger::info("Reload Perlin Noise With Seed {}", seed);
|
||||
std::shuffle(p.begin(), p.end(), std::mt19937(seed));
|
||||
|
||||
p.insert(p.end(), p.begin(), p.end());
|
||||
is_init = true;
|
||||
is_seed_change = false;
|
||||
}
|
||||
|
||||
const unsigned& PerlinNoise::seed() {
|
||||
return m_seed;
|
||||
}
|
||||
void PerlinNoise::seed(unsigned seed) {
|
||||
m_seed = seed;
|
||||
is_seed_change = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user