mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Made the worldgen noise generators seed from the RNG and got rid of zerocopy.
This commit is contained in:
parent
c423cabbc6
commit
1dfbe40731
22
Cargo.lock
generated
22
Cargo.lock
generated
@ -3695,7 +3695,6 @@ dependencies = [
|
||||
"rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vek 0.9.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"veloren-common 0.3.0",
|
||||
"zerocopy 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3885,25 +3884,6 @@ name = "xml-rs"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"zerocopy-derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[metadata]
|
||||
"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
|
||||
"checksum aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
|
||||
@ -4324,5 +4304,3 @@ dependencies = [
|
||||
"checksum x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "be65e1342a3baae65439cd03306778831a3d133b0d20243a7fb83fd5cf403c58"
|
||||
"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
|
||||
"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
|
||||
"checksum zerocopy 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "992b9b31f80fd4a167f903f879b8ca43d6716cc368ea01df90538baa2dd34056"
|
||||
"checksum zerocopy-derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b090467ecd0624026e8a6405d343ac7382592530d54881330b3fc8e400280fa5"
|
||||
|
@ -12,7 +12,6 @@ hashbrown = { version = "0.5.0", features = ["serde", "nightly"] }
|
||||
lazy_static = "1.3.0"
|
||||
rand = "0.7.0"
|
||||
rand_chacha = "0.2.1"
|
||||
zerocopy = "0.2.8"
|
||||
|
||||
[dev-dependencies]
|
||||
minifb = { git = "https://github.com/emoon/rust_minifb.git" }
|
||||
|
@ -103,50 +103,46 @@ pub struct WorldSim {
|
||||
}
|
||||
|
||||
impl WorldSim {
|
||||
pub fn generate(mut seed: u32) -> Self {
|
||||
let seed = &mut seed;
|
||||
let mut gen_seed = || {
|
||||
*seed = seed_expan::diffuse(*seed);
|
||||
*seed
|
||||
};
|
||||
pub fn generate(seed: u32) -> Self {
|
||||
let mut rng = ChaChaRng::from_seed(seed_expan::rng_state(seed));
|
||||
|
||||
let mut gen_ctx = GenCtx {
|
||||
turb_x_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
turb_y_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
chaos_nz: RidgedMulti::new().set_octaves(7).set_seed(gen_seed()),
|
||||
hill_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
turb_x_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
turb_y_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
chaos_nz: RidgedMulti::new().set_octaves(7).set_seed(rng.gen()),
|
||||
hill_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
alt_nz: HybridMulti::new()
|
||||
.set_octaves(8)
|
||||
.set_persistence(0.1)
|
||||
.set_seed(gen_seed()),
|
||||
temp_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
dry_nz: BasicMulti::new().set_seed(gen_seed()),
|
||||
small_nz: BasicMulti::new().set_octaves(2).set_seed(gen_seed()),
|
||||
rock_nz: HybridMulti::new().set_persistence(0.3).set_seed(gen_seed()),
|
||||
cliff_nz: HybridMulti::new().set_persistence(0.3).set_seed(gen_seed()),
|
||||
warp_nz: FastNoise::new(gen_seed()), //BasicMulti::new().set_octaves(3).set_seed(gen_seed()),
|
||||
.set_seed(rng.gen()),
|
||||
temp_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
dry_nz: BasicMulti::new().set_seed(rng.gen()),
|
||||
small_nz: BasicMulti::new().set_octaves(2).set_seed(rng.gen()),
|
||||
rock_nz: HybridMulti::new().set_persistence(0.3).set_seed(rng.gen()),
|
||||
cliff_nz: HybridMulti::new().set_persistence(0.3).set_seed(rng.gen()),
|
||||
warp_nz: FastNoise::new(rng.gen()), //BasicMulti::new().set_octaves(3).set_seed(gen_seed()),
|
||||
tree_nz: BasicMulti::new()
|
||||
.set_octaves(12)
|
||||
.set_persistence(0.75)
|
||||
.set_seed(gen_seed()),
|
||||
cave_0_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
cave_1_nz: SuperSimplex::new().set_seed(gen_seed()),
|
||||
.set_seed(rng.gen()),
|
||||
cave_0_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
cave_1_nz: SuperSimplex::new().set_seed(rng.gen()),
|
||||
|
||||
structure_gen: StructureGen2d::new(gen_seed(), 32, 24),
|
||||
region_gen: StructureGen2d::new(gen_seed(), 400, 96),
|
||||
cliff_gen: StructureGen2d::new(gen_seed(), 80, 56),
|
||||
structure_gen: StructureGen2d::new(rng.gen(), 32, 24),
|
||||
region_gen: StructureGen2d::new(rng.gen(), 400, 96),
|
||||
cliff_gen: StructureGen2d::new(rng.gen(), 80, 56),
|
||||
humid_nz: Billow::new()
|
||||
.set_octaves(12)
|
||||
.set_persistence(0.125)
|
||||
.set_frequency(1.0)
|
||||
// .set_octaves(6)
|
||||
// .set_persistence(0.5)
|
||||
.set_seed(gen_seed()),
|
||||
.set_seed(rng.gen()),
|
||||
|
||||
fast_turb_x_nz: FastNoise::new(gen_seed()),
|
||||
fast_turb_y_nz: FastNoise::new(gen_seed()),
|
||||
fast_turb_x_nz: FastNoise::new(rng.gen()),
|
||||
fast_turb_y_nz: FastNoise::new(rng.gen()),
|
||||
|
||||
town_gen: StructureGen2d::new(gen_seed(), 2048, 1024),
|
||||
town_gen: StructureGen2d::new(rng.gen(), 2048, 1024),
|
||||
};
|
||||
|
||||
// "Base" of the chunk, to be multiplied by CONFIG.mountain_scale (multiplied value is
|
||||
@ -298,11 +294,11 @@ impl WorldSim {
|
||||
}
|
||||
|
||||
let mut this = Self {
|
||||
seed: *seed,
|
||||
seed: seed,
|
||||
chunks,
|
||||
locations: Vec::new(),
|
||||
gen_ctx,
|
||||
rng: ChaChaRng::from_seed(seed_expan::rng_state(*seed)),
|
||||
rng,
|
||||
};
|
||||
|
||||
this.seed_elements();
|
||||
|
@ -1,4 +1,13 @@
|
||||
use zerocopy::AsBytes;
|
||||
fn cast_u32x8_u8x32(a: [u32; 8]) -> [u8; 32] {
|
||||
let mut r = [0; 32];
|
||||
for i in 0..8 {
|
||||
let a = a[i].to_ne_bytes();
|
||||
for j in 0..4 {
|
||||
r[i * 4 + j] = a[j];
|
||||
}
|
||||
}
|
||||
r
|
||||
}
|
||||
|
||||
/// Simple non-cryptographic diffusion function.
|
||||
pub fn diffuse(mut x: u32) -> u32 {
|
||||
@ -8,6 +17,7 @@ pub fn diffuse(mut x: u32) -> u32 {
|
||||
x = x.wrapping_add(0xd3a2646c) ^ (x << 9);
|
||||
x = x.wrapping_add(0xfd7046c5).wrapping_add(x << 3);
|
||||
x = (x ^ 0xb55a4f09) ^ (x >> 16);
|
||||
x = x.wrapping_add((1 << 31) - 1) ^ (x << 13);
|
||||
x
|
||||
}
|
||||
|
||||
@ -18,8 +28,5 @@ pub fn rng_state(mut x: u32) -> [u8; 32] {
|
||||
x = diffuse(x);
|
||||
*s = x;
|
||||
}
|
||||
let bytes = r.as_bytes();
|
||||
let mut a: [u8; 32] = [0; 32];
|
||||
a.copy_from_slice(bytes);
|
||||
a
|
||||
cast_u32x8_u8x32(r)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user