Skip to content

Commit

Permalink
BevyRenet: add condition for just connected/disconnected (#96)
Browse files Browse the repository at this point in the history
Change all bevy conditions to return closures, similar to how bevy does.
  • Loading branch information
Shatur authored Jul 20, 2023
1 parent c67a219 commit 114a226
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 8 deletions.
2 changes: 1 addition & 1 deletion bevy_renet/examples/simple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ fn main() {

app.add_systems(
Update,
(player_input, client_send_input, client_sync_players).run_if(bevy_renet::transport::client_connected),
(player_input, client_send_input, client_sync_players).run_if(bevy_renet::transport::client_connected()),
);
}

Expand Down
38 changes: 32 additions & 6 deletions bevy_renet/src/transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,23 +104,49 @@ impl NetcodeClientPlugin {
}
}

pub fn client_connected(transport: Option<Res<NetcodeClientTransport>>) -> bool {
match transport {
pub fn client_connected() -> impl FnMut(Option<Res<NetcodeClientTransport>>) -> bool {
|transport| match transport {
Some(transport) => transport.is_connected(),
None => false,
}
}

pub fn client_diconnected(transport: Option<Res<NetcodeClientTransport>>) -> bool {
match transport {
pub fn client_diconnected() -> impl FnMut(Option<Res<NetcodeClientTransport>>) -> bool {
|transport| match transport {
Some(transport) => transport.is_disconnected(),
None => true,
}
}

pub fn client_connecting(transport: Option<Res<NetcodeClientTransport>>) -> bool {
match transport {
pub fn client_connecting() -> impl FnMut(Option<Res<NetcodeClientTransport>>) -> bool {
|transport| match transport {
Some(transport) => transport.is_connecting(),
None => false,
}
}

pub fn client_just_connected() -> impl FnMut(Local<bool>, Option<Res<NetcodeClientTransport>>) -> bool {
|mut last_connected: Local<bool>, transport| {
let Some(transport) = transport else {
return false;
};

let connected = transport.is_connected();
let just_connected = !*last_connected && connected;
*last_connected = connected;
just_connected
}
}

pub fn client_just_diconnected() -> impl FnMut(Local<bool>, Option<Res<NetcodeClientTransport>>) -> bool {
|mut last_disconnected: Local<bool>, transport| {
let Some(transport) = transport else {
return true;
};

let disconnected = transport.is_disconnected();
let just_disconnected = !*last_disconnected && disconnected;
*last_disconnected = disconnected;
just_disconnected
}
}
2 changes: 1 addition & 1 deletion demo_bevy/src/bin/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ fn main() {
app.add_systems(Update, (player_input, camera_follow, update_target_system));
app.add_systems(
Update,
(client_send_input, client_send_player_commands, client_sync_players).run_if(bevy_renet::transport::client_connected),
(client_send_input, client_send_player_commands, client_sync_players).run_if(bevy_renet::transport::client_connected()),
);

app.insert_resource(RenetClientVisualizer::<200>::new(RenetVisualizerStyle::default()));
Expand Down

0 comments on commit 114a226

Please sign in to comment.