Skip to content

Commit 0a3b635

Browse files
james7132ItsDoot
authored andcommitted
Use Ref instead of &T and Changed<T> (bevyengine#7175)
# Objective Follow up bevyengine#7097. Use `Ref<T>` instead of `&T` and the change detection query params. ## Solution Replace them.
1 parent df51dc1 commit 0a3b635

File tree

2 files changed

+21
-30
lines changed

2 files changed

+21
-30
lines changed

crates/bevy_text/src/text2d.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use bevy_asset::Assets;
22
use bevy_ecs::{
33
bundle::Bundle,
4+
change_detection::{DetectChanges, Ref},
45
component::Component,
56
entity::Entity,
67
event::EventReader,
7-
query::Changed,
88
reflect::ReflectComponent,
99
system::{Commands, Local, Query, Res, ResMut},
1010
};
@@ -166,8 +166,7 @@ pub fn update_text2d_layout(
166166
mut text_pipeline: ResMut<TextPipeline>,
167167
mut text_query: Query<(
168168
Entity,
169-
Changed<Text>,
170-
&Text,
169+
Ref<Text>,
171170
Option<&Text2dBounds>,
172171
&mut Text2dSize,
173172
Option<&mut TextLayoutInfo>,
@@ -177,10 +176,8 @@ pub fn update_text2d_layout(
177176
let factor_changed = scale_factor_changed.iter().last().is_some();
178177
let scale_factor = windows.scale_factor(WindowId::primary());
179178

180-
for (entity, text_changed, text, maybe_bounds, mut calculated_size, text_layout_info) in
181-
&mut text_query
182-
{
183-
if factor_changed || text_changed || queue.remove(&entity) {
179+
for (entity, text, maybe_bounds, mut calculated_size, text_layout_info) in &mut text_query {
180+
if factor_changed || text.is_changed() || queue.remove(&entity) {
184181
let text_bounds = match maybe_bounds {
185182
Some(bounds) => Vec2::new(
186183
scale_value(bounds.size.x, scale_factor),

crates/bevy_transform/src/systems.rs

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
use crate::components::{GlobalTransform, Transform};
2-
use bevy_ecs::prelude::{Changed, Entity, Query, With, Without};
2+
use bevy_ecs::{
3+
change_detection::Ref,
4+
prelude::{Changed, DetectChanges, Entity, Query, With, Without},
5+
};
36
use bevy_hierarchy::{Children, Parent};
47

58
/// Update [`GlobalTransform`] component of entities that aren't in the hierarchy
@@ -24,32 +27,26 @@ pub fn sync_simple_transforms(
2427
/// to propagate transforms correctly.
2528
pub fn propagate_transforms(
2629
mut root_query: Query<
27-
(
28-
Entity,
29-
&Children,
30-
&Transform,
31-
Changed<Transform>,
32-
Changed<Children>,
33-
&mut GlobalTransform,
34-
),
30+
(Entity, Ref<Children>, Ref<Transform>, &mut GlobalTransform),
3531
Without<Parent>,
3632
>,
37-
transform_query: Query<(&Transform, Changed<Transform>, &mut GlobalTransform), With<Parent>>,
33+
transform_query: Query<(Ref<Transform>, &mut GlobalTransform), With<Parent>>,
3834
parent_query: Query<&Parent>,
39-
children_query: Query<(&Children, Changed<Children>), (With<Parent>, With<GlobalTransform>)>,
35+
children_query: Query<Ref<Children>, (With<Parent>, With<GlobalTransform>)>,
4036
) {
4137
root_query.par_for_each_mut(
4238
// The differing depths and sizes of hierarchy trees causes the work for each root to be
4339
// different. A batch size of 1 ensures that each tree gets it's own task and multiple
4440
// large trees are not clumped together.
4541
1,
46-
|(entity, children, transform, mut changed, children_changed, mut global_transform)| {
42+
|(entity, children, transform, mut global_transform)| {
43+
let mut changed = transform.is_changed();
4744
if changed {
4845
*global_transform = GlobalTransform::from(*transform);
4946
}
5047

5148
// If our `Children` has changed, we need to recalculate everything below us
52-
changed |= children_changed;
49+
changed |= children.is_changed();
5350

5451
for child in children.iter() {
5552
// SAFETY:
@@ -87,12 +84,9 @@ pub fn propagate_transforms(
8784
/// nor any of its descendants.
8885
unsafe fn propagate_recursive(
8986
parent: &GlobalTransform,
90-
unsafe_transform_query: &Query<
91-
(&Transform, Changed<Transform>, &mut GlobalTransform),
92-
With<Parent>,
93-
>,
87+
unsafe_transform_query: &Query<(Ref<Transform>, &mut GlobalTransform), With<Parent>>,
9488
parent_query: &Query<&Parent>,
95-
children_query: &Query<(&Children, Changed<Children>), (With<Parent>, With<GlobalTransform>)>,
89+
children_query: &Query<Ref<Children>, (With<Parent>, With<GlobalTransform>)>,
9690
expected_parent: Entity,
9791
entity: Entity,
9892
mut changed: bool,
@@ -106,7 +100,7 @@ unsafe fn propagate_recursive(
106100
);
107101

108102
let global_matrix = {
109-
let Ok((transform, transform_changed, mut global_transform)) =
103+
let Ok((transform, mut global_transform)) =
110104
// SAFETY: This call cannot create aliased mutable references.
111105
// - The top level iteration parallelizes on the roots of the hierarchy.
112106
// - The above assertion ensures that each child has one and only one unique parent throughout the entire
@@ -137,19 +131,19 @@ unsafe fn propagate_recursive(
137131
return;
138132
};
139133

140-
changed |= transform_changed;
134+
changed |= transform.is_changed();
141135
if changed {
142136
*global_transform = parent.mul_transform(*transform);
143137
}
144138
*global_transform
145139
};
146140

147-
let Ok((children, changed_children)) = children_query.get(entity) else {
141+
let Ok(children) = children_query.get(entity) else {
148142
return
149143
};
150144
// If our `Children` has changed, we need to recalculate everything below us
151-
changed |= changed_children;
152-
for child in children {
145+
changed |= children.is_changed();
146+
for child in &children {
153147
// SAFETY: The caller guarantees that `unsafe_transform_query` will not be fetched
154148
// for any descendants of `entity`, so it is safe to call `propagate_recursive` for each child.
155149
unsafe {

0 commit comments

Comments
 (0)