From b5a8fee243c6a4e57238bf863b57f716453e3c12 Mon Sep 17 00:00:00 2001 From: Snowiiii Date: Tue, 19 Nov 2024 22:54:58 +0100 Subject: [PATCH] pumpkin-world: Expose Seed --- pumpkin-world/Cargo.toml | 1 + pumpkin-world/src/level.rs | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pumpkin-world/Cargo.toml b/pumpkin-world/Cargo.toml index d3590bb74..85537ec3e 100644 --- a/pumpkin-world/Cargo.toml +++ b/pumpkin-world/Cargo.toml @@ -5,6 +5,7 @@ edition.workspace = true [dependencies] pumpkin-core = { path = "../pumpkin-core" } +pumpkin-config = { path = "../pumpkin-config" } pumpkin-macros = { path = "../pumpkin-macros" } tokio.workspace = true diff --git a/pumpkin-world/src/level.rs b/pumpkin-world/src/level.rs index c65e4cb64..8a7bab97f 100644 --- a/pumpkin-world/src/level.rs +++ b/pumpkin-world/src/level.rs @@ -2,6 +2,7 @@ use std::{path::PathBuf, sync::Arc}; use dashmap::{DashMap, Entry}; use num_traits::Zero; +use pumpkin_config::BASIC_CONFIG; use pumpkin_core::math::vector2::Vector2; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; use tokio::{ @@ -28,6 +29,7 @@ pub type ConcurrentChunkResult = Vec<(Vector2, JoinHandle<()>)>; /// /// For more details on world generation, refer to the `WorldGenerator` module. pub struct Level { + pub seed: Seed, save_file: Option, loaded_chunks: Arc, Arc>>>, chunk_watchers: Arc, usize>>, @@ -41,17 +43,26 @@ pub struct SaveFile { pub region_folder: PathBuf, } +fn get_or_create_seed() -> Seed { + // TODO: if there is a seed in the config (!= 0) use it. Otherwise make a random one + Seed::from(BASIC_CONFIG.seed.as_str()) +} + impl Level { pub fn from_root_folder(root_folder: PathBuf) -> Self { - let world_gen = get_world_gen(Seed(0)).into(); // TODO Read Seed from config. + // If we are using an already existing world we want to read the seed from the level.dat, If not we want to check if there is a seed in the config, if not lets create a random one if root_folder.exists() { let region_folder = root_folder.join("region"); assert!( region_folder.exists(), "World region folder does not exist, despite there being a root folder." ); + // TODO: read seed from level.dat + let seed = Seed(0); + let world_gen = get_world_gen(seed).into(); // TODO Read Seed from config. Self { + seed, world_gen, save_file: Some(SaveFile { root_folder, @@ -62,7 +73,10 @@ impl Level { chunk_watchers: Arc::new(DashMap::new()), } } else { + let seed = get_or_create_seed(); + let world_gen = get_world_gen(seed).into(); // TODO Read Seed from config. Self { + seed, world_gen, save_file: None, chunk_reader: Arc::new(AnvilChunkReader::new()),