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 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 bevy::state::app::StatesPlugin; pub struct ServerPluginGroup { pub bind: SocketAddr, pub tick_rate: f64, pub max_clients: usize, } impl PluginGroup for ServerPluginGroup { fn build(self) -> PluginGroupBuilder { PluginGroupBuilder::start::() .add(StatesPlugin) .add(TaskPoolPlugin::default()) .add(FrameCountPlugin) .add(TimePlugin) .add(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f64( 1.0 / self.tick_rate, ))) .add_group(RepliconPlugins) .add(WebSocketServerPlugin) .add(AeronetRepliconServerPlugin) /* Assets */ .add(AssetPlugin::default()) .add(TomlAssetPlugin::::new(&["wc.toml"])) .add(TomlAssetPlugin::::new(&["pc.toml"])) .add(TomlAssetPlugin::::new(&["part.toml"])) .add(crate::server::ServerPlugin { bind: self.bind, max_clients: self.max_clients, }) } }