use bevy::app::ScheduleRunnerPlugin;
use bevy::prelude::Startup;
use crate::cli::StkArgs;
use crate::client::ClientPlugin;
use crate::client::plugins::ClientPluginGroup;
use crate::prelude::{App, AppExit, MinimalPlugins, PluginGroup};
#[cfg(not(target_arch = "wasm32"))]
use crate::server::player::join::spawn_singleplayer_player;
#[cfg(not(target_arch = "wasm32"))]
use crate::server::plugins::ServerPluginGroup;
#[cfg(not(target_arch = "wasm32"))]
use crate::server::ServerPlugin;
use crate::shared::plugins::SharedPluginGroup;
pub fn run(cli: StkArgs) -> AppExit {
let mut app = App::new();
app.add_plugins(MinimalPlugins.build().disable::<ScheduleRunnerPlugin>());
app.add_plugins(SharedPluginGroup);
match cli {
StkArgs::Client { server } => {
app.add_plugins(ClientPluginGroup);
app.add_plugins(ClientPlugin { server: Some(server) });
},
#[cfg(not(target_arch = "wasm32"))]
StkArgs::Server { bind_to, with_client } => {
app.add_plugins(ServerPluginGroup);
app.add_plugins(ServerPlugin { bind: bind_to });
if with_client {
app.add_plugins(ClientPluginGroup);
app.add_plugins(ClientPlugin { server: None });
app.add_systems(Startup, spawn_singleplayer_player);
}
}
}
app.run()
}