testing noise

This commit is contained in:
griffi-gh 2023-01-27 01:04:01 +01:00
parent 294648b1b2
commit a7a1b44548
3 changed files with 19 additions and 15 deletions

View file

@ -11,9 +11,10 @@ env_logger = "0.10"
strum = { version = "0.24", features = ["derive"] } strum = { version = "0.24", features = ["derive"] }
glam = { version = "0.22", features = ["debug-glam-assert", "mint", "fast-math"] } glam = { version = "0.22", features = ["debug-glam-assert", "mint", "fast-math"] }
hashbrown = "0.13" hashbrown = "0.13"
noise = "0.8"
rayon = "1.6" rayon = "1.6"
shipyard = { version = "0.6", features = ["thread_local"] } shipyard = { version = "0.6", features = ["thread_local"] }
nohash-hasher = "0.2.0" nohash-hasher = "0.2.0"
anyhow = "1.0" anyhow = "1.0"
flume = "0.10" flume = "0.10"
#once_cell = "1.17"
bracket-noise = "0.8"

View file

@ -10,7 +10,7 @@ use super::{
pub enum ChunkTask { pub enum ChunkTask {
LoadChunk { LoadChunk {
seed: u32, seed: u64,
position: IVec3 position: IVec3
}, },
GenerateMesh { GenerateMesh {

View file

@ -1,26 +1,29 @@
use glam::IVec3; use glam::{IVec3, ivec3};
use bracket_noise::prelude::*;
use super::{ use super::{
chunk::{BlockData, CHUNK_SIZE}, chunk::{BlockData, CHUNK_SIZE},
block::Block block::Block
}; };
pub fn generate_world(position: IVec3, _seed: u32) -> BlockData { pub fn generate_world(chunk_position: IVec3, seed: u64) -> BlockData {
let offset = chunk_position * CHUNK_SIZE as i32;
let mut noise = FastNoise::seeded(seed);
noise.set_fractal_type(FractalType::FBM);
noise.set_frequency(0.1);
let mut blocks = Box::new([[[Block::Air; CHUNK_SIZE]; CHUNK_SIZE]; CHUNK_SIZE]); let mut blocks = Box::new([[[Block::Air; CHUNK_SIZE]; CHUNK_SIZE]; CHUNK_SIZE]);
//TODO actual world generation
if position.y == -1 { for x in 0..CHUNK_SIZE {
for x in 0..CHUNK_SIZE { for y in 0..CHUNK_SIZE {
for z in 0..CHUNK_SIZE { for z in 0..CHUNK_SIZE {
blocks[x][0][z] = Block::Grass; let position = ivec3(x as i32, y as i32, z as i32) + offset;
} let noise = noise.get_noise3d(position.x as f32, position.y as f32, position.z as f32);
} if noise > 0.8 {
} else if position.y < -1 { blocks[x][y][z] = Block::Stone;
for x in 0..CHUNK_SIZE {
for y in 0..CHUNK_SIZE {
for z in 0..CHUNK_SIZE {
blocks[x][y][z] = Block::Dirt;
} }
} }
} }
} }
blocks blocks
} }