pub struct SceneEntityMapper<'m> { /* private fields */ }
Expand description
A wrapper for EntityHashMap<Entity>
, augmenting it with the ability to allocate new Entity
references in a destination
world. These newly allocated references are guaranteed to never point to any living entity in that world.
References are allocated by returning increasing generations starting from an internally initialized base
Entity
. After it is finished being used by MapEntities
implementations, this entity is despawned and the
requisite number of generations reserved.
Implementations§
Source§impl<'m> SceneEntityMapper<'m>
impl<'m> SceneEntityMapper<'m>
Sourcepub fn get_map(&'m self) -> &'m EntityHashMap<Entity>
pub fn get_map(&'m self) -> &'m EntityHashMap<Entity>
Gets a reference to the underlying EntityHashMap<Entity>
.
Sourcepub fn get_map_mut(&'m mut self) -> &'m mut EntityHashMap<Entity>
pub fn get_map_mut(&'m mut self) -> &'m mut EntityHashMap<Entity>
Gets a mutable reference to the underlying EntityHashMap<Entity>
.
Sourcepub fn new(map: &'m mut EntityHashMap<Entity>, world: &mut World) -> Self
pub fn new(map: &'m mut EntityHashMap<Entity>, world: &mut World) -> Self
Creates a new SceneEntityMapper
, spawning a temporary base Entity
in the provided World
Sourcepub fn finish(self, world: &mut World)
pub fn finish(self, world: &mut World)
Reserves the allocated references to dead entities within the world. This frees the temporary base
Entity
while reserving extra generations via crate::entity::Entities::reserve_generations
. Because this
renders the SceneEntityMapper
unable to safely allocate any more references, this method takes ownership of
self
in order to render it unusable.
Sourcepub fn world_scope<R>(
entity_map: &'m mut EntityHashMap<Entity>,
world: &mut World,
f: impl FnOnce(&mut World, &mut Self) -> R,
) -> R
pub fn world_scope<R>( entity_map: &'m mut EntityHashMap<Entity>, world: &mut World, f: impl FnOnce(&mut World, &mut Self) -> R, ) -> R
Creates an SceneEntityMapper
from a provided World
and EntityHashMap<Entity>
, then calls the
provided function with it. This allows one to allocate new entity references in this World
that are
guaranteed to never point at a living entity now or in the future. This functionality is useful for safely
mapping entity identifiers that point at entities outside the source world. The passed function, f
, is called
within the scope of this world. Its return value is then returned from world_scope
as the generic type
parameter R
.
Trait Implementations§
Source§impl EntityMapper for SceneEntityMapper<'_>
impl EntityMapper for SceneEntityMapper<'_>
Source§fn map_entity(&mut self, entity: Entity) -> Entity
fn map_entity(&mut self, entity: Entity) -> Entity
Returns the corresponding mapped entity or reserves a new dead entity ID in the current world if it is absent.
Auto Trait Implementations§
impl<'m> Freeze for SceneEntityMapper<'m>
impl<'m> RefUnwindSafe for SceneEntityMapper<'m>
impl<'m> Send for SceneEntityMapper<'m>
impl<'m> Sync for SceneEntityMapper<'m>
impl<'m> Unpin for SceneEntityMapper<'m>
impl<'m> !UnwindSafe for SceneEntityMapper<'m>
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> 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.