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::()); 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() }