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§
Source§impl<'a> SubWorld<'a>
impl<'a> SubWorld<'a>
Sourcepub unsafe fn new_unchecked(
world: &'a World,
components: ComponentAccess<'a>,
archetypes: Option<&'a BitSet>,
) -> SubWorld<'a>
pub unsafe fn new_unchecked( world: &'a World, components: ComponentAccess<'a>, archetypes: Option<&'a BitSet>, ) -> SubWorld<'a>
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>(&'b mut self) -> (SubWorld<'b>, SubWorld<'b>)where
'a: 'b,
T: IntoView,
pub fn split<'b, T>(&'b mut self) -> (SubWorld<'b>, SubWorld<'b>)where
'a: 'b,
T: IntoView,
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, F>(
&mut self,
_: &'q Query<V, F>,
) -> (SubWorld<'_>, SubWorld<'_>)where
V: IntoView,
F: EntityFilter,
pub fn split_for_query<'q, V, F>(
&mut self,
_: &'q Query<V, F>,
) -> (SubWorld<'_>, SubWorld<'_>)where
V: IntoView,
F: EntityFilter,
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§
Source§impl<'a> EntityStore for SubWorld<'a>
impl<'a> EntityStore for SubWorld<'a>
Source§fn get_component_storage<V>(
&self,
) -> Result<StorageAccessor<'_>, EntityAccessError>where
V: for<'b> View<'b>,
fn get_component_storage<V>(
&self,
) -> Result<StorageAccessor<'_>, EntityAccessError>where
V: for<'b> View<'b>,
View
.Source§fn entry_ref(&self, entity: Entity) -> Result<EntryRef<'_>, EntityAccessError>
fn entry_ref(&self, entity: Entity) -> Result<EntryRef<'_>, EntityAccessError>
Auto Trait Implementations§
impl<'a> Freeze for SubWorld<'a>
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§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Component for T
impl<T> Component for T
Source§type Storage = PackedStorage<T>
type Storage = PackedStorage<T>
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more