From 4279d28c2cf5a79370990b2e8dd30e07f38e8ec2 Mon Sep 17 00:00:00 2001 From: starwolf Date: Mon, 1 Jan 2024 21:25:54 +0100 Subject: [PATCH 1/6] Support custom schedules. --- bevy_renet/examples/simple.rs | 8 ++--- bevy_renet/src/lib.rs | 55 ++++++++++++++++++++++++++++++----- bevy_renet/src/steam.rs | 42 +++++++++++++++++++++----- bevy_renet/src/transport.rs | 43 ++++++++++++++++++++++----- demo_bevy/src/bin/client.rs | 2 +- demo_bevy/src/bin/server.rs | 2 +- 6 files changed, 124 insertions(+), 28 deletions(-) diff --git a/bevy_renet/examples/simple.rs b/bevy_renet/examples/simple.rs index 5244b526..991126f3 100644 --- a/bevy_renet/examples/simple.rs +++ b/bevy_renet/examples/simple.rs @@ -98,8 +98,8 @@ fn main() { app.init_resource::(); if is_host { - app.add_plugins(RenetServerPlugin); - app.add_plugins(NetcodeServerPlugin); + app.add_plugins(RenetServerPlugin::default()); + app.add_plugins(NetcodeServerPlugin::default()); let (server, transport) = new_renet_server(); app.insert_resource(server); app.insert_resource(transport); @@ -109,8 +109,8 @@ fn main() { (server_update_system, server_sync_players, move_players_system).run_if(resource_exists::()), ); } else { - app.add_plugins(RenetClientPlugin); - app.add_plugins(NetcodeClientPlugin); + app.add_plugins(RenetClientPlugin::default()); + app.add_plugins(NetcodeClientPlugin::default()); app.init_resource::(); let (client, transport) = new_renet_client(); app.insert_resource(client); diff --git a/bevy_renet/src/lib.rs b/bevy_renet/src/lib.rs index d76b1103..cfe8c39f 100644 --- a/bevy_renet/src/lib.rs +++ b/bevy_renet/src/lib.rs @@ -1,6 +1,6 @@ pub use renet; -use bevy::prelude::*; +use bevy::{ecs::schedule::ScheduleLabel, prelude::*, utils::intern::Interned}; use renet::{RenetClient, RenetServer, ServerEvent}; @@ -27,21 +27,56 @@ pub struct RenetReceive; /// This system set runs in PostUpdate. #[derive(Debug, SystemSet, Clone, Copy, PartialEq, Eq, Hash)] pub struct RenetSend; +#[derive(Debug, SystemSet, Clone, Copy, PartialEq, Eq, Hash)] +pub enum CoreSet { + Pre, + Post, +} -pub struct RenetServerPlugin; +pub struct RenetServerPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} -pub struct RenetClientPlugin; +pub struct RenetClientPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} + +impl Default for RenetServerPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} +impl Default for RenetClientPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} impl Plugin for RenetServerPlugin { fn build(&self, app: &mut App) { app.init_resource::>(); - app.add_systems(PreUpdate, Self::update_system.run_if(resource_exists::())); app.add_systems( - PreUpdate, + self.pre_schedule, + Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), + ); + app.add_systems( + self.pre_schedule, Self::emit_server_events_system .run_if(resource_exists::()) - .after(Self::update_system), + .after(Self::update_system) + .in_set(CoreSet::Pre), ); + if self.post_schedule == self.pre_schedule { + app.configure_sets(self.post_schedule, (CoreSet::Pre, CoreSet::Post)); + } } } @@ -59,7 +94,13 @@ impl RenetServerPlugin { impl Plugin for RenetClientPlugin { fn build(&self, app: &mut App) { - app.add_systems(PreUpdate, Self::update_system.run_if(resource_exists::())); + app.add_systems( + self.pre_schedule, + Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), + ); + if self.post_schedule == self.pre_schedule { + app.configure_sets(self.post_schedule, (CoreSet::Pre, CoreSet::Post)); + } } } diff --git a/bevy_renet/src/steam.rs b/bevy_renet/src/steam.rs index d9b08efa..0e4deba3 100644 --- a/bevy_renet/src/steam.rs +++ b/bevy_renet/src/steam.rs @@ -6,9 +6,32 @@ use crate::{RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; pub use renet_steam::{AccessPermission, SteamClientTransport, SteamServerConfig, SteamServerTransport}; -pub struct SteamServerPlugin; +pub struct SteamServerPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} + +pub struct SteamClientPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} -pub struct SteamClientPlugin; +impl Default for SteamServerPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} +impl Default for SteamClientPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} #[derive(Debug, Event)] pub struct SteamTransportError(pub SteamError); @@ -22,17 +45,20 @@ impl std::fmt::Display for SteamTransportError { impl Plugin for SteamServerPlugin { fn build(&self, app: &mut App) { app.add_systems( - PreUpdate, + self.pre_schedule, Self::update_system .in_set(RenetReceive) + .in_set(CoreSet::Pre) .run_if(resource_exists::()) .after(RenetServerPlugin::update_system) .before(RenetServerPlugin::emit_server_events_system), ); app.add_systems( - PostUpdate, - (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit).run_if(resource_exists::()), + self.post_schedule, + (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) + .in_set(CoreSet::Post) + .run_if(resource_exists::()), ); } } @@ -68,16 +94,18 @@ impl Plugin for SteamClientPlugin { app.add_event::(); app.add_systems( - PreUpdate, + self.pre_schedule, Self::update_system .in_set(RenetReceive) + .in_set(CoreSet::Pre) .run_if(resource_exists::()) .run_if(resource_exists::()) .after(RenetClientPlugin::update_system), ); app.add_systems( - PostUpdate, + self.post_schedule, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) + .in_set(CoreSet::Post) .run_if(resource_exists::()) .run_if(resource_exists::()), ); diff --git a/bevy_renet/src/transport.rs b/bevy_renet/src/transport.rs index e1b451bd..80372ec2 100644 --- a/bevy_renet/src/transport.rs +++ b/bevy_renet/src/transport.rs @@ -3,22 +3,46 @@ use renet::{ RenetClient, RenetServer, }; -use bevy::{app::AppExit, prelude::*}; +use bevy::{app::AppExit, ecs::schedule::ScheduleLabel, prelude::*, utils::intern::Interned}; -use crate::{RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; +use crate::{CoreSet, RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; -pub struct NetcodeServerPlugin; +pub struct NetcodeServerPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} + +pub struct NetcodeClientPlugin { + pub pre_schedule: Interned, + pub post_schedule: Interned, +} -pub struct NetcodeClientPlugin; +impl Default for NetcodeServerPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} +impl Default for NetcodeClientPlugin { + fn default() -> Self { + Self { + pre_schedule: PreUpdate.intern(), + post_schedule: PostUpdate.intern(), + } + } +} impl Plugin for NetcodeServerPlugin { fn build(&self, app: &mut App) { app.add_event::(); app.add_systems( - PreUpdate, + self.pre_schedule, Self::update_system .in_set(RenetReceive) + .in_set(CoreSet::Pre) .run_if(resource_exists::()) .run_if(resource_exists::()) .after(RenetServerPlugin::update_system) @@ -26,8 +50,9 @@ impl Plugin for NetcodeServerPlugin { ); app.add_systems( - PostUpdate, + self.post_schedule, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) + .in_set(CoreSet::Post) .run_if(resource_exists::()) .run_if(resource_exists::()), ); @@ -62,16 +87,18 @@ impl Plugin for NetcodeClientPlugin { app.add_event::(); app.add_systems( - PreUpdate, + self.pre_schedule, Self::update_system .in_set(RenetReceive) + .in_set(CoreSet::Pre) .run_if(resource_exists::()) .run_if(resource_exists::()) .after(RenetClientPlugin::update_system), ); app.add_systems( - PostUpdate, + self.post_schedule, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) + .in_set(CoreSet::Post) .run_if(resource_exists::()) .run_if(resource_exists::()), ); diff --git a/demo_bevy/src/bin/client.rs b/demo_bevy/src/bin/client.rs index c742929e..fd96361c 100644 --- a/demo_bevy/src/bin/client.rs +++ b/demo_bevy/src/bin/client.rs @@ -124,7 +124,7 @@ fn add_steam_network(app: &mut App) { fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins); - app.add_plugins(RenetClientPlugin); + app.add_plugins(RenetClientPlugin::default()); app.add_plugins(LookTransformPlugin); app.add_plugins(FrameTimeDiagnosticsPlugin); app.add_plugins(LogDiagnosticsPlugin::default()); diff --git a/demo_bevy/src/bin/server.rs b/demo_bevy/src/bin/server.rs index c59ed34f..b9faf77f 100644 --- a/demo_bevy/src/bin/server.rs +++ b/demo_bevy/src/bin/server.rs @@ -89,7 +89,7 @@ fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins); - app.add_plugins(RenetServerPlugin); + app.add_plugins(RenetServerPlugin::default()); app.add_plugins(FrameTimeDiagnosticsPlugin); app.add_plugins(LogDiagnosticsPlugin::default()); app.add_plugins(EguiPlugin); From 6ef0a1969fb6923a0c18645bb217aadaec4c4667 Mon Sep 17 00:00:00 2001 From: starwolf Date: Mon, 1 Jan 2024 21:38:07 +0100 Subject: [PATCH 2/6] Structure passed schedules. --- bevy_renet/src/lib.rs | 45 +++++++++++++++++-------------------- bevy_renet/src/steam.rs | 6 ++--- bevy_renet/src/transport.rs | 39 +++++++++----------------------- 3 files changed, 32 insertions(+), 58 deletions(-) diff --git a/bevy_renet/src/lib.rs b/bevy_renet/src/lib.rs index cfe8c39f..d475e591 100644 --- a/bevy_renet/src/lib.rs +++ b/bevy_renet/src/lib.rs @@ -33,49 +33,44 @@ pub enum CoreSet { Post, } -pub struct RenetServerPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, -} - -pub struct RenetClientPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, +pub struct NetSchedules { + pub pre: Interned, + pub post: Interned, } -impl Default for RenetServerPlugin { +impl Default for NetSchedules { fn default() -> Self { Self { - pre_schedule: PreUpdate.intern(), - post_schedule: PostUpdate.intern(), + pre: PreUpdate.intern(), + post: PostUpdate.intern(), } } } -impl Default for RenetClientPlugin { - fn default() -> Self { - Self { - pre_schedule: PreUpdate.intern(), - post_schedule: PostUpdate.intern(), - } - } +#[derive(Default)] +pub struct RenetServerPlugin { + pub schedules: NetSchedules, +} +#[derive(Default)] +pub struct RenetClientPlugin { + pub schedules: NetSchedules, } impl Plugin for RenetServerPlugin { fn build(&self, app: &mut App) { app.init_resource::>(); app.add_systems( - self.pre_schedule, + self.schedules.pre, Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), ); app.add_systems( - self.pre_schedule, + self.schedules.pre, Self::emit_server_events_system .run_if(resource_exists::()) .after(Self::update_system) .in_set(CoreSet::Pre), ); - if self.post_schedule == self.pre_schedule { - app.configure_sets(self.post_schedule, (CoreSet::Pre, CoreSet::Post)); + if self.schedules.post == self.schedules.pre { + app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post)); } } } @@ -95,11 +90,11 @@ impl RenetServerPlugin { impl Plugin for RenetClientPlugin { fn build(&self, app: &mut App) { app.add_systems( - self.pre_schedule, + self.schedules.pre, Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), ); - if self.post_schedule == self.pre_schedule { - app.configure_sets(self.post_schedule, (CoreSet::Pre, CoreSet::Post)); + if self.schedules.post == self.schedules.pre { + app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post)); } } } diff --git a/bevy_renet/src/steam.rs b/bevy_renet/src/steam.rs index 0e4deba3..136a6147 100644 --- a/bevy_renet/src/steam.rs +++ b/bevy_renet/src/steam.rs @@ -7,13 +7,11 @@ use crate::{RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; pub use renet_steam::{AccessPermission, SteamClientTransport, SteamServerConfig, SteamServerTransport}; pub struct SteamServerPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, + pub schedules: NetSchedules, } pub struct SteamClientPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, + pub schedules: NetSchedules, } impl Default for SteamServerPlugin { diff --git a/bevy_renet/src/transport.rs b/bevy_renet/src/transport.rs index 80372ec2..f7013684 100644 --- a/bevy_renet/src/transport.rs +++ b/bevy_renet/src/transport.rs @@ -3,35 +3,16 @@ use renet::{ RenetClient, RenetServer, }; -use bevy::{app::AppExit, ecs::schedule::ScheduleLabel, prelude::*, utils::intern::Interned}; - -use crate::{CoreSet, RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; +use bevy::{app::AppExit, prelude::*}; +use crate::{CoreSet, NetSchedules, RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; +#[derive(Default)] pub struct NetcodeServerPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, + pub schedules: NetSchedules, } - +#[derive(Default)] pub struct NetcodeClientPlugin { - pub pre_schedule: Interned, - pub post_schedule: Interned, -} - -impl Default for NetcodeServerPlugin { - fn default() -> Self { - Self { - pre_schedule: PreUpdate.intern(), - post_schedule: PostUpdate.intern(), - } - } -} -impl Default for NetcodeClientPlugin { - fn default() -> Self { - Self { - pre_schedule: PreUpdate.intern(), - post_schedule: PostUpdate.intern(), - } - } + pub schedules: NetSchedules, } impl Plugin for NetcodeServerPlugin { @@ -39,7 +20,7 @@ impl Plugin for NetcodeServerPlugin { app.add_event::(); app.add_systems( - self.pre_schedule, + self.schedules.pre, Self::update_system .in_set(RenetReceive) .in_set(CoreSet::Pre) @@ -50,7 +31,7 @@ impl Plugin for NetcodeServerPlugin { ); app.add_systems( - self.post_schedule, + self.schedules.post, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) .in_set(CoreSet::Post) .run_if(resource_exists::()) @@ -87,7 +68,7 @@ impl Plugin for NetcodeClientPlugin { app.add_event::(); app.add_systems( - self.pre_schedule, + self.schedules.pre, Self::update_system .in_set(RenetReceive) .in_set(CoreSet::Pre) @@ -96,7 +77,7 @@ impl Plugin for NetcodeClientPlugin { .after(RenetClientPlugin::update_system), ); app.add_systems( - self.post_schedule, + self.schedules.post, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) .in_set(CoreSet::Post) .run_if(resource_exists::()) From 559e9b1f09968ba4c8642fd10a0a1d8650f8178b Mon Sep 17 00:00:00 2001 From: starwolf Date: Mon, 1 Jan 2024 21:46:45 +0100 Subject: [PATCH 3/6] NetSchedules derive clone and copy. --- bevy_renet/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bevy_renet/src/lib.rs b/bevy_renet/src/lib.rs index d475e591..d5d7717c 100644 --- a/bevy_renet/src/lib.rs +++ b/bevy_renet/src/lib.rs @@ -32,7 +32,7 @@ pub enum CoreSet { Pre, Post, } - +#[derive(Clone, Copy)] pub struct NetSchedules { pub pre: Interned, pub post: Interned, From 666330f30ea59cffd66b7c61df7988716255f71f Mon Sep 17 00:00:00 2001 From: starwolf Date: Mon, 1 Jan 2024 21:53:25 +0100 Subject: [PATCH 4/6] Chain CoreSet in the right plugins. --- bevy_renet/src/lib.rs | 6 ------ bevy_renet/src/transport.rs | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bevy_renet/src/lib.rs b/bevy_renet/src/lib.rs index d5d7717c..d9a3e7ad 100644 --- a/bevy_renet/src/lib.rs +++ b/bevy_renet/src/lib.rs @@ -69,9 +69,6 @@ impl Plugin for RenetServerPlugin { .after(Self::update_system) .in_set(CoreSet::Pre), ); - if self.schedules.post == self.schedules.pre { - app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post)); - } } } @@ -93,9 +90,6 @@ impl Plugin for RenetClientPlugin { self.schedules.pre, Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), ); - if self.schedules.post == self.schedules.pre { - app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post)); - } } } diff --git a/bevy_renet/src/transport.rs b/bevy_renet/src/transport.rs index f7013684..5bffc1f5 100644 --- a/bevy_renet/src/transport.rs +++ b/bevy_renet/src/transport.rs @@ -37,6 +37,9 @@ impl Plugin for NetcodeServerPlugin { .run_if(resource_exists::()) .run_if(resource_exists::()), ); + if self.schedules.post == self.schedules.pre { + app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post).chain()); + } } } @@ -83,6 +86,9 @@ impl Plugin for NetcodeClientPlugin { .run_if(resource_exists::()) .run_if(resource_exists::()), ); + if self.schedules.post == self.schedules.pre { + app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post).chain()); + } } } From 32607904219f8140ba9a5d6c5b9dcb43a6e1e134 Mon Sep 17 00:00:00 2001 From: starwolf Date: Tue, 12 Mar 2024 17:44:10 +0100 Subject: [PATCH 5/6] Update to 0.13 . --- README.md | 4 +- bevy_renet/Cargo.toml | 14 +-- bevy_renet/README.md | 1 + bevy_renet/examples/simple.rs | 28 ++--- bevy_renet/src/lib.rs | 52 ++++---- bevy_renet/src/transport.rs | 38 +++--- demo_bevy/Cargo.toml | 25 ++-- demo_bevy/src/bin/client.rs | 48 +++----- demo_bevy/src/bin/server.rs | 13 +- demo_bevy/src/lib.rs | 16 +-- demo_chat/Cargo.toml | 8 +- renet/Cargo.toml | 8 +- renet/src/channel/unreliable.rs | 7 ++ renet/src/lib.rs | 5 + renet_steam/Cargo.toml | 12 +- renet_steam/README.md | 112 +++++++++++++++++- .../src/steam.rs => renet_steam/src/bevy.rs | 69 ++++------- renet_steam/src/client.rs | 9 +- renet_steam/src/lib.rs | 3 + renet_steam/src/server.rs | 13 +- renet_visualizer/Cargo.toml | 8 +- renet_visualizer/src/lib.rs | 6 +- renetcode/Cargo.toml | 2 +- renetcode/src/client.rs | 4 +- renetcode/src/lib.rs | 3 - renetcode/src/token.rs | 6 +- 26 files changed, 301 insertions(+), 213 deletions(-) rename bevy_renet/src/steam.rs => renet_steam/src/bevy.rs (53%) diff --git a/README.md b/README.md index 5f8f82c4..6fc40683 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ let send_type = SendType::ReliableOrdered { resend_time: Duration::from_millis(300) }; -// Garantee of message delivery but not order +// Guarantee of message delivery but not order let send_type = SendType::ReliableUnordered { resend_time: Duration::from_millis(300) }; @@ -190,6 +190,8 @@ Simple chat application made with egui to demonstrate how you could handle error Checkout [bevy_renet](https://github.com/lucaspoffo/renet/tree/master/bevy_renet) if you want to use renet as a plugin with the [Bevy engine](https://bevyengine.org/). +Checkout [renet_steam](https://github.com/lucaspoffo/renet/tree/master/renet_steam) if you want to use the steam transport layer instead of the default one. + ## Visualizer Checkout [renet_visualizer](https://github.com/lucaspoffo/renet/tree/master/renet_visualizer) for a egui plugin to plot metrics data from renet clients and servers: diff --git a/bevy_renet/Cargo.toml b/bevy_renet/Cargo.toml index 9fc703cc..c8fae06d 100644 --- a/bevy_renet/Cargo.toml +++ b/bevy_renet/Cargo.toml @@ -6,7 +6,7 @@ keywords = ["gamedev", "networking"] license = "MIT OR Apache-2.0" readme = "README.md" repository = "https://github.com/lucaspoffo/renet" -version = "0.0.10" +version = "0.0.11" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -14,19 +14,17 @@ version = "0.0.10" default = ["transport"] serde = ["renet/serde"] transport = ["renet/transport"] -steam = ["renet_steam"] [[example]] name = "simple" required-features = ["serde", "transport"] [dependencies] -bevy = {version = "0.12", default-features = false} -renet = {path = "../renet", version = "0.0.14", default-features=false, features = ["bevy"]} -renet_steam = { path = "../renet_steam", version = "0.0.1", features = [ "bevy" ], optional = true } +bevy = {version = "0.13", default-features = false} +renet = {path = "../renet", version = "0.0.15", default-features=false, features = ["bevy"]} [dev-dependencies] -bevy = {version = "0.12", default-features = false, features = ["bevy_core_pipeline", "bevy_render", "bevy_asset", "bevy_pbr", "x11", "tonemapping_luts", "ktx2", "zstd"]} -bincode = "1.3.1" -env_logger = "0.10.0" +bevy = {version = "0.13", default-features = false, features = ["bevy_core_pipeline", "bevy_render", "bevy_asset", "bevy_pbr", "x11", "tonemapping_luts", "ktx2", "zstd"]} +bincode = "1.3" +env_logger = "0.11" serde = {version = "1.0", features = ["derive"]} diff --git a/bevy_renet/README.md b/bevy_renet/README.md index ac9853ee..b57035a2 100644 --- a/bevy_renet/README.md +++ b/bevy_renet/README.md @@ -124,6 +124,7 @@ If you want a more complex example you can checkout the [demo_bevy](https://gith |bevy|bevy_renet| |---|---| +|0.13|0.0.11| |0.12|0.0.10| |0.11|0.0.9| |0.10|0.0.8| diff --git a/bevy_renet/examples/simple.rs b/bevy_renet/examples/simple.rs index 991126f3..66c0a084 100644 --- a/bevy_renet/examples/simple.rs +++ b/bevy_renet/examples/simple.rs @@ -1,4 +1,4 @@ -use bevy::prelude::{shape::Plane, *}; +use bevy::{prelude::*, render::mesh::PlaneMeshBuilder}; use bevy_renet::{ client_connected, renet::{ @@ -106,7 +106,7 @@ fn main() { app.add_systems( Update, - (server_update_system, server_sync_players, move_players_system).run_if(resource_exists::()), + (server_update_system, server_sync_players, move_players_system).run_if(resource_exists::), ); } else { app.add_plugins(RenetClientPlugin::default()); @@ -118,7 +118,7 @@ fn main() { app.add_systems( Update, - (player_input, client_send_input, client_sync_players).run_if(client_connected()), + (player_input, client_send_input, client_sync_players).run_if(client_connected), ); } @@ -143,8 +143,8 @@ fn server_update_system( // Spawn player cube let player_entity = commands .spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + mesh: meshes.add(Cuboid::from_size(Vec3::splat(1.0))), + material: materials.add(Color::rgb(0.8, 0.7, 0.6)), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..Default::default() }) @@ -210,8 +210,8 @@ fn client_sync_players( println!("Player {} connected.", id); let player_entity = commands .spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + mesh: meshes.add(Cuboid::from_size(Vec3::splat(1.0))), + material: materials.add(Color::rgb(0.8, 0.7, 0.6)), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..Default::default() }) @@ -246,8 +246,8 @@ fn client_sync_players( fn setup(mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(Plane::from_size(5.0))), - material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + mesh: meshes.add(Mesh::from(PlaneMeshBuilder::from_size(Vec2::splat(5.0)))), + material: materials.add(Color::rgb(0.3, 0.5, 0.3)), ..Default::default() }); // light @@ -267,11 +267,11 @@ fn setup(mut commands: Commands, mut meshes: ResMut>, mut materials }); } -fn player_input(keyboard_input: Res>, mut player_input: ResMut) { - player_input.left = keyboard_input.pressed(KeyCode::A) || keyboard_input.pressed(KeyCode::Left); - player_input.right = keyboard_input.pressed(KeyCode::D) || keyboard_input.pressed(KeyCode::Right); - player_input.up = keyboard_input.pressed(KeyCode::W) || keyboard_input.pressed(KeyCode::Up); - player_input.down = keyboard_input.pressed(KeyCode::S) || keyboard_input.pressed(KeyCode::Down); +fn player_input(keyboard_input: Res>, mut player_input: ResMut) { + player_input.left = keyboard_input.pressed(KeyCode::KeyA) || keyboard_input.pressed(KeyCode::ArrowLeft); + player_input.right = keyboard_input.pressed(KeyCode::KeyD) || keyboard_input.pressed(KeyCode::ArrowRight); + player_input.up = keyboard_input.pressed(KeyCode::KeyW) || keyboard_input.pressed(KeyCode::ArrowUp); + player_input.down = keyboard_input.pressed(KeyCode::KeyS) || keyboard_input.pressed(KeyCode::ArrowDown); } fn client_send_input(player_input: Res, mut client: ResMut) { diff --git a/bevy_renet/src/lib.rs b/bevy_renet/src/lib.rs index d9a3e7ad..06ef3115 100644 --- a/bevy_renet/src/lib.rs +++ b/bevy_renet/src/lib.rs @@ -7,9 +7,6 @@ use renet::{RenetClient, RenetServer, ServerEvent}; #[cfg(feature = "transport")] pub mod transport; -#[cfg(feature = "steam")] -pub mod steam; - /// This system set is where all transports receive messages /// /// If you want to ensure data has arrived in the [`RenetClient`] or [`RenetServer`], then schedule your @@ -27,6 +24,7 @@ pub struct RenetReceive; /// This system set runs in PostUpdate. #[derive(Debug, SystemSet, Clone, Copy, PartialEq, Eq, Hash)] pub struct RenetSend; + #[derive(Debug, SystemSet, Clone, Copy, PartialEq, Eq, Hash)] pub enum CoreSet { Pre, @@ -37,7 +35,6 @@ pub struct NetSchedules { pub pre: Interned, pub post: Interned, } - impl Default for NetSchedules { fn default() -> Self { Self { @@ -60,14 +57,15 @@ impl Plugin for RenetServerPlugin { app.init_resource::>(); app.add_systems( self.schedules.pre, - Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), + Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::), ); app.add_systems( self.schedules.pre, Self::emit_server_events_system - .run_if(resource_exists::()) - .after(Self::update_system) - .in_set(CoreSet::Pre), + .in_set(RenetReceive) + .run_if(resource_exists::) + .in_set(CoreSet::Pre) + .after(Self::update_system), ); } } @@ -88,7 +86,7 @@ impl Plugin for RenetClientPlugin { fn build(&self, app: &mut App) { app.add_systems( self.schedules.pre, - Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::()), + Self::update_system.in_set(CoreSet::Pre).run_if(resource_exists::), ); } } @@ -99,43 +97,39 @@ impl RenetClientPlugin { } } -pub fn client_connected() -> impl FnMut(Option>) -> bool { - |client| match client { +pub fn client_connected(client: Option>) -> bool { + match client { Some(client) => client.is_connected(), None => false, } } -pub fn client_disconnected() -> impl FnMut(Option>) -> bool { - |client| match client { +pub fn client_disconnected(client: Option>) -> bool { + match client { Some(client) => client.is_disconnected(), None => true, } } -pub fn client_connecting() -> impl FnMut(Option>) -> bool { - |client| match client { +pub fn client_connecting(client: Option>) -> bool { + match client { Some(client) => client.is_connecting(), None => false, } } -pub fn client_just_connected() -> impl FnMut(Local, Option>) -> bool { - |mut last_connected: Local, client| { - let connected = client.map(|client| client.is_connected()).unwrap_or(false); +pub fn client_just_connected(mut last_connected: Local, client: Option>) -> bool { + let connected = client.map(|client| client.is_connected()).unwrap_or(false); - let just_connected = !*last_connected && connected; - *last_connected = connected; - just_connected - } + let just_connected = !*last_connected && connected; + *last_connected = connected; + just_connected } -pub fn client_just_disconnected() -> impl FnMut(Local, Option>) -> bool { - |mut last_connected: Local, client| { - let disconnected = client.map(|client| client.is_disconnected()).unwrap_or(true); +pub fn client_just_disconnected(mut last_connected: Local, client: Option>) -> bool { + let disconnected = client.map(|client| client.is_disconnected()).unwrap_or(true); - let just_disconnected = *last_connected && disconnected; - *last_connected = !disconnected; - just_disconnected - } + let just_disconnected = *last_connected && disconnected; + *last_connected = !disconnected; + just_disconnected } diff --git a/bevy_renet/src/transport.rs b/bevy_renet/src/transport.rs index 5bffc1f5..76ce4f17 100644 --- a/bevy_renet/src/transport.rs +++ b/bevy_renet/src/transport.rs @@ -6,6 +6,7 @@ use renet::{ use bevy::{app::AppExit, prelude::*}; use crate::{CoreSet, NetSchedules, RenetClientPlugin, RenetReceive, RenetSend, RenetServerPlugin}; + #[derive(Default)] pub struct NetcodeServerPlugin { pub schedules: NetSchedules, @@ -24,8 +25,8 @@ impl Plugin for NetcodeServerPlugin { Self::update_system .in_set(RenetReceive) .in_set(CoreSet::Pre) - .run_if(resource_exists::()) - .run_if(resource_exists::()) + .run_if(resource_exists::) + .run_if(resource_exists::) .after(RenetServerPlugin::update_system) .before(RenetServerPlugin::emit_server_events_system), ); @@ -33,9 +34,9 @@ impl Plugin for NetcodeServerPlugin { app.add_systems( self.schedules.post, (Self::send_packets.in_set(RenetSend), Self::disconnect_on_exit) - .in_set(CoreSet::Post) - .run_if(resource_exists::()) - .run_if(resource_exists::()), + .run_if(resource_exists::) + .run_if(resource_exists::) + .in_set(CoreSet::Post), ); if self.schedules.post == self.schedules.pre { app.configure_sets(self.schedules.post, (CoreSet::Pre, CoreSet::Post).chain()); @@ -44,7 +45,7 @@ impl Plugin for NetcodeServerPlugin { } impl NetcodeServerPlugin { - fn update_system( + pub fn update_system( mut transport: ResMut, mut server: ResMut, time: Res