seeding! hooray!

This commit is contained in:
zoe 2022-05-08 21:52:42 +02:00
parent 95a5eae1f6
commit 817f6898be
5 changed files with 18 additions and 6 deletions

Binary file not shown.

View File

@ -3,6 +3,7 @@ extends Node
export var xsize = 64 export var xsize = 64
export var ysize = 64 export var ysize = 64
export var zsize = 8 export var zsize = 8
export var cityname = "cool city"
func _ready(): func _ready():
StateServer.generate_world(xsize, ysize, zsize) StateServer.generate_world(xsize, ysize, zsize, cityname)

View File

@ -13,6 +13,7 @@ gdnative = {version = "0.10", features = ["async"]}
strum = { version = "0.24", features = ["derive"] } strum = { version = "0.24", features = ["derive"] }
strum_macros = "0.24" strum_macros = "0.24"
derive_builder = "0.11.2" derive_builder = "0.11.2"
rand_seeder = "0.2.3"
rand = "0.8.5" rand = "0.8.5"
toml = "0.5.9" toml = "0.5.9"

View File

@ -14,7 +14,7 @@ pub struct StateServer {
impl StateServer { impl StateServer {
fn new(_owner: &Node) -> Self { fn new(_owner: &Node) -> Self {
StateServer { 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) {} fn _ready(&self, _owner: &Node) {}
#[export] #[export]
fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize) { fn generate_world(&mut self, _owner: &Node, xsize: usize, ysize: usize, zsize: usize, seed: String) {
self.world = world::World::new(xsize, ysize, zsize); self.world = world::World::new(xsize, ysize, zsize, seed);
let w = self.world.generate(); let w = self.world.generate();
_owner.emit_signal("request_init", &[]); _owner.emit_signal("request_init", &[]);
_owner.emit_signal("changed_tiletypes", &[Variant::new(&w)]); _owner.emit_signal("changed_tiletypes", &[Variant::new(&w)]);

View File

@ -1,7 +1,10 @@
use gdnative::prelude::*; use gdnative::prelude::*;
use rand::{prelude::StdRng, SeedableRng};
use rand::prelude::*; use rand::prelude::*;
use rand_seeder::Seeder;
use strum::{EnumCount, IntoEnumIterator}; use strum::{EnumCount, IntoEnumIterator};
mod tiles; mod tiles;
pub struct World { pub struct World {
@ -9,6 +12,7 @@ pub struct World {
pub ysize: usize, pub ysize: usize,
pub zsize: usize, pub zsize: usize,
tiles: Vec<Vec<Vec<tiles::Tiletypes>>>, tiles: Vec<Vec<Vec<tiles::Tiletypes>>>,
seed: String,
} }
impl World { impl World {
@ -29,7 +33,7 @@ impl World {
} }
pub fn generate(&mut self) -> Vector3Array { 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); self.tiles = get_vec3(self.xsize, self.ysize, self.zsize);
let mut ret: Vector3Array = Vector3Array::new(); let mut ret: Vector3Array = Vector3Array::new();
for x in 0..self.xsize { for x in 0..self.xsize {
@ -45,12 +49,18 @@ impl World {
} }
ret 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 { World {
xsize, xsize,
ysize, ysize,
zsize, zsize,
tiles: get_vec3(xsize, ysize, zsize), tiles: get_vec3(xsize, ysize, zsize),
seed,
} }
} }
} }