Merge branch 'juliancoffee/resizeable_map' into 'master'

Add size parameter to map_file opts

See merge request veloren/veloren!2975
This commit is contained in:
Treeco 2021-11-19 22:50:24 +00:00
commit 3018942291
2 changed files with 41 additions and 7 deletions

View File

@ -49,7 +49,7 @@ fn main() {
seed_elements: false,
world_file: sim::FileOpts::LoadAsset(veloren_world::sim::DEFAULT_WORLD_MAP.into()),
// world_file: sim::FileOpts::Load(_map_file),
// world_file: sim::FileOpts::Save,
// world_file: sim::FileOpts::Save(sim::SizeOpts::default()),
..WorldOpts::default()
},
&threadpool,

View File

@ -134,14 +134,32 @@ pub(crate) struct GenCtx {
pub uplift_nz: Worley,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(default)]
pub struct SizeOpts {
x_lg: u32,
y_lg: u32,
scale: f64,
}
impl Default for SizeOpts {
fn default() -> Self {
Self {
x_lg: 10,
y_lg: 10,
scale: 2.0,
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum FileOpts {
/// If set, generate the world map and do not try to save to or load from
/// file (default).
Generate,
Generate(SizeOpts),
/// If set, generate the world map and save the world file (path is created
/// the same way screenshot paths are).
Save,
Save(SizeOpts),
/// If set, load the world file from this path in legacy format (errors if
/// path not found). This option may be removed at some point, since it
/// only applies to maps generated before map saving was merged into
@ -158,7 +176,7 @@ pub enum FileOpts {
}
impl Default for FileOpts {
fn default() -> Self { Self::Generate }
fn default() -> Self { Self::Generate(SizeOpts::default()) }
}
pub struct WorldOpts {
@ -441,7 +459,7 @@ impl WorldSim {
return None;
},
},
FileOpts::Generate | FileOpts::Save => return None,
FileOpts::Generate { .. } | FileOpts::Save { .. } => return None,
};
match map {
@ -474,9 +492,25 @@ impl WorldSim {
None
},
})
.unwrap_or((None, DEFAULT_WORLD_CHUNKS_LG));
.unwrap_or_else(|| {
let size_lg = match opts.world_file {
FileOpts::Generate(SizeOpts { x_lg, y_lg, .. })
| FileOpts::Save(SizeOpts { x_lg, y_lg, .. }) => {
MapSizeLg::new(Vec2 { x: x_lg, y: y_lg }).unwrap_or_else(|e| {
warn!("World size does not satisfy invariants: {:?}", e);
DEFAULT_WORLD_CHUNKS_LG
})
},
_ => DEFAULT_WORLD_CHUNKS_LG,
};
(None, size_lg)
});
let continent_scale_hack = if let Some(map) = &parsed_world_file {
map.continent_scale_hack
} else if let FileOpts::Generate(SizeOpts { scale, .. })
| FileOpts::Save(SizeOpts { scale, .. }) = opts.world_file
{
scale
} else {
continent_scale_hack
};
@ -1107,7 +1141,7 @@ impl WorldSim {
basement,
});
(|| {
if let FileOpts::Save = opts.world_file {
if let FileOpts::Save { .. } = opts.world_file {
use std::time::SystemTime;
// Check if folder exists and create it if it does not
let mut path = PathBuf::from("./maps");