Skip to content

Commit

Permalink
BevyRenet: add emit_server_events_system for RenetServerPlugin
Browse files Browse the repository at this point in the history
We now emit server events on its own system.
Now, transports can update and disconnect clients before events are emitted.

Should fix some 1 frame disconnect/connect delays.
  • Loading branch information
lucaspoffo committed Dec 4, 2023
1 parent e867cc7 commit c848504
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
10 changes: 9 additions & 1 deletion bevy_renet/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,21 @@ impl Plugin for RenetServerPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<Events<ServerEvent>>();
app.add_systems(PreUpdate, Self::update_system.run_if(resource_exists::<RenetServer>()));
app.add_systems(
PreUpdate,
Self::emit_server_events_system
.run_if(resource_exists::<RenetServer>())
.after(Self::update_system),
);
}
}

impl RenetServerPlugin {
pub fn update_system(mut server: ResMut<RenetServer>, time: Res<Time>, mut server_events: EventWriter<ServerEvent>) {
pub fn update_system(mut server: ResMut<RenetServer>, time: Res<Time>) {
server.update(time.delta());
}

pub fn emit_server_events_system(mut server: ResMut<RenetServer>, mut server_events: EventWriter<ServerEvent>) {
while let Some(event) = server.get_event() {
server_events.send(event);
}
Expand Down
3 changes: 2 additions & 1 deletion bevy_renet/src/steam.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ impl Plugin for SteamServerPlugin {
Self::update_system
.in_set(RenetReceive)
.run_if(resource_exists::<RenetServer>())
.after(RenetServerPlugin::update_system),
.after(RenetServerPlugin::update_system)
.before(RenetServerPlugin::emit_server_events_system),
);

app.add_systems(
Expand Down
3 changes: 2 additions & 1 deletion bevy_renet/src/transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ impl Plugin for NetcodeServerPlugin {
.in_set(RenetReceive)
.run_if(resource_exists::<NetcodeServerTransport>())
.run_if(resource_exists::<RenetServer>())
.after(RenetServerPlugin::update_system),
.after(RenetServerPlugin::update_system)
.before(RenetServerPlugin::emit_server_events_system),
);

app.add_systems(
Expand Down

0 comments on commit c848504

Please sign in to comment.