use crate::config::planet::Planet; use crate::ecs::{Part, Particles, Player, ThrustEvent}; use bevy::app::{App, PluginGroup, PluginGroupBuilder}; use bevy::prelude::*; use bevy_rapier2d::prelude::*; use bevy_replicon::prelude::{AppRuleExt, Channel, ClientEventAppExt}; use crate::attachment::{Joint, JointOf, JointSnapFor, PartInShip, Peer, Ship}; use crate::clientevent::{PartDragControlEvent, PartDragEvent}; pub struct SharedPluginGroup; impl PluginGroup for SharedPluginGroup { fn build(self) -> PluginGroupBuilder { PluginGroupBuilder::start::() .add(RapierPhysicsPlugin::::pixels_per_meter(100.0)) .add(physics_setup_plugin) .add(register_everything) } } pub fn register_everything(app: &mut App) { app .add_client_event::(Channel::Ordered) .add_mapped_client_event::(Channel::Unreliable) .add_mapped_client_event::(Channel::Ordered) .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::() .replicate::(); } fn physics_setup_plugin(app: &mut App) { app.add_systems(Startup, setup_physics); } fn setup_physics(mut rapier_config: Query<&mut RapierConfiguration>) { let mut cfg = rapier_config.single_mut().unwrap(); cfg.gravity = Vec2::ZERO; }