Struct legion::world::SubWorld [−][src]
pub struct SubWorld<'a> { /* fields omitted */ }
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 recursively further split.
Implementations
pub 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.
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
.
pub 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
fn 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
.
Returns an entity entry which can be used to access entity metadata and components.
Returns a mutable entity entry which can be used to access entity metadata and components.
Auto Trait Implementations
impl<'a> !RefUnwindSafe for SubWorld<'a>
impl<'a> !UnwindSafe for SubWorld<'a>
Blanket Implementations
Mutably borrows from an owned value. Read more
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
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
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
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