Type Definition specs::prelude::WriteStorage

source · []
pub type WriteStorage<'a, T> = Storage<'a, T, FetchMut<'a, MaskedStorage<T>>>;
Expand description

A storage with read and write access.

Additionally to what ReadStorage can do a storage with mutable access allows:

Aliasing

It is strictly disallowed to fetch both a ReadStorage and a WriteStorage of the same component. Because Specs uses interior mutability for its resources, we can’t check this at compile time. If you try to do this, you will get a panic.

It is also disallowed to fetch multiple WriteStorages for the same component.

Retrieve components mutably

This works just like Storage::get, but returns a mutable reference:

let entity = world.create_entity().with(Pos(2.0)).build();

assert_eq!(pos_storage.get_mut(entity), Some(&mut Pos(2.0)));
if let Some(pos) = pos_storage.get_mut(entity) {
    *pos = Pos(4.5);
}

assert_eq!(pos_storage.get(entity), Some(&Pos(4.5)));

Inserting and removing components

You can insert components using Storage::insert and remove them again with Storage::remove.

let entity = world.create_entity().with(Pos(0.1)).build();

if let Ok(Some(p)) = pos_storage.insert(entity, Pos(4.0)) {
    println!("Overwrote {:?} with a new position", p);
}

There’s also an Entry-API similar to the one provided by std::collections::HashMap.

Trait Implementations

The component type of the storage

Get immutable access to an Entitys component

Private function to seal the trait

The component type of the storage

Get immutable access to an Entitys component

Private function to seal the trait

The component type of the storage

Get mutable access to an Entitys component

Get mutable access to an Entitys component. If the component does not exist, it is automatically created using Default::default(). Read more

Insert a component for an Entity

Remove the component for an Entity

Private function to seal the trait

The component type of the storage

Get mutable access to an Entitys component

Get mutable access to an Entitys component. If the component does not exist, it is automatically created using Default::default(). Read more

Insert a component for an Entity

Remove the component for an Entity

Private function to seal the trait

Sets up the system data for fetching it from the World.

Fetches the system data from World. Note that this is only specified for one concrete lifetime 'a, you need to implement the SystemData trait for every possible lifetime. Read more

Returns all read dependencies as fetched from Self::fetch. Read more

Returns all write dependencies as fetched from Self::fetch. Read more