use bevy_app::{PluginGroup, PluginGroupBuilder};
use crate::shared::SharedPlugins;
use core::time::Duration;
pub struct ServerPlugins {
pub tick_duration: Duration,
}
impl Default for ServerPlugins {
fn default() -> Self {
Self {
tick_duration: Duration::from_secs_f32(1.0 / 60.0),
}
}
}
impl PluginGroup for ServerPlugins {
fn build(self) -> PluginGroupBuilder {
let builder = PluginGroupBuilder::start::<Self>();
let builder = builder
.add(lightyear_sync::server::ServerPlugin)
.add(lightyear_link::server::ServerLinkPlugin);
let builder = builder.add(SharedPlugins {
tick_duration: self.tick_duration,
});
#[cfg(feature = "deterministic")]
let builder =
builder.add(lightyear_deterministic_replication::prelude::ChecksumReceivePlugin);
let builder = builder.add(lightyear_connection::host::HostPlugin);
#[cfg(feature = "replication")]
let builder = builder.add(lightyear_replication::host::HostServerPlugin);
#[cfg(all(feature = "udp", not(target_family = "wasm")))]
let builder = builder.add(lightyear_udp::server::ServerUdpPlugin);
#[cfg(all(feature = "webtransport", not(target_family = "wasm")))]
let builder = builder.add(lightyear_webtransport::server::WebTransportServerPlugin);
#[cfg(all(feature = "websocket", not(target_family = "wasm")))]
let builder = builder.add(lightyear_websocket::server::WebSocketServerPlugin);
#[cfg(all(feature = "steam", not(target_family = "wasm")))]
let builder = builder.add(lightyear_steam::server::SteamServerPlugin);
#[cfg(feature = "netcode")]
let builder = builder.add(lightyear_netcode::server_plugin::NetcodeServerPlugin);
#[cfg(feature = "raw_connection")]
let builder = builder.add(lightyear_raw_connection::server::RawConnectionPlugin);
builder
}
}