use std::time::Duration;
use aeronet_transport::AeronetTransportPlugin;
use aeronet_websocket::server::WebSocketServerPlugin;
use avian2d::interpolation::PhysicsInterpolationPlugin;
use avian2d::PhysicsPlugins;
use avian2d::prelude::{Gravity, IslandPlugin};
use bevy::app::{PluginGroup, PluginGroupBuilder, ScheduleRunnerPlugin};
use crate::prelude::{App, Startup};
use crate::shared::plugins::TICK_RATE;
pub struct ServerPluginGroup;
const PHYSICS_LENGTH_UNIT: f64 = 100.0;
impl PluginGroup for ServerPluginGroup {
fn build(self) -> PluginGroupBuilder {
PluginGroupBuilder::start::<Self>()
.add(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f64(1.0 / TICK_RATE)))
.add(WebSocketServerPlugin)
.add_group(
PhysicsPlugins::default()
.with_length_unit(PHYSICS_LENGTH_UNIT)
.set(PhysicsInterpolationPlugin::interpolate_all())
.build()
.disable::<IslandPlugin>()
)
.add(physics_setup_plugin)
}
}
fn physics_setup_plugin(app: &mut App) {
app.insert_resource(Gravity::ZERO);
app.add_systems(Startup, setup_physics);
}
fn setup_physics() {}