mirror of
https://git.kittycat.homes/zoe/codename-routes.git
synced 2024-08-15 03:18:26 +00:00
hooray! simplex noise
This commit is contained in:
parent
c2c9d9b3e3
commit
b6fbb204f1
10 changed files with 189 additions and 108 deletions
|
@ -16,6 +16,7 @@ derive_builder = "0.11.2"
|
|||
rand_seeder = "0.2.3"
|
||||
rand = "0.8.5"
|
||||
toml = "0.5.9"
|
||||
noise = "0.7.0"
|
||||
|
||||
[profile.dev.package."*"]
|
||||
opt-level = 3
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
use gdnative::prelude::*;
|
||||
use rand::prelude::StdRng;
|
||||
use rand::seq::SliceRandom;
|
||||
use rand_seeder::Seeder;
|
||||
|
||||
mod gen;
|
||||
mod tiles;
|
||||
|
||||
pub struct World {
|
||||
|
@ -32,40 +30,26 @@ impl World {
|
|||
}
|
||||
|
||||
pub fn generate(&mut self) -> Vector3Array {
|
||||
let mut rng: StdRng = Seeder::from(self.seed.to_owned()).make_rng();
|
||||
self.tiles = get_vec3(self.xsize, self.ysize, self.zsize);
|
||||
let mut rng = gen::get_rng(self.seed.to_owned());
|
||||
let noisemap = gen::get_noise(&mut rng, (self.xsize, self.ysize));
|
||||
|
||||
// fill edges with water
|
||||
for x in 0..self.ysize {
|
||||
self.tiles[x][0][0] = tiles::Tiletypes::WaterSlab;
|
||||
self.tiles[x][self.ysize - 1][0] = tiles::Tiletypes::WaterSlab;
|
||||
}
|
||||
for y in 0..self.xsize {
|
||||
self.tiles[0][y][0] = tiles::Tiletypes::WaterSlab;
|
||||
self.tiles[self.xsize - 1][y][0] = tiles::Tiletypes::WaterSlab;
|
||||
}
|
||||
|
||||
for x in 1..self.xsize - 1 {
|
||||
for y in 1..self.ysize - 1 {
|
||||
if self.tile_is_next_to(x, y, 0, tiles::Tiletypes::WaterSlab){
|
||||
let available = vec![tiles::Tiletypes::WaterSlab, tiles::Tiletypes::Sand];
|
||||
self.tiles[x][y][0] = available.choose(&mut rng).unwrap().to_owned();
|
||||
}
|
||||
else if self.tile_is_next_to(x, y, 0, tiles::Tiletypes::Sand) {
|
||||
let available = vec![tiles::Tiletypes::Grass, tiles::Tiletypes::Sand];
|
||||
self.tiles[x][y][0] = available.choose(&mut rng).unwrap().to_owned();
|
||||
}
|
||||
else {
|
||||
self.tiles[x][y][0] = tiles::Tiletypes::Air;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// return array with all changed tiles, needs rework
|
||||
let mut ret: Vector3Array = Vector3Array::new();
|
||||
for x in 0..self.xsize {
|
||||
for y in 0..self.ysize {
|
||||
for z in 0..self.zsize {
|
||||
ret.push(Vector3::new(x as f32, y as f32, z as f32));
|
||||
ret.push(Vector3::new(x as f32, y as f32, 0.0));
|
||||
if noisemap.get_value(x, y) > 0.5 {
|
||||
self.tiles[x][y][0] = tiles::Tiletypes::Rock;
|
||||
}
|
||||
else if noisemap.get_value(x, y) > 0.0 {
|
||||
self.tiles[x][y][0] = tiles::Tiletypes::Grass;
|
||||
}
|
||||
else if noisemap.get_value(x, y) > -0.1 {
|
||||
self.tiles[x][y][0] = tiles::Tiletypes::Sand;
|
||||
}
|
||||
else {
|
||||
self.tiles[x][y][0] = tiles::Tiletypes::WaterSlab;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
14
routes-native/src/stateserver/world/gen.rs
Normal file
14
routes-native/src/stateserver/world/gen.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
use rand::{prelude::StdRng, Rng};
|
||||
use noise::{Seedable, utils::{PlaneMapBuilder, NoiseMapBuilder, NoiseMap}, SuperSimplex};
|
||||
use rand_seeder::Seeder;
|
||||
|
||||
pub fn get_rng(seed: String) -> StdRng{
|
||||
Seeder::from(seed).make_rng()
|
||||
}
|
||||
|
||||
pub fn get_noise(rng: &mut StdRng, size: (usize, usize)) -> NoiseMap{
|
||||
let noise = SuperSimplex::new().set_seed(rng.gen_range(0..u32::MAX));
|
||||
PlaneMapBuilder::new(&noise)
|
||||
.set_size(size.0, size.1)
|
||||
.build()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue