diff --git a/crates/bevy_ecs/src/system/related_system.rs b/crates/bevy_ecs/src/system/related_system.rs index 28ccb6885b..c0e9aaf47f 100644 --- a/crates/bevy_ecs/src/system/related_system.rs +++ b/crates/bevy_ecs/src/system/related_system.rs @@ -63,13 +63,25 @@ impl<'w, 's, D: QueryData, F1: QueryFilter, R: RelationshipTarget, F2: QueryFilt &'w self, entity: Entity, ) -> Result<<::ReadOnly as QueryData>::Item<'w>, BevyError> { - if self + if self.contains(entity) { + Ok(self.data_query.get(entity)?) + } else { + Err(RelatedQueryError.into()) + } + } + + pub fn contains(&self, entity: Entity) -> bool { + return self .filter_query .iter() .map(|r| r.get()) .any(|e| e == entity) - { - return Ok(self.data_query.get(entity)?); + && self.data_query.contains(entity); + } + + pub fn get_mut(&'w mut self, entity: Entity) -> Result<::Item<'w>, BevyError> { + if self.contains(entity) { + Ok(self.data_query.get_mut(entity)?) } else { Err(RelatedQueryError.into()) }