Address/cleanup a couple TODOs, mainly comment improvements

This commit is contained in:
Imbris 2023-06-03 15:59:16 -04:00
parent a976aa3f40
commit 01df87bdb4
3 changed files with 19 additions and 15 deletions

View File

@ -2269,7 +2269,7 @@ impl Client {
if self.uid() != Some(entity_uid) { if self.uid() != Some(entity_uid) {
self.state self.state
.ecs_mut() .ecs_mut()
.delete_entity_and_clear_from_id_maps(entity_uid); .delete_entity_and_clear_uid_mapping(entity_uid);
} }
}, },
ServerGeneral::Notification(n) => { ServerGeneral::Notification(n) => {

View File

@ -18,7 +18,7 @@ pub trait WorldSyncExt {
where where
C::Storage: Default + specs::storage::Tracked; C::Storage: Default + specs::storage::Tracked;
fn create_entity_synced(&mut self) -> specs::EntityBuilder; fn create_entity_synced(&mut self) -> specs::EntityBuilder;
fn delete_entity_and_clear_from_id_maps(&mut self, uid: Uid); fn delete_entity_and_clear_uid_mapping(&mut self, uid: Uid);
fn uid_from_entity(&self, entity: specs::Entity) -> Option<Uid>; fn uid_from_entity(&self, entity: specs::Entity) -> Option<Uid>;
fn entity_from_uid(&self, uid: Uid) -> Option<specs::Entity>; fn entity_from_uid(&self, uid: Uid) -> Option<specs::Entity>;
fn apply_entity_package<P: CompPacket>( fn apply_entity_package<P: CompPacket>(
@ -66,11 +66,14 @@ impl WorldSyncExt for specs::World {
/// This method should be used from the client-side when processing network /// This method should be used from the client-side when processing network
/// messages that delete entities. /// messages that delete entities.
// TODO: rename method, document called from client only ///
fn delete_entity_and_clear_from_id_maps(&mut self, uid: Uid) { /// Only used on the client.
fn delete_entity_and_clear_uid_mapping(&mut self, uid: Uid) {
// Clear from uid allocator // Clear from uid allocator
let maybe_entity = let maybe_entity = self.write_resource::<IdMaps>()
self.write_resource::<IdMaps>() // Note, rtsim entity and character id mappings don't exist on the client but it is
// easier to reuse the same structure here since there is shared code that needs to
// lookup the entity from a uid.
.remove_entity(None, Some(uid), None, None); .remove_entity(None, Some(uid), None, None);
if let Some(entity) = maybe_entity { if let Some(entity) = maybe_entity {
if let Err(e) = self.delete_entity(entity) { if let Err(e) = self.delete_entity(entity) {
@ -122,7 +125,7 @@ impl WorldSyncExt for specs::World {
// there. Although the client might not get this anyway since it // there. Although the client might not get this anyway since it
// should no longer be subscribed to any regions. // should no longer be subscribed to any regions.
if client_uid != Some(uid) { if client_uid != Some(uid) {
self.delete_entity_and_clear_from_id_maps(uid); self.delete_entity_and_clear_uid_mapping(uid);
} }
}); });
} }

View File

@ -53,13 +53,14 @@ mod not_wasm {
} }
} }
/// Mappings from various Id types to `Entity`s.
#[derive(Debug)] #[derive(Debug)]
pub struct IdMaps { pub struct IdMaps {
/// "Universal" IDs (used to communicate entity identity over the /// "Universal" IDs (used to communicate entity identity over the
/// network). /// network).
uid_mapping: HashMap<Uid, Entity>, uid_mapping: HashMap<Uid, Entity>,
// -- Fields below only used on the server -- // -- Fields below are only used on the server --
uid_allocator: UidAllocator, uid_allocator: UidAllocator,
/// Character IDs. /// Character IDs.
@ -91,14 +92,14 @@ mod not_wasm {
self.rid_mapping.get(&id).copied() self.rid_mapping.get(&id).copied()
} }
// TODO: I think this is suitable to use on both the client and the server. /// Removes mappings for the provided Id(s).
// NOTE: This is only used on the client? Do we not remove on the server? ///
// NOTE: We need UID mapping also on the client but we don't need the other
// mappings on the client!
//
// Useful for when a single entity is deleted because it doesn't reconstruct the
// entire hashmap
/// Returns the `Entity` that the provided `Uid` was mapped to. /// Returns the `Entity` that the provided `Uid` was mapped to.
///
/// Used on both the client and the server when deleting entities,
/// although the client only ever provides a Some value for the
/// `Uid` parameter since the other mappings are not used on the
/// client.
pub fn remove_entity( pub fn remove_entity(
&mut self, &mut self,
expected_entity: Option<Entity>, expected_entity: Option<Entity>,