M crates/unified/src/client/parts.rs => crates/unified/src/client/parts.rs +1 -2
@@ 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<AssetServer>,
) {
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));
M crates/unified/src/server/gravity.rs => crates/unified/src/server/gravity.rs +2 -1
@@ 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(
M crates/unified/src/server/mod.rs => crates/unified/src/server/mod.rs +6 -1
@@ 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 {
M crates/unified/src/server/part.rs => crates/unified/src/server/part.rs +0 -1
@@ 1,4 1,3 @@
-use bevy::ecs::system::entity_command::remove;
use bevy::prelude::Component;
use bevy::prelude::*;
use bevy_rapier2d::prelude::{AdditionalMassProperties, Collider};
M crates/unified/src/server/player.rs => crates/unified/src/server/player.rs +4 -2
@@ 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<FromClient<ThrustEvent>>,
world_config: Res<WorldConfigResource>,
@@ 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,
A crates/unified/src/server/system_sets.rs => crates/unified/src/server/system_sets.rs +6 -0
@@ 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