diff --git a/Cargo.lock b/Cargo.lock index b0ab8f8..edfcc2f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,6 +38,46 @@ dependencies = [ "memchr", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + [[package]] name = "anyhow" version = "1.0.70" @@ -155,6 +195,63 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +dependencies = [ + "clap_builder", + "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.13", +] + +[[package]] +name = "clap_lex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys 0.45.0", +] + [[package]] name = "concurrent-queue" version = "2.2.0" @@ -625,6 +722,7 @@ name = "mantle-diver" version = "0.1.0" dependencies = [ "anyhow", + "clap", "derivative", "egui", "egui-inspect", @@ -1035,6 +1133,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "syn" version = "1.0.109" @@ -1125,6 +1229,12 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "version-compare" version = "0.1.1" diff --git a/Cargo.toml b/Cargo.toml index 708bc8e..be9f16e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ serde = { version = "1.0.159", features = ["derive"] } log = "0.4.17" env_logger = "0.10.0" zstd = "0.12.3" +clap = { version = "4.2.1", features = ["derive"] } [dependencies.s2dc] #git = "https://github.com/crumblingstatue/s2dc.git" diff --git a/src/app.rs b/src/app.rs index a6b572e..f18a16d 100644 --- a/src/app.rs +++ b/src/app.rs @@ -18,6 +18,7 @@ use crate::{ input::Input, math::{center_offset, TILE_SIZE}, res::Res, + CliArgs, }; /// Application level state (includes game and ui state, etc.) @@ -38,7 +39,7 @@ pub struct App { } impl App { - pub fn new() -> anyhow::Result { + pub fn new(args: CliArgs) -> anyhow::Result { let rw = graphics::make_window(); let sf_egui = SfEgui::new(&rw); let mut res = Res::load()?; @@ -53,7 +54,7 @@ impl App { Ok(Self { rw, should_quit: false, - game: GameState::default(), + game: GameState::new(args.world_name), res, sf_egui, input: Input::default(), diff --git a/src/game.rs b/src/game.rs index 0f5077e..f95ccf2 100644 --- a/src/game.rs +++ b/src/game.rs @@ -113,6 +113,23 @@ impl GameState { lightmap.draw(&s); } } + + pub(crate) fn new(world_name: String) -> GameState { + let mut spawn_point = WorldPos::SURFACE_CENTER; + spawn_point.y -= 1104; + Self { + camera_offset: spawn_point, + world: World::new(spawn_point, &world_name), + gravity: 0.55, + tile_to_place: 1, + current_biome: Biome::Surface, + prev_biome: Biome::Surface, + worldgen: Worldgen::default(), + ambient_light: 0, + light_sources: Vec::new(), + tile_db: TileDb::load_or_default(), + } + } } pub fn for_each_tile_on_screen( @@ -135,22 +152,3 @@ pub fn for_each_tile_on_screen( } } } - -impl Default for GameState { - fn default() -> Self { - let mut spawn_point = WorldPos::SURFACE_CENTER; - spawn_point.y -= 1104; - Self { - camera_offset: spawn_point, - world: World::new(spawn_point, "TestWorld"), - gravity: 0.55, - tile_to_place: 1, - current_biome: Biome::Surface, - prev_biome: Biome::Surface, - worldgen: Worldgen::default(), - ambient_light: 0, - light_sources: Vec::new(), - tile_db: TileDb::load_or_default(), - } - } -} diff --git a/src/main.rs b/src/main.rs index 0fdeb02..33f4ce7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,10 +13,18 @@ mod world; mod worldgen; use app::App; +use clap::Parser; + +#[derive(Parser)] +pub struct CliArgs { + #[arg(default_value = "TestWorld")] + world_name: String, +} fn try_main() -> anyhow::Result<()> { gamedebug_core::set_enabled(true); - let mut app = App::new()?; + let cli_args = CliArgs::parse(); + let mut app = App::new(cli_args)?; app.do_game_loop(); Ok(()) }