pub mod server_plugins;
pub mod shared_plugins;
pub mod server;
pub mod client;
pub mod ecs;
mod client_plugins;
use std::net::SocketAddr;
use std::process::exit;
use bevy::log::tracing_subscriber;
use clap::Parser;
use bevy::prelude::*;
use crate::client_plugins::ClientPluginGroup;
use crate::server_plugins::ServerPluginGroup;
use crate::shared_plugins::SharedPluginGroup;
#[derive(Parser, Debug)]
#[command(version, about)]
enum Cli {
Client {
#[arg(short, long)]
server: SocketAddr
},
Server {
#[arg(short = 'b', long)]
bind: SocketAddr,
#[arg(short = 'r', long)]
tick_rate: f64,
#[arg(short = 'C', long)]
max_clients: usize
}
}
fn main() -> AppExit {
tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
.init();
let cli = Cli::parse();
debug!(?cli, "parsed cli");
let mut app = App::new();
match cli {
Cli::Client { server } => {
app.add_plugins(ClientPluginGroup {
server
});
},
Cli::Server { bind, tick_rate, max_clients } => {
if cfg!(target_family = "wasm") {
eprintln!("the server cannot run on webassembly");
exit(1);
}
app.add_plugins(ServerPluginGroup {
bind,
tick_rate,
max_clients
});
}
}
app.add_plugins(SharedPluginGroup);
app.run()
}