use bevy::log::tracing_subscriber; use bevy::prelude::*; use clap::Parser; use starkingdoms::client_plugins::ClientPluginGroup; #[cfg(not(target_arch = "wasm32"))] use starkingdoms::server_plugins::ServerPluginGroup; use starkingdoms::shared_plugins::SharedPluginGroup; use std::net::SocketAddr; use std::process::exit; use std::str::FromStr; use tracing_subscriber::EnvFilter; use tracing_subscriber::filter::Directive; use tracing_subscriber::util::SubscriberInitExt; #[derive(Parser, Debug)] #[command(version, about)] enum Cli { Client { #[arg(short, long)] server: String, }, #[cfg(not(target_arch = "wasm32"))] Server { #[arg(short = 'b', long)] bind: SocketAddr, #[arg(short = 'r', long)] tick_rate: f64, #[arg(short = 'C', long)] max_clients: usize, }, #[cfg(all(not(target_arch = "wasm32"), feature = "particle_editor"))] ParticleEditor {}, } fn main() -> AppExit { let cli = Cli::parse(); let mut app = App::new(); tracing_subscriber::fmt() .with_env_filter( EnvFilter::from_default_env().add_directive(Directive::from_str("naga=error").unwrap()), ) .finish() .init(); match cli { Cli::Client { server } => { app.add_plugins(ClientPluginGroup { server }); app.add_plugins(SharedPluginGroup); } #[cfg(not(target_arch = "wasm32"))] 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); } #[cfg(all(not(target_arch = "wasm32"), feature = "particle_editor"))] Cli::ParticleEditor {} => { app.add_plugins(starkingdoms::particle_editor::particle_editor_plugin); } } app.run() }