Struct rfw::ecs::World[][src]

pub struct World { /* fields omitted */ }
Expand description

World stores and exposes operations on entities, components, and their associated metadata. Each Entity has a set of components. Each component can have up to one instance of each component type. Entity components can be created, updated, removed, and queried using a given World.

Implementations

Creates a new empty World

Retrieves this world’s unique ID

Retrieves this world’s Entities collection

Retrieves this world’s Archetypes collection

Retrieves this world’s Components collection

Retrieves a mutable reference to this world’s Components collection

Retrieves this world’s Storages collection

Retrieves this world’s Bundles collection

Retrieves a WorldCell, which safely enables multiple mutable World accesses at the same time, provided those accesses do not conflict with each other.

Registers a new component using the given ComponentDescriptor. Components do not need to be manually registered. This just provides a way to override default configuration. Attempting to register a component with a type that has already been used by World will result in an error.

The default component storage type can be overridden like this:

use bevy_ecs::{component::{ComponentDescriptor, StorageType}, world::World};

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
world.register_component(ComponentDescriptor::new::<Position>(StorageType::SparseSet)).unwrap();

Retrieves an EntityRef that exposes read-only operations for the given entity. This will panic if the entity does not exist. Use World::get_entity if you want to check for entity existence instead of implicitly panic-ing.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();

let position = world.entity(entity).get::<Position>().unwrap();
assert_eq!(position.x, 0.0);

Retrieves an EntityMut that exposes read and write operations for the given entity. This will panic if the entity does not exist. Use World::get_entity_mut if you want to check for entity existence instead of implicitly panic-ing.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();

let mut position = world.entity_mut(entity).get_mut::<Position>().unwrap();
position.x = 1.0;

Retrieves an EntityRef that exposes read-only operations for the given entity. Returns None if the entity does not exist. Use World::entity if you don’t want to unwrap the EntityRef yourself.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();

let entity_ref = world.get_entity(entity).unwrap();
let position = entity_ref.get::<Position>().unwrap();
assert_eq!(position.x, 0.0);

Retrieves an EntityMut that exposes read and write operations for the given entity. Returns None if the entity does not exist. Use World::entity_mut if you don’t want to unwrap the EntityMut yourself.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();

let mut entity_mut = world.get_entity_mut(entity).unwrap();
let mut position = entity_mut.get_mut::<Position>().unwrap();
position.x = 1.0;

Spawns a new Entity and returns a corresponding EntityMut, which can be used to add components to the entity or retrieve its id.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 }) // add a single component
    .insert_bundle((1, 2.0, "hello")) // add a bundle of components
    .id();

let position = world.entity(entity).get::<Position>().unwrap();
assert_eq!(position.x, 0.0);

Spawns a batch of entities with the same component Bundle type. Takes a given Bundle iterator and returns a corresponding Entity iterator. This is more efficient than spawning entities and adding components to them individually, but it is limited to spawning entities with the same Bundle type, whereas spawning individually is more flexible.

use bevy_ecs::{entity::Entity, world::World};

let mut world = World::new();
let entities = world.spawn_batch(vec![
  ("a", 0.0), // the first entity
  ("b", 1.0), // the second entity
]).collect::<Vec<Entity>>();

assert_eq!(entities.len(), 2);

Retrieves a reference to the given entity’s Component of the given type. Returns None if the entity does not have a Component of the given type.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();
let position = world.get::<Position>(entity).unwrap();
assert_eq!(position.x, 0.0);

Retrieves a mutable reference to the given entity’s Component of the given type. Returns None if the entity does not have a Component of the given type.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();
let mut position = world.get_mut::<Position>(entity).unwrap();
position.x = 1.0;

Despawns the given entity, if it exists. This will also remove all of the entity’s Components. Returns true if the entity is successfully despawned and false if the entity does not exist.

use bevy_ecs::world::World;

