Struct bevy_rollback::RollbackWorld[][src]

pub struct RollbackWorld { /* fields omitted */ }

Methods from Deref<Target = 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 [Component]s. 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

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

The resulting type after dereferencing.

Dereferences the value.

Mutably dereferences the value.

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

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

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.

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.