use crate::config::part::PartConfig; use crate::config::planet::PlanetConfigCollection; use crate::config::world::GlobalWorldConfig; use aeronet_replicon::server::AeronetRepliconServerPlugin; use aeronet_websocket::server::WebSocketServerPlugin; use avian2d::prelude::PhysicsInterpolationPlugin; use bevy::app::{PluginGroup, PluginGroupBuilder, ScheduleRunnerPlugin, TaskPoolPlugin}; use bevy::asset::AssetPlugin; use bevy::diagnostic::FrameCountPlugin; use bevy::time::TimePlugin; use bevy_common_assets::toml::TomlAssetPlugin; use bevy_replicon::RepliconPlugins; use std::net::SocketAddr; use std::time::Duration; use avian2d::PhysicsPlugins; use bevy::state::app::StatesPlugin; pub struct ServerPluginGroup { pub bind: SocketAddr, pub tick_rate: f32, pub max_clients: usize, } impl PluginGroup for ServerPluginGroup { fn build(self) -> PluginGroupBuilder { PluginGroupBuilder::start::() .add_group( PhysicsPlugins::default() .with_length_unit(100.0) .set(PhysicsInterpolationPlugin::interpolate_all()) ) .add(WebSocketServerPlugin) .add(AeronetRepliconServerPlugin) .add(crate::server::ServerPlugin { bind: self.bind, max_clients: self.max_clients, }) } }