diff --git a/src/client/track.rs b/src/client/track.rs index 02396e0..2fc7c5c 100644 --- a/src/client/track.rs +++ b/src/client/track.rs @@ -15,6 +15,8 @@ pub(crate) fn entity_created_on_client( ) { for id in query.iter_mut() { let uuid = Uuid::new_v4(); + track.uuid_to_entity.insert(uuid, id); + track.entity_to_uuid.insert(id, uuid); client.send_message( DefaultChannel::ReliableOrdered, bincode::serialize(&Message::EntitySpawn { id: uuid }).unwrap(), @@ -22,8 +24,6 @@ pub(crate) fn entity_created_on_client( cmd.entity(id) .remove::() .insert(SyncEntity { uuid }); - track.uuid_to_entity.insert(uuid, id); - track.entity_to_uuid.insert(id, uuid); debug!("New entity tracked on client {}", uuid); } } @@ -80,13 +80,10 @@ pub(crate) fn react_on_changed_components( let Ok(bin) = reflect_to_bin(change.data.as_reflect(), ®istry) else { continue; }; - let Some(id) = track.entity_to_uuid.get(&change.change_id.id) else { - continue; - }; client.send_message( DefaultChannel::ReliableOrdered, bincode::serialize(&Message::ComponentUpdated { - id: *id, + id: change.change_id.id, name: change.change_id.name, data: bin, }) diff --git a/src/lib_priv.rs b/src/lib_priv.rs index f26064c..17c74d5 100644 --- a/src/lib_priv.rs +++ b/src/lib_priv.rs @@ -18,7 +18,7 @@ use crate::{ #[derive(PartialEq, Eq, Hash)] pub(crate) struct ComponentChangeId { - pub(crate) id: Entity, + pub(crate) id: Uuid, pub(crate) name: String, } @@ -64,10 +64,7 @@ pub(crate) fn sync_mesh_enabled(tracker: Res) -> bool { impl SyncTrackerRes { pub(crate) fn signal_component_changed(&mut self, id: Uuid, data: Box) { let name = data.get_represented_type_info().unwrap().type_path().into(); - let Some(id) = self.uuid_to_entity.get(&id) else { - return; - }; - let change_id = ComponentChangeId { id: *id, name }; + let change_id = ComponentChangeId { id, name }; if self.pushed_component_from_network.contains(&change_id) { self.pushed_component_from_network.remove(&change_id); return; @@ -95,12 +92,16 @@ impl SyncTrackerRes { let component_data = bin_to_reflect(data, ®istry); let registration = registry.get_with_type_path(name.as_str()).unwrap(); let reflect_component = registration.data::().unwrap(); + let Some(sync_entity) = world.entity(e_id).get::() else { + return false; + }; + let uuid = sync_entity.uuid; let previous_value = reflect_component.reflect(world.entity(e_id)); if equals(previous_value, &*component_data) { world .resource_mut::() .pushed_component_from_network - .insert(ComponentChangeId { id: e_id, name }); + .insert(ComponentChangeId { id: uuid, name }); let entity = &mut world.entity_mut(e_id); reflect_component.apply_or_insert(entity, component_data.as_reflect(), ®istry); true diff --git a/src/server/track.rs b/src/server/track.rs index 3fbf76a..b99fd4c 100644 --- a/src/server/track.rs +++ b/src/server/track.rs @@ -22,10 +22,13 @@ pub(crate) fn entity_created_on_server( bincode::serialize(&Message::EntitySpawn { id: uuid }).unwrap(), ); } - let mut entity = commands.entity(id); track.uuid_to_entity.insert(uuid, id); track.entity_to_uuid.insert(id, uuid); - entity.remove::().insert(SyncEntity { uuid }); + commands + .entity(id) + .remove::() + .insert(SyncEntity { uuid }); + debug!("New entity tracked on server {}", uuid); } } @@ -91,11 +94,8 @@ pub(crate) fn react_on_changed_components( let Ok(bin) = reflect_to_bin(change.data.as_reflect(), ®istry) else { continue; }; - let Some(id) = track.entity_to_uuid.get(&change.change_id.id) else { - continue; - }; let msg = &Message::ComponentUpdated { - id: *id, + id: change.change_id.id, name: change.change_id.name.clone(), data: bin, };