codename-routes/routes-native/src/stateserver/world/gen.rs

23 lines
807 B
Rust

use noise::{
utils::{NoiseMap, NoiseMapBuilder, PlaneMapBuilder},
Seedable, SuperSimplex,
};
use rand::{Rng, SeedableRng};
pub type GameRng = rand_xoshiro::Xoshiro256PlusPlus;
pub fn get_rng(seed: impl AsRef<[u8]> /* implemented by String */) -> GameRng {
// blake3::Hash is a [u8; 32] under the hood and implements From and Into to convert to and from it
let hash: [u8; 32] = blake3::hash(seed.as_ref()).into();
// Xoshiro256++ seeds are [u8; 32] :3
GameRng::from_seed(hash)
}
pub fn get_noise(rng: &mut GameRng, size: (usize, usize)) -> NoiseMap {
// rng.gen::<u32>() generates a random u32 which is already between 0 and u32::MAX
let noise = SuperSimplex::new().set_seed(rng.gen());
PlaneMapBuilder::new(&noise)
.set_size(size.0, size.1)
.build()
}