pub struct SubWorld<'a> { /* private fields */ }
Expand description
Provides access to a subset of the entities of a World
.
To access a component mutably in a world, such as inside a query or via an
EntryMut
, you need to borrow the entire world mutably. This prevents you from accessing
any other data in the world at the same time.
In some cases, we can work around this by splitting the world. We can split a world around the
component types requested by a View
. This will create two subworlds, the left one allowing
access only to the components (and mutability) declared by the view, while the right subworld
will allow access to everything but those components.
Subworlds can be recustively further split.
Implementations
sourceimpl<'a> SubWorld<'a>
impl<'a> SubWorld<'a>
sourcepub unsafe fn new_unchecked(
world: &'a World,
components: ComponentAccess<'a>,
archetypes: Option<&'a BitSet>
) -> Self
pub unsafe fn new_unchecked(
world: &'a World,
components: ComponentAccess<'a>,
archetypes: Option<&'a BitSet>
) -> Self
Constructs a new SubWorld.
Safety
Queries assume that this type has been constructed correctly. Ensure that sub-worlds represent disjoint portions of a world and that the world is not used while any of its sub-worlds are alive.
sourcepub fn split<'b, T: IntoView>(&'b mut self) -> (SubWorld<'b>, SubWorld<'b>) where
'a: 'b,
pub fn split<'b, T: IntoView>(&'b mut self) -> (SubWorld<'b>, SubWorld<'b>) where
'a: 'b,
Splits the world into two. The left world allows access only to the data declared by the view; the right world allows access to all else.
Examples
let (left, right) = world.split::<&mut Position>();
With the above, ‘left’ contains a sub-world with access only to &Position
and &mut Position
,
and right
contains a sub-world with access to everything but &Position
and &mut Position
.
let (left, right) = world.split::<&Position>();
In this second example, left
is provided access only to &Position
. right
is granted permission
to everything but &mut Position
.
sourcepub fn split_for_query<'q, V: IntoView, F: EntityFilter>(
&mut self,
_: &'q Query<V, F>
) -> (SubWorld<'_>, SubWorld<'_>)
pub fn split_for_query<'q, V: IntoView, F: EntityFilter>(
&mut self,
_: &'q Query<V, F>
) -> (SubWorld<'_>, SubWorld<'_>)
Splits the world into two. The left world allows access only to the data declared by the query’s view; the right world allows access to all else.
Trait Implementations
sourceimpl<'a> EntityStore for SubWorld<'a>
impl<'a> EntityStore for SubWorld<'a>
sourcefn get_component_storage<V: for<'b> View<'b>>(
&self
) -> Result<StorageAccessor<'_>, EntityAccessError>
fn get_component_storage<V: for<'b> View<'b>>(
&self
) -> Result<StorageAccessor<'_>, EntityAccessError>
Returns a component storage accessor for component types declared in the specified View
.
sourcefn entry_ref(&self, entity: Entity) -> Result<EntryRef<'_>, EntityAccessError>
fn entry_ref(&self, entity: Entity) -> Result<EntryRef<'_>, EntityAccessError>
Returns an entity entry which can be used to access entity metadata and components.
Auto Trait Implementations
impl<'a> !RefUnwindSafe for SubWorld<'a>
impl<'a> Send for SubWorld<'a>
impl<'a> Sync for SubWorld<'a>
impl<'a> Unpin for SubWorld<'a>
impl<'a> !UnwindSafe for SubWorld<'a>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
sourcepub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcepub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcepub fn as_any(&self) -> &(dyn Any + 'static)
pub fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
sourcepub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<T> DowncastSync for T where
T: Any + Send + Sync,
impl<T> DowncastSync for T where
T: Any + Send + Sync,
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more