pub struct LazyUpdate { /* private fields */ }
Expand description
Lazy updates can be used for world updates
that need to borrow a lot of resources
and as such should better be done at the end.
They work lazily in the sense that they are
dispatched when calling world.maintain()
.
Lazy updates are dispatched in the order that they are requested. Multiple updates sent from one system may be overridden by updates sent from other systems.
Please note that the provided methods take &self
so there’s no need to get LazyUpdate
mutably.
This resource is added to the world by default.
Implementations§
Source§impl LazyUpdate
impl LazyUpdate
Sourcepub fn insert<C>(&self, e: Entity, c: C)
pub fn insert<C>(&self, e: Entity, c: C)
Lazily inserts a component for an entity.
§Examples
struct Pos(f32, f32);
impl Component for Pos {
type Storage = VecStorage<Self>;
}
struct InsertPos;
impl<'a> System<'a> for InsertPos {
type SystemData = (Entities<'a>, Read<'a, LazyUpdate>);
fn run(&mut self, (ent, lazy): Self::SystemData) {
let a = ent.create();
lazy.insert(a, Pos(1.0, 1.0));
}
}
Sourcepub fn insert_all<C, I>(&self, iter: I)
pub fn insert_all<C, I>(&self, iter: I)
Lazily inserts components for entities.
§Examples
struct Pos(f32, f32);
impl Component for Pos {
type Storage = VecStorage<Self>;
}
struct InsertPos;
impl<'a> System<'a> for InsertPos {
type SystemData = (Entities<'a>, Read<'a, LazyUpdate>);
fn run(&mut self, (ent, lazy): Self::SystemData) {
let a = ent.create();
let b = ent.create();
lazy.insert_all(vec![(a, Pos(3.0, 1.0)), (b, Pos(0.0, 4.0))]);
}
}
Sourcepub fn remove<C>(&self, e: Entity)
pub fn remove<C>(&self, e: Entity)
Lazily removes a component.
§Examples
struct Pos;
impl Component for Pos {
type Storage = VecStorage<Self>;
}
struct RemovePos;
impl<'a> System<'a> for RemovePos {
type SystemData = (Entities<'a>, Read<'a, LazyUpdate>);
fn run(&mut self, (ent, lazy): Self::SystemData) {
for entity in ent.join() {
lazy.remove::<Pos>(entity);
}
}
}
Sourcepub fn exec<F>(&self, f: F)
pub fn exec<F>(&self, f: F)
Lazily executes a closure with world access.
§Examples
struct Pos;
impl Component for Pos {
type Storage = VecStorage<Self>;
}
struct Execution;
impl<'a> System<'a> for Execution {
type SystemData = (Entities<'a>, Read<'a, LazyUpdate>);
fn run(&mut self, (ent, lazy): Self::SystemData) {
for entity in ent.join() {
lazy.exec(move |world| {
if world.is_alive(entity) {
println!("Entity {:?} is alive.", entity);
}
});
}
}
}
Sourcepub fn exec_mut<F>(&self, f: F)
pub fn exec_mut<F>(&self, f: F)
Lazily executes a closure with mutable world access.
This can be used to add a resource to the World
from a system.
§Examples
struct Sys;
impl<'a> System<'a> for Sys {
type SystemData = (Entities<'a>, Read<'a, LazyUpdate>);
fn run(&mut self, (ent, lazy): Self::SystemData) {
for entity in ent.join() {
lazy.exec_mut(move |world| {
// complete extermination!
world.delete_all();
});
}
}
}
Sourcepub fn create_entity(&self, ent: &EntitiesRes) -> LazyBuilder<'_>
pub fn create_entity(&self, ent: &EntitiesRes) -> LazyBuilder<'_>
Creates a new LazyBuilder
which inserts components
using LazyUpdate
. This means that the components won’t
be available immediately, but only after a maintain
on World
is performed.
§Examples
struct Pos(f32, f32);
impl Component for Pos {
type Storage = VecStorage<Self>;
}
let my_entity = lazy.create_entity(&entities).with(Pos(1.0, 3.0)).build();
Trait Implementations§
Source§impl Default for LazyUpdate
impl Default for LazyUpdate
Source§fn default() -> LazyUpdate
fn default() -> LazyUpdate
Auto Trait Implementations§
impl Freeze for LazyUpdate
impl RefUnwindSafe for LazyUpdate
impl Send for LazyUpdate
impl Sync for LazyUpdate
impl Unpin for LazyUpdate
impl UnwindSafe for LazyUpdate
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> 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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> TryDefault for Twhere
T: Default,
impl<T> TryDefault for Twhere
T: Default,
Source§fn try_default() -> Result<T, String>
fn try_default() -> Result<T, String>
Source§fn unwrap_default() -> Self
fn unwrap_default() -> Self
try_default
and panics on an error case.