pub mod server_plugins; pub mod shared_plugins; pub mod server; pub mod client; pub mod ecs; pub mod client_plugins; pub mod config; use std::net::SocketAddr; use std::process::exit; use bevy::log::{tracing_subscriber, Level, LogPlugin}; use clap::Parser; use bevy::prelude::*; use tracing_subscriber::EnvFilter; use tracing_subscriber::filter::Directive; use tracing_subscriber::util::SubscriberInitExt; 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 { let cli = Cli::parse(); let mut app = App::new(); tracing_subscriber::fmt() .with_env_filter( EnvFilter::builder() .with_default_directive(Level::INFO.into()) .from_env_lossy() .add_directive("bevy_app::plugin_group=error".parse().unwrap()) .add_directive("bevy_app::app=error".parse().unwrap()) .add_directive("bevy_replicon=warn".parse().unwrap()) .add_directive("bevy_replicon_renet2=warn".parse().unwrap()) .add_directive("naga=warn".parse().unwrap()) .add_directive("wgpu_hal::vulkan=error".parse().unwrap()) ) .finish() .init(); 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() }