use bevy::log::{Level, 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 tracing_subscriber::EnvFilter;
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::builder()
.with_default_directive(Level::INFO.into())
.from_env_lossy(),
)
.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()
}