diff options
Diffstat (limited to 'server/bot/src/main.rs')
-rw-r--r-- | server/bot/src/main.rs | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/server/bot/src/main.rs b/server/bot/src/main.rs index 0e202894..08d17d19 100644 --- a/server/bot/src/main.rs +++ b/server/bot/src/main.rs @@ -20,6 +20,7 @@ pub mod algos; pub mod pathfinding; use anyhow::Result; +use clap::Parser; use hurrycurry_client_lib::{network::sync::Network, Game}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, @@ -38,17 +39,30 @@ pub trait BotAlgo { fn tick(&mut self, me: PlayerID, game: &Game, dt: f32) -> BotInput; } +#[derive(Parser)] +struct Args { + algo: String, + address: String, +} + fn main() -> Result<()> { env_logger::init_from_env("LOG"); rustls::crypto::ring::default_provider() .install_default() .unwrap(); - let mut network = Network::connect( - &std::env::args() - .nth(1) - .expect("usage: bot <websocket address>"), - )?; + let args = Args::parse(); + + let algo = args.algo.to_owned(); + let init_algo = move || -> Box<dyn BotAlgo> { + match algo.as_str() { + "test" => Box::new(algos::Test::default()), + "simple" => Box::new(algos::Simple::default()), + _ => panic!("unknown algo {algo:?}"), + } + }; + + let mut network = Network::connect(&args.address)?; let mut game = Game::default(); @@ -69,7 +83,7 @@ fn main() -> Result<()> { PacketC::Joined { id } => bots.push(BotDriver { id: *id, interacting: false, - state: Box::new(algos::test::Test::default()), + state: init_algo(), }), PacketC::Error { message } => { warn!("server error message: {message}"); |