mirror of
https://github.com/bevyengine/bevy
synced 2024-11-15 01:18:01 +00:00
aefe1f0739
Co-authored-by: Mike <mike.hsu@gmail.com>
1.5 KiB
1.5 KiB
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 State
at the same time.
As a mutable resource already provide access to the current resource value, 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();
}