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::{
App, PluginGroup, PluginGroupBuilder, ScheduleRunnerPlugin, Startup, TaskPoolPlugin,
};
use bevy::asset::AssetPlugin;
use bevy::diagnostic::FrameCountPlugin;
use bevy::math::Vec2;
use bevy::prelude::Query;
use bevy::time::TimePlugin;
use bevy_common_assets::toml::TomlAssetPlugin;
use bevy_rapier2d::plugin::{NoUserData, RapierConfiguration, RapierPhysicsPlugin};
use bevy_replicon::RepliconPlugins;
use std::net::SocketAddr;
use std::time::Duration;
pub struct ServerPluginGroup {
pub bind: SocketAddr,
pub tick_rate: f64,
pub max_clients: usize,
}
impl PluginGroup for ServerPluginGroup {
fn build(self) -> PluginGroupBuilder {
PluginGroupBuilder::start::<Self>()
.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::<GlobalWorldConfig>::new(&["wc.toml"]))
.add(TomlAssetPlugin::<PlanetConfigCollection>::new(&["pc.toml"]))
.add(TomlAssetPlugin::<PartConfig>::new(&["part.toml"]))
.add(crate::server::ServerPlugin {
bind: self.bind,
max_clients: self.max_clients,
})
}
}