diff --git a/src/client.rs b/src/client.rs index 64ccbeb..fad3665 100644 --- a/src/client.rs +++ b/src/client.rs @@ -150,7 +150,7 @@ pub trait NetworkExt { #[cfg(all(feature = "sync"))] /// Register a [Resource] to be synced. - fn sync_resource(&mut self) -> &mut Self; + fn sync_resource(&mut self) -> &mut Self; } impl NetworkExt for App { diff --git a/src/server.rs b/src/server.rs index 912d6fd..aac6014 100644 --- a/src/server.rs +++ b/src/server.rs @@ -215,7 +215,7 @@ pub trait NetworkExt { #[cfg(all(feature = "sync"))] /// Register a [Resource] to be synced. - fn sync_resource(&mut self) -> &mut Self; + fn sync_resource(&mut self) -> &mut Self; } impl NetworkExt for App { @@ -306,18 +306,26 @@ impl NetworkExt for App { } #[cfg(feature = "sync")] - fn sync_resource(&mut self) -> &mut Self { + fn sync_resource(&mut self) -> &mut Self { let update = |resource: Res, connections: Query<&ClientConnection>| { for connection in connections.iter() { connection.send(&*resource); } }; + let send = + |resource: Res, + new_connections: Query<&ClientConnection, Added>| { + for connection in new_connections.iter() { + connection.send(&*resource); + } + }; let remove = |connections: Query<&ClientConnection>| { for connection in connections.iter() { connection.send(&PhantomData::); } }; self.add_system(update.run_if(resource_changed::())) - .add_system(remove.after(update).run_if(resource_removed::())) + .add_system(send.run_if(resource_exists::())) + .add_system(remove.run_if(resource_removed::())) } }