From 87c16b94dcf0d1dca110feca9512d35bd39aa2c5 Mon Sep 17 00:00:00 2001 From: core Date: Tue, 8 Jul 2025 22:38:02 -0400 Subject: [PATCH] fix: input --- crates/unified/src/client/parts.rs | 3 +-- crates/unified/src/server/gravity.rs | 3 ++- crates/unified/src/server/mod.rs | 7 ++++++- crates/unified/src/server/part.rs | 1 - crates/unified/src/server/player.rs | 6 ++++-- crates/unified/src/server/system_sets.rs | 6 ++++++ 6 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 crates/unified/src/server/system_sets.rs diff --git a/crates/unified/src/client/parts.rs b/crates/unified/src/client/parts.rs index a5c0a4de045b6d3fe8aa128b18d72021b2d107d7..fb81be8febed13afcf73b7eb71c5bbc2536fffcc 100644 --- a/crates/unified/src/client/parts.rs +++ b/crates/unified/src/client/parts.rs @@ -2,7 +2,7 @@ use crate::client::Me; use crate::ecs::{CursorWorldCoordinates, DragRequestEvent, Part}; use bevy::prelude::*; use bevy_rapier2d::dynamics::MassProperties; -use bevy_rapier2d::prelude::{AdditionalMassProperties, ReadMassProperties, RigidBody}; +use bevy_rapier2d::prelude::AdditionalMassProperties; pub fn parts_plugin(app: &mut App) { app.insert_resource(DragResource(None)); @@ -16,7 +16,6 @@ fn handle_incoming_parts( asset_server: Res, ) { for (new_entity, new_part) in new_parts.iter() { - trace!(?new_entity, ?new_part, "new part"); let mut sprite = Sprite::from_image(asset_server.load(&new_part.strong_config.part.sprite_disconnected)); sprite.custom_size = Some(Vec2::new(new_part.strong_config.physics.width, new_part.strong_config.physics.height)); diff --git a/crates/unified/src/server/gravity.rs b/crates/unified/src/server/gravity.rs index 6b7cfc892edf1179c7f4117449e75d4c890777de..eb48bd38f3517ff57a803e1f6a0a77a651480cd4 100644 --- a/crates/unified/src/server/gravity.rs +++ b/crates/unified/src/server/gravity.rs @@ -4,9 +4,10 @@ use crate::server::world_config::WorldConfigResource; use bevy::math::FloatPow; use bevy::prelude::*; use bevy_rapier2d::prelude::*; +use crate::server::system_sets::WorldUpdateSet; pub fn newtonian_gravity_plugin(app: &mut App) { - app.add_systems(Update, update_gravity); + app.add_systems(Update, update_gravity.in_set(WorldUpdateSet)); } fn update_gravity( diff --git a/crates/unified/src/server/mod.rs b/crates/unified/src/server/mod.rs index 3dc376403b642c9f4305b00bafbf48d456f49ff3..b680e20fe903a3da1bc307b39d572a916c3f433b 100644 --- a/crates/unified/src/server/mod.rs +++ b/crates/unified/src/server/mod.rs @@ -4,6 +4,7 @@ mod part; pub mod planets; pub mod player; mod world_config; +mod system_sets; use crate::server::earth_parts::spawn_parts_plugin; use crate::server::gravity::newtonian_gravity_plugin; @@ -19,6 +20,8 @@ use aeronet_websocket::server::WebSocketServer; use bevy::prelude::*; use bevy_replicon::prelude::Replicated; use std::net::SocketAddr; +use bevy_rapier2d::prelude::PhysicsSet; +use crate::server::system_sets::{PlayerInputSet, WorldUpdateSet}; pub struct ServerPlugin { pub bind: SocketAddr, @@ -47,7 +50,9 @@ impl Plugin for ServerPlugin { .add_plugins(newtonian_gravity_plugin) .add_plugins(player_management_plugin) .add_plugins(spawn_parts_plugin) - .add_plugins(part_management_plugin); + .add_plugins(part_management_plugin) + .configure_sets(Update, WorldUpdateSet.before(PlayerInputSet)) + .configure_sets(Update, PlayerInputSet.before(PhysicsSet::SyncBackend)); } } impl ServerPlugin { diff --git a/crates/unified/src/server/part.rs b/crates/unified/src/server/part.rs index 498a7c3ac4ffc5f4a0ec62662517d62f4429e811..86dd205c2749cc0c75bb33971fed5b6104e905b3 100644 --- a/crates/unified/src/server/part.rs +++ b/crates/unified/src/server/part.rs @@ -1,4 +1,3 @@ -use bevy::ecs::system::entity_command::remove; use bevy::prelude::Component; use bevy::prelude::*; use bevy_rapier2d::prelude::{AdditionalMassProperties, Collider}; diff --git a/crates/unified/src/server/player.rs b/crates/unified/src/server/player.rs index 3559d79536ed004bb90bf8d4cfe349265dadfdaf..d3d75fa0373e9a73f4bfe6858189fad724e8828a 100644 --- a/crates/unified/src/server/player.rs +++ b/crates/unified/src/server/player.rs @@ -10,9 +10,10 @@ use crate::server::{ConnectedGameEntity, ConnectedNetworkEntity}; use bevy::prelude::*; use bevy_rapier2d::prelude::ExternalForce; use bevy_replicon::prelude::FromClient; +use crate::server::system_sets::PlayerInputSet; pub fn player_management_plugin(app: &mut App) { - app.add_systems(Update, (handle_new_players, player_thrust, dragging)); + app.add_systems(Update, (handle_new_players, player_thrust, dragging).in_set(PlayerInputSet)); } fn dragging( @@ -71,7 +72,7 @@ fn handle_new_players( } fn player_thrust( - mut players: Query<(&Transform, &mut ExternalForce, &mut PlayerThrust)>, + mut players: Query<(&Transform, &mut ExternalForce, &mut PlayerThrust), >, clients: Query<&ConnectedNetworkEntity>, mut thrust_event: EventReader>, world_config: Res, @@ -86,6 +87,7 @@ fn player_thrust( let Ok((_, _, mut thrust)) = players.get_mut(*game_entity) else { continue; }; + match *event { ThrustEvent::Up(on) => thrust.up = on, ThrustEvent::Down(on) => thrust.down = on, diff --git a/crates/unified/src/server/system_sets.rs b/crates/unified/src/server/system_sets.rs new file mode 100644 index 0000000000000000000000000000000000000000..33ca4b03deed7bd2adf5359d2c66181ff8da1e40 --- /dev/null +++ b/crates/unified/src/server/system_sets.rs @@ -0,0 +1,6 @@ +use bevy::prelude::SystemSet; + +#[derive(SystemSet, Clone, PartialEq, Eq, Debug, Hash)] +pub struct WorldUpdateSet; +#[derive(SystemSet, Clone, PartialEq, Eq, Debug, Hash)] +pub struct PlayerInputSet; \ No newline at end of file