struct Position {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entity = world.spawn()
    .insert(Position { x: 0.0, y: 0.0 })
    .id();
assert!(world.despawn(entity));
assert!(world.get_entity(entity).is_none());
assert!(world.get::<Position>(entity).is_none());

Clears component tracker state

Returns QueryState for the given WorldQuery, which is used to efficiently run queries on the World by storing and reusing the QueryState.

use bevy_ecs::{entity::Entity, world::World};

#[derive(Debug, PartialEq)]
struct Position {
  x: f32,
  y: f32,
}

struct Velocity {
  x: f32,
  y: f32,
}

let mut world = World::new();
let entities = world.spawn_batch(vec![
    (Position { x: 0.0, y: 0.0}, Velocity { x: 1.0, y: 0.0 }),    
    (Position { x: 0.0, y: 0.0}, Velocity { x: 0.0, y: 1.0 }),    
]).collect::<Vec<Entity>>();

let mut query = world.query::<(&mut Position, &Velocity)>();
for (mut position, velocity) in query.iter_mut(&mut world) {
   position.x += velocity.x;
   position.y += velocity.y;
}     

assert_eq!(world.get::<Position>(entities[0]).unwrap(), &Position { x: 1.0, y: 0.0 });
assert_eq!(world.get::<Position>(entities[1]).unwrap(), &Position { x: 0.0, y: 1.0 });

Returns QueryState for the given filtered WorldQuery, which is used to efficiently run queries on the World by storing and reusing the QueryState.

use bevy_ecs::{entity::Entity, world::World, query::With};

struct A;
struct B;

let mut world = World::new();
let e1 = world.spawn().insert(A).id();
let e2 = world.spawn().insert_bundle((A, B)).id();

let mut query = world.query_filtered::<Entity, With<B>>();
let matching_entities = query.iter(&world).collect::<Vec<Entity>>();

assert_eq!(matching_entities, vec![e2]);

Returns an iterator of entities that had components of type T removed since the last call to World::clear_trackers.

Returns an iterator of entities that had components with the given component_id removed since the last call to World::clear_trackers.

Inserts a new resource with the given value. Resources are “unique” data of a given type.

Inserts a new non-send resource with the given value. Resources are “unique” data of a given type.

Removes the resource of a given type and returns it, if it exists. Otherwise returns None. Resources are “unique” data of a given type.

Safety

make sure you’re on main thread if T isn’t Send + Sync

Returns true if a resource of type T exists. Otherwise returns false.

Gets a reference to the resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Gets a mutable reference to the resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Gets a resource of type T if it exists, otherwise inserts the resource using the result of calling func.

Gets a mutable reference to the resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Safety

This will allow aliased mutable access to the given resource type. The caller must ensure that only one mutable access exists at a time.

Gets a reference to the non-send resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Gets a mutable reference to the non-send resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Gets a mutable reference to the non-send resource of the given type, if it exists. Otherwise returns None Resources are “unique” data of a given type.

Safety

This will allow aliased mutable access to the given non-send resource type. The caller must ensure that only one mutable access exists at a time.

Temporarily removes the requested resource from this World, then re-adds it before returning. This enables safe mutable access to a resource while still providing mutable world access

use bevy_ecs::world::{World, Mut};
struct A(u32);
struct B(u32);
let mut world = World::new();
world.insert_resource(A(1));
let entity = world.spawn().insert(B(1)).id();

world.resource_scope(|world, mut a: Mut<A>| {
    let b = world.get_mut::<B>(entity).unwrap();
    a.0 += b.0;
});
assert_eq!(world.get_resource::<A>().unwrap().0, 2);

Trait Implementations

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Converts self into T using Into<T>. 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

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait. Read more

Causes self to use its Binary implementation when Debug-formatted.

Causes self to use its Display implementation when Debug-formatted. Read more

Causes self to use its LowerExp implementation when Debug-formatted. Read more

Causes self to use its LowerHex implementation when Debug-formatted. Read more

Causes self to use its Octal implementation when Debug-formatted.

Causes self to use its Pointer implementation when Debug-formatted. Read more

Causes self to use its UpperExp implementation when Debug-formatted. Read more

Causes self to use its UpperHex implementation when Debug-formatted. Read more

Performs the conversion.

Creates Self using data from the given World

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Performs the conversion.

Pipes by value. This is generally the method you want to use. Read more

Borrows self and passes that borrow into the pipe function. Read more

Mutably borrows self and passes that borrow into the pipe function. Read more

Borrows self, then passes self.borrow() into the pipe function. Read more

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more

Borrows self, then passes self.as_ref() into the pipe function.

Mutably borrows self, then passes self.as_mut() into the pipe function. Read more

Borrows self, then passes self.deref() into the pipe function.

Mutably borrows self, then passes self.deref_mut() into the pipe function. Read more

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

Immutable access to a value. Read more

Mutable access to a value. Read more

Immutable access to the Borrow<B> of a value. Read more

Mutable access to the BorrowMut<B> of a value. Read more

Immutable access to the AsRef<R> view of a value. Read more

Mutable access to the AsMut<R> view of a value. Read more

Immutable access to the Deref::Target of a value. Read more

Mutable access to the Deref::Target of a value. Read more

Calls .tap() only in debug builds, and is erased in release builds.

Calls .tap_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow() only in debug builds, and is erased in release builds. Read more

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref() only in debug builds, and is erased in release builds. Read more

Calls .tap_ref_mut() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref() only in debug builds, and is erased in release builds. Read more

Calls .tap_deref_mut() only in debug builds, and is erased in release builds. Read more

Attempts to convert self into T using TryInto<T>. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.