diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-12 16:25:31 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-12 16:25:31 +0200 |
commit | 00c1c6af949ae50c2b061919a76ac5a0bb061791 (patch) | |
tree | c559b73807146a5046f572aaf051c08879ef7d48 | |
parent | 2a81c045deffa481d4021f3ef960e2fb706ff011 (diff) | |
download | hurrycurry-00c1c6af949ae50c2b061919a76ac5a0bb061791.tar hurrycurry-00c1c6af949ae50c2b061919a76ac5a0bb061791.tar.bz2 hurrycurry-00c1c6af949ae50c2b061919a76ac5a0bb061791.tar.zst |
bot: make crate hybrid
-rw-r--r-- | server/bot/src/algos/mod.rs | 30 | ||||
-rw-r--r-- | server/bot/src/algos/simple.rs | 17 | ||||
-rw-r--r-- | server/bot/src/algos/test.rs | 17 | ||||
-rw-r--r-- | server/bot/src/algos/waiter.rs | 17 | ||||
-rw-r--r-- | server/bot/src/lib.rs | 19 | ||||
-rw-r--r-- | server/bot/src/main.rs | 48 |
6 files changed, 109 insertions, 39 deletions
diff --git a/server/bot/src/algos/mod.rs b/server/bot/src/algos/mod.rs index 8b006700..7b165da4 100644 --- a/server/bot/src/algos/mod.rs +++ b/server/bot/src/algos/mod.rs @@ -1,8 +1,30 @@ -mod simple; -pub use simple::Simple; +/* + Hurry Curry! - a game about cooking + Copyright 2024 metamuffin -mod test; -pub use test::Test; + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ +mod simple; +mod test; mod waiter; + +pub use simple::Simple; +pub use test::Test; pub use waiter::Waiter; + +pub const ALGO_CONSTRUCTORS: &'static [(&'static str, fn() -> Box<dyn crate::BotAlgo>)] = &[ + ("test", || Box::new(Test::default())), + ("simple", || Box::new(Simple::default())), + ("waiter", || Box::new(Waiter::default())), +]; diff --git a/server/bot/src/algos/simple.rs b/server/bot/src/algos/simple.rs index 1288aaaf..22ed50bd 100644 --- a/server/bot/src/algos/simple.rs +++ b/server/bot/src/algos/simple.rs @@ -1,3 +1,20 @@ +/* + Hurry Curry! - a game about cooking + Copyright 2024 metamuffin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ use crate::{ pathfinding::{find_path_to_neighbour, Path}, BotAlgo, BotInput, diff --git a/server/bot/src/algos/test.rs b/server/bot/src/algos/test.rs index d17b079d..d56aa00b 100644 --- a/server/bot/src/algos/test.rs +++ b/server/bot/src/algos/test.rs @@ -1,3 +1,20 @@ +/* + Hurry Curry! - a game about cooking + Copyright 2024 metamuffin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ use crate::{ pathfinding::{find_path_to_neighbour, Path}, BotAlgo, BotInput, diff --git a/server/bot/src/algos/waiter.rs b/server/bot/src/algos/waiter.rs index 364f26c8..7a25108b 100644 --- a/server/bot/src/algos/waiter.rs +++ b/server/bot/src/algos/waiter.rs @@ -1,3 +1,20 @@ +/* + Hurry Curry! - a game about cooking + Copyright 2024 metamuffin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, version 3 of the License only. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ use super::simple::State; use crate::{algos::simple::Context, pathfinding::Path, BotAlgo, BotInput}; use hurrycurry_client_lib::Game; diff --git a/server/bot/src/lib.rs b/server/bot/src/lib.rs new file mode 100644 index 00000000..e8f05fd6 --- /dev/null +++ b/server/bot/src/lib.rs @@ -0,0 +1,19 @@ +#![feature(isqrt)] +pub mod algos; +pub mod pathfinding; + +use hurrycurry_client_lib::Game; +use hurrycurry_protocol::{ + glam::{IVec2, Vec2}, + PlayerID, +}; + +#[derive(Default, Clone, Copy)] +pub struct BotInput { + pub direction: Vec2, + pub boost: bool, + pub interact: Option<IVec2>, +} +pub trait BotAlgo { + fn tick(&mut self, me: PlayerID, game: &Game, dt: f32) -> BotInput; +} diff --git a/server/bot/src/main.rs b/server/bot/src/main.rs index 1ebe0b88..9e3fbee1 100644 --- a/server/bot/src/main.rs +++ b/server/bot/src/main.rs @@ -15,36 +15,26 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -#![feature(isqrt)] -pub mod algos; -pub mod pathfinding; - use anyhow::Result; +use bot::{algos::ALGO_CONSTRUCTORS, BotAlgo, BotInput}; use clap::Parser; use hurrycurry_client_lib::{network::sync::Network, Game}; -use hurrycurry_protocol::{ - glam::{IVec2, Vec2}, - PacketC, PacketS, PlayerID, -}; +use hurrycurry_protocol::{PacketC, PacketS, PlayerID}; use log::warn; use std::{thread::sleep, time::Duration}; -#[derive(Default, Clone, Copy)] -pub struct BotInput { - direction: Vec2, - boost: bool, - interact: Option<IVec2>, -} -pub trait BotAlgo { - fn tick(&mut self, me: PlayerID, game: &Game, dt: f32) -> BotInput; -} - #[derive(Parser)] struct Args { algo: String, address: String, } +pub struct BotDriver { + pub interacting: bool, + id: PlayerID, + state: Box<dyn BotAlgo>, +} + fn main() -> Result<()> { env_logger::init_from_env("LOG"); rustls::crypto::ring::default_provider() @@ -53,16 +43,6 @@ fn main() -> Result<()> { 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()), - "waiter" => Box::new(algos::Waiter::default()), - _ => panic!("unknown algo {algo:?}"), - } - }; - let mut network = Network::connect(&args.address)?; let mut game = Game::default(); @@ -84,7 +64,11 @@ fn main() -> Result<()> { PacketC::Joined { id } => bots.push(BotDriver { id: *id, interacting: false, - state: init_algo(), + state: ALGO_CONSTRUCTORS + .iter() + .find(|(n, _)| n == &args.algo) + .map(|(_, c)| c()) + .expect(&format!("unknown algo {:?}", args.algo)), }), PacketC::Error { message } => { warn!("server error message: {message}"); @@ -118,9 +102,3 @@ fn main() -> Result<()> { sleep(Duration::from_secs_f32(dt)); } } - -pub struct BotDriver { - pub interacting: bool, - id: PlayerID, - state: Box<dyn BotAlgo>, -} |