Type Definition specs::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
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
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 Resources.
Fetches the system data from Resources. 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