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::() .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::() ) .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() {}