Add basic client AI support

This commit is contained in:
NG (Graham) committed 2025-09-27 12:36:49 -04:00
1 parent 91fc2db868
commit e55bd6d288
29 files changed
+652 -317

No files matched your search

+7 -3
View File
@@ -38,13 +38,14 @@ pub struct QueueHandler {
hostname: String,
hostport: u16,
network_conf: crate::data::network::NetworkConfigData,
factory: std::sync::Arc<oj_rc_core::factory::Factory>,
cpu_counter: std::sync::Arc<oj_rc_core::cubes::CpuListParser>,
weapon_guesser: std::sync::Arc<oj_rc_core::cubes::WeaponListParser>,
change_strategy: GamemodeChangeStrategy,
}
impl QueueHandler {
pub fn new(conf: &oj_rc_core::ConfigImpl, game_host: &str, cpu_counter: std::sync::Arc<oj_rc_core::cubes::CpuListParser>, weapon_guesser: std::sync::Arc<oj_rc_core::cubes::WeaponListParser>,) -> Self {
pub fn new(conf: &oj_rc_core::ConfigImpl, game_host: &str, factory: std::sync::Arc<oj_rc_core::factory::Factory>, cpu_counter: std::sync::Arc<oj_rc_core::cubes::CpuListParser>, weapon_guesser: std::sync::Arc<oj_rc_core::cubes::WeaponListParser>,) -> Self {
let (domain, port_str) = game_host.split_once(':').expect("Invalid redirect address (must be domain:port)");
Self {
users_in_queue: tokio::sync::Mutex::new(HashMap::new()),
@@ -53,6 +54,7 @@ impl QueueHandler {
hostname: domain.to_owned(),
hostport: port_str.parse().expect("Invalid redirect port"),
network_conf: crate::data::network::NetworkConfigData::from_conf(oj_rc_core::ConfigProvider::<()>::network_config(conf)),
factory,
cpu_counter,
weapon_guesser,
change_strategy: GamemodeChangeStrategy::from_core(<oj_rc_core::ConfigImpl as oj_rc_core::ConfigProvider<()>>::server_config(conf).queue_mode),
@@ -90,9 +92,11 @@ impl QueueHandler {
is_custom: false,
is_complete: false,
};
match user.start_game(game_desc, player_descs, &self.cpu_counter, &self.weapon_guesser).await {
match user.start_game(game_desc, player_descs, self.factory.as_ref(), &self.cpu_counter, &self.weapon_guesser).await {
Ok(fakes) => {
let player_datas = players.iter().map(|x| x.player.clone()).chain(fakes.players.into_iter()).collect();
let player_datas = players.iter().map(|x| x.player.clone())
.chain(fakes.players.into_iter().map(|(desc, _emu)| desc))
.collect();
let enter_battle_ev = crate::events::battle_enter::BattleEnter {
host: self.hostname.clone(),
port: self.hostport,