mirror of
https://git.ngram.ca/OpenJam/rc-servers
synced 2026-08-23 23:08:52 +00:00
Add basic client AI support
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -30,8 +30,9 @@ async fn main() -> std::io::Result<()> {
|
||||
|
||||
let config = oj_rc_core::persist::config::ConfigImpl::load(&args.assets).expect("Bad config data");
|
||||
let users = std::sync::Arc::new(oj_rc_core::persist::user::UserImpl::load(&args.data, &config).await.expect("Bad user data"));
|
||||
let factory = std::sync::Arc::new(<oj_rc_core::persist::config::ConfigImpl as oj_rc_core::ConfigProvider<()>>::factory::<'_, '_>(&config).await.expect("Bad vehicle factory (CRF) config"));
|
||||
let parsers = oj_rc_core::cubes::CubeParsers::new(&config);
|
||||
let queue = std::sync::Arc::new(QueueHandler::new(&config, &args.redirect, parsers.cpu_counter(), parsers.weapon_order()));
|
||||
let queue = std::sync::Arc::new(QueueHandler::new(&config, &args.redirect, factory.clone(), parsers.cpu_counter(), parsers.weapon_order()));
|
||||
|
||||
let init_ctx = InitConfig {
|
||||
config,
|
||||
|
||||
Reference in New Issue
Block a user