Skip to content

Latest commit

 

History

History
44 lines (34 loc) · 1.54 KB

B0002.md

File metadata and controls

44 lines (34 loc) · 1.54 KB

B0002

To keep Rust rules on references (either one mutable reference or any number of immutable references) on a resource, it is not possible to have more than one resource of a kind if one is mutable in the same system. This can happen between Res<T> and ResMut<T> for the same T, or between NonSend<T> and NonSendMut<T> for the same T.

Erroneous code example:

use bevy::prelude::*;

fn update_materials(
    mut material_updater: ResMut<Assets<StandardMaterial>>,
    current_materials: Res<Assets<StandardMaterial>>,
) {
    // ...
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Update, update_materials)
        .run();
}

This will panic, as it's not possible to have both a mutable and an immutable resource on Assets<StandardMaterial> at the same time.

As a mutable resource already provides access to the current resource value, so you can remove the immutable resource.

use bevy::prelude::*;

fn update_materials(
    mut material_updater: ResMut<Assets<StandardMaterial>>,
) {
    // ...
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Update, update_materials)
        .run();
}