pub struct World { /* private fields */ }Implementations§
Source§impl World
impl World
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new World
Examples found in repository?
examples/world.rs (line 16)
15fn main() {
16 let mut world = World::new();
17
18 // "spawn" / create a new entity
19 let entity_id = world.spawn();
20
21 // add an component to the entity
22 world.add(entity_id, Point(16, 8));
23
24 // add multiple components at once
25 world.add(entity_id, (Count(32), Tag));
26
27 // remove the `Tag` component
28 world.del::<Tag>(entity_id);
29
30 // returns whether an entity has a component
31 world.has::<Point>(entity_id); // true
32
33 // there are also `*_res` functions for singletons
34 // (single components not associated with any entity)
35}More examples
examples/query.rs (line 19)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn spawn(&mut self) -> Entity
pub fn spawn(&mut self) -> Entity
Create an entity
Examples found in repository?
examples/world.rs (line 19)
15fn main() {
16 let mut world = World::new();
17
18 // "spawn" / create a new entity
19 let entity_id = world.spawn();
20
21 // add an component to the entity
22 world.add(entity_id, Point(16, 8));
23
24 // add multiple components at once
25 world.add(entity_id, (Count(32), Tag));
26
27 // remove the `Tag` component
28 world.del::<Tag>(entity_id);
29
30 // returns whether an entity has a component
31 world.has::<Point>(entity_id); // true
32
33 // there are also `*_res` functions for singletons
34 // (single components not associated with any entity)
35}More examples
examples/query.rs (line 22)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn add<B: Bundle>(&mut self, entity: Entity, bundle: B)
pub fn add<B: Bundle>(&mut self, entity: Entity, bundle: B)
Add a component to an entity
Examples found in repository?
examples/world.rs (line 22)
15fn main() {
16 let mut world = World::new();
17
18 // "spawn" / create a new entity
19 let entity_id = world.spawn();
20
21 // add an component to the entity
22 world.add(entity_id, Point(16, 8));
23
24 // add multiple components at once
25 world.add(entity_id, (Count(32), Tag));
26
27 // remove the `Tag` component
28 world.del::<Tag>(entity_id);
29
30 // returns whether an entity has a component
31 world.has::<Point>(entity_id); // true
32
33 // there are also `*_res` functions for singletons
34 // (single components not associated with any entity)
35}More examples
examples/query.rs (line 24)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn has<C: Component>(&self, entity: Entity) -> bool
pub fn has<C: Component>(&self, entity: Entity) -> bool
Check if entity has component C
Examples found in repository?
examples/world.rs (line 31)
15fn main() {
16 let mut world = World::new();
17
18 // "spawn" / create a new entity
19 let entity_id = world.spawn();
20
21 // add an component to the entity
22 world.add(entity_id, Point(16, 8));
23
24 // add multiple components at once
25 world.add(entity_id, (Count(32), Tag));
26
27 // remove the `Tag` component
28 world.del::<Tag>(entity_id);
29
30 // returns whether an entity has a component
31 world.has::<Point>(entity_id); // true
32
33 // there are also `*_res` functions for singletons
34 // (single components not associated with any entity)
35}Sourcepub fn has_key(&self, entity: Entity, key: &ComponentKey) -> bool
pub fn has_key(&self, entity: Entity, key: &ComponentKey) -> bool
Same as Self::has but uses a ComponentKey
Sourcepub fn get<C: Component>(&self, entity: Entity) -> Option<&C>
pub fn get<C: Component>(&self, entity: Entity) -> Option<&C>
Get a reference to the component of an entity
Sourcepub fn get_mut<C: Component>(&mut self, entity: Entity) -> Option<&mut C>
pub fn get_mut<C: Component>(&mut self, entity: Entity) -> Option<&mut C>
Get a mutable reference to the component of an entity
Sourcepub fn del<C: Component>(&mut self, entity: Entity) -> Option<Box<C>>
pub fn del<C: Component>(&mut self, entity: Entity) -> Option<Box<C>>
Remove a component from an entity
Examples found in repository?
examples/world.rs (line 28)
15fn main() {
16 let mut world = World::new();
17
18 // "spawn" / create a new entity
19 let entity_id = world.spawn();
20
21 // add an component to the entity
22 world.add(entity_id, Point(16, 8));
23
24 // add multiple components at once
25 world.add(entity_id, (Count(32), Tag));
26
27 // remove the `Tag` component
28 world.del::<Tag>(entity_id);
29
30 // returns whether an entity has a component
31 world.has::<Point>(entity_id); // true
32
33 // there are also `*_res` functions for singletons
34 // (single components not associated with any entity)
35}Sourcepub fn add_res<C: Component>(&mut self, resource: C)
pub fn add_res<C: Component>(&mut self, resource: C)
Add a global resource
A resource is like a component but it behaves like a singleton. There can only be one type of a resource at a time.
Anything that implements Component can be used as a resource.
You cannot overwrite a resource, if you must, delete one using [Self::delete_res]
Sourcepub fn has_res_key(&self, key: &ComponentKey) -> bool
pub fn has_res_key(&self, key: &ComponentKey) -> bool
Same as Self::has_res but uses a ComponentKey
Sourcepub fn get_res<C: Component>(&self) -> Option<&C>
pub fn get_res<C: Component>(&self) -> Option<&C>
Get a reference to a global resource
For more on resources see Self::add_res
Sourcepub fn get_res_mut<C: Component>(&mut self) -> Option<&mut C>
pub fn get_res_mut<C: Component>(&mut self) -> Option<&mut C>
Get a mutable reference to a global resource
For more on resources see Self::add_res
Trait Implementations§
Auto Trait Implementations§
impl Freeze for World
impl !RefUnwindSafe for World
impl Send for World
impl Sync for World
impl Unpin for World
impl UnsafeUnpin for World
impl !UnwindSafe for World
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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