diff --git a/godot/native/libroutes_native.so b/godot/native/libroutes_native.so index 6ebb6aa..f594a26 100755 Binary files a/godot/native/libroutes_native.so and b/godot/native/libroutes_native.so differ diff --git a/godot/world/StateApi.gd b/godot/world/StateApi.gd index cd9231f..aa6f698 100644 --- a/godot/world/StateApi.gd +++ b/godot/world/StateApi.gd @@ -3,6 +3,7 @@ extends Node export var xsize = 64 export var ysize = 64 export var zsize = 8 +export var cityname = "cool city" func _ready(): - StateServer.generate_world(xsize, ysize, zsize) + StateServer.generate_world(xsize, ysize, zsize, cityname) diff --git a/routes-native/Cargo.toml b/routes-native/Cargo.toml index f483214..42fcf9f 100644 --- a/routes-native/Cargo.toml +++ b/routes-native/Cargo.toml @@ -13,6 +13,7 @@ gdnative = {version = "0.10", features = ["async"]} strum = { version = "0.24", features = ["derive"] } strum_macros = "0.24" derive_builder = "0.11.2" +rand_seeder = "0.2.3" rand = "0.8.5" toml = "0.5.9" diff --git a/routes-native/src/stateserver.rs b/routes-native/src/stateserver.rs index b0e4de5..9ff061d 100644 --- a/routes-native/src/stateserver.rs +++ b/routes-native/src/stateserver.rs @@ -14,7 +14,7 @@ pub struct StateServer { impl StateServer { fn new(_owner: &Node) -> Self { StateServer { - world: world::World::new(0, 0, 0), + world: world::World::new(0, 0, 0, "seed".to_string()), } } @@ -32,8 +32,8 @@ impl StateServer { fn _ready(&self, _owner: &Node) {} #[export] - fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize) { - self.world = world::World::new(xsize, ysize, zsize); + fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize, seed: String) { + self.world = world::World::new(xsize, ysize, zsize, seed); let w = self.world.generate(); _owner.emit_signal("request_init", &[]); _owner.emit_signal("changed_tiletypes", &[Variant::new(&w)]); diff --git a/routes-native/src/stateserver/world.rs b/routes-native/src/stateserver/world.rs index 48477a3..71efda2 100644 --- a/routes-native/src/stateserver/world.rs +++ b/routes-native/src/stateserver/world.rs @@ -1,7 +1,10 @@ use gdnative::prelude::*; +use rand::{prelude::StdRng, SeedableRng}; use rand::prelude::*; +use rand_seeder::Seeder; use strum::{EnumCount, IntoEnumIterator}; + mod tiles; pub struct World { @@ -9,6 +12,7 @@ pub struct World { pub ysize: usize, pub zsize: usize, tiles: Vec>>, + seed: String, } impl World { @@ -29,7 +33,7 @@ impl World { } pub fn generate(&mut self) -> Vector3Array { - let mut rng = thread_rng(); + let mut rng: StdRng = Seeder::from(self.seed.to_owned()).make_rng(); self.tiles = get_vec3(self.xsize, self.ysize, self.zsize); let mut ret: Vector3Array = Vector3Array::new(); for x in 0..self.xsize { @@ -45,12 +49,18 @@ impl World { } ret } - pub fn new(xsize: usize, ysize: usize, zsize: usize) -> World { + + fn tile_at(&self, x: usize, y: usize, z:usize) -> tiles::Tiletypes { + tiles::Tiletypes::Air + } + + pub fn new(xsize: usize, ysize: usize, zsize: usize, seed: String) -> World { World { xsize, ysize, zsize, tiles: get_vec3(xsize, ysize, zsize), + seed, } } }