Struct legion::world::SubWorld [−][src]
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
impl<'a> SubWorld<'a>
[src]
pub unsafe fn new_unchecked(
world: &'a World,
components: ComponentAccess<'a>,
archetypes: Option<&'a BitSet>
) -> Self
[src]
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.
pub fn split<'b, T: IntoView>(&'b mut self) -> (SubWorld<'b>, SubWorld<'b>) where
'a: 'b,
[src]
'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
.
pub fn split_for_query<'q, V: IntoView, F: EntityFilter>(
&mut self,
_: &'q Query<V, F>
) -> (SubWorld<'_>, SubWorld<'_>)
[src]
&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
impl<'a> Clone for SubWorld<'a>
[src]
impl<'a> EntityStore for SubWorld<'a>
[src]
fn get_component_storage<V: for<'b> View<'b>>(
&self
) -> Result<StorageAccessor<'_>, EntityAccessError>
[src]
&self
) -> Result<StorageAccessor<'_>, EntityAccessError>
fn entry_ref(&self, entity: Entity) -> Result<EntryRef<'_>, EntityAccessError>
[src]
fn entry_mut(
&mut self,
entity: Entity
) -> Result<EntryMut<'_>, EntityAccessError>
[src]
&mut self,
entity: Entity
) -> Result<EntryMut<'_>, EntityAccessError>
fn id(&self) -> WorldId
[src]
impl<'a> From<&'a mut World> for SubWorld<'a>
[src]
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
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Downcast for T where
T: Any,
[src]
T: Any,
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
[src]
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
[src]
pub fn as_any(&self) -> &(dyn Any + 'static)
[src]
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
[src]
impl<T> DowncastSync for T where
T: Send + Sync + Any,
[src]
T: Send + Sync + Any,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
pub const ALIGN: usize
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
pub unsafe fn drop(ptr: usize)
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,