From 0157e102659eeb8a57b7756a537c1da643bcf857 Mon Sep 17 00:00:00 2001 From: NathanW Date: Mon, 17 May 2021 23:04:58 -0600 Subject: [PATCH 1/3] Expose set_changed() on ResMut and Mut --- crates/bevy_ecs/src/system/system_param.rs | 12 +++++++++++- crates/bevy_ecs/src/world/pointer.rs | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/crates/bevy_ecs/src/system/system_param.rs b/crates/bevy_ecs/src/system/system_param.rs index d4561740d67fb..c7d652f9d87f5 100644 --- a/crates/bevy_ecs/src/system/system_param.rs +++ b/crates/bevy_ecs/src/system/system_param.rs @@ -369,6 +369,16 @@ impl<'w, T: Component> ResMut<'w, T> { self.ticks .is_changed(self.last_change_tick, self.change_tick) } + + /// Flags this resource as having been changed. + /// + /// **Note**: this operation is irreversible. + /// You should generally prefer to use [`ResMut::as_mut`], as this returns + /// the contained value _and_ sets this resource as changed. + #[inline] + pub fn set_changed(&mut self) { + self.ticks.set_changed(self.change_tick); + } } impl<'w, T: Component> Deref for ResMut<'w, T> { @@ -381,7 +391,7 @@ impl<'w, T: Component> Deref for ResMut<'w, T> { impl<'w, T: Component> DerefMut for ResMut<'w, T> { fn deref_mut(&mut self) -> &mut Self::Target { - self.ticks.set_changed(self.change_tick); + self.set_changed(); self.value } } diff --git a/crates/bevy_ecs/src/world/pointer.rs b/crates/bevy_ecs/src/world/pointer.rs index 68d3f5d753715..845640d3d5559 100644 --- a/crates/bevy_ecs/src/world/pointer.rs +++ b/crates/bevy_ecs/src/world/pointer.rs @@ -14,6 +14,16 @@ impl<'a, T> Mut<'a, T> { self.component_ticks.set_changed(self.change_tick); self.value } + + /// Flags this component as having been changed. + /// + /// **Note**: this operation is irreversible. + /// You should generally prefer to use [`Mut::as_mut`], as this returns + /// the component _and_ sets it as changed. + #[inline] + pub fn set_changed(&mut self) { + self.component_ticks.set_changed(self.change_tick); + } } impl<'a, T> Deref for Mut<'a, T> { @@ -28,7 +38,7 @@ impl<'a, T> Deref for Mut<'a, T> { impl<'a, T> DerefMut for Mut<'a, T> { #[inline] fn deref_mut(&mut self) -> &mut T { - self.component_ticks.set_changed(self.change_tick); + self.set_changed(); self.value } } From c2aa4d0b3f289716114184d4ae0eedde6e2aebc5 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Tue, 18 May 2021 11:56:17 -0700 Subject: [PATCH 2/3] Tweak comments to make it clearer that mutation automatically triggers changed state --- crates/bevy_ecs/src/system/system_param.rs | 8 ++++---- crates/bevy_ecs/src/world/pointer.rs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/crates/bevy_ecs/src/system/system_param.rs b/crates/bevy_ecs/src/system/system_param.rs index c7d652f9d87f5..bd93e844eb266 100644 --- a/crates/bevy_ecs/src/system/system_param.rs +++ b/crates/bevy_ecs/src/system/system_param.rs @@ -370,11 +370,11 @@ impl<'w, T: Component> ResMut<'w, T> { .is_changed(self.last_change_tick, self.change_tick) } - /// Flags this resource as having been changed. + /// Manually flags this resource as having been changed. This normally isn't + /// required because accessing this pointer mutably automatically flags this + /// resource as "changed". /// - /// **Note**: this operation is irreversible. - /// You should generally prefer to use [`ResMut::as_mut`], as this returns - /// the contained value _and_ sets this resource as changed. + /// **Note**: This operation is irreversible. #[inline] pub fn set_changed(&mut self) { self.ticks.set_changed(self.change_tick); diff --git a/crates/bevy_ecs/src/world/pointer.rs b/crates/bevy_ecs/src/world/pointer.rs index 845640d3d5559..1b71c5991a59c 100644 --- a/crates/bevy_ecs/src/world/pointer.rs +++ b/crates/bevy_ecs/src/world/pointer.rs @@ -15,11 +15,11 @@ impl<'a, T> Mut<'a, T> { self.value } - /// Flags this component as having been changed. + /// Manually flags this value as having been changed. This normally isn't + /// required because accessing this pointer mutably automatically flags this + /// resource as "changed". /// - /// **Note**: this operation is irreversible. - /// You should generally prefer to use [`Mut::as_mut`], as this returns - /// the component _and_ sets it as changed. + /// **Note**: This operation is irreversible. #[inline] pub fn set_changed(&mut self) { self.component_ticks.set_changed(self.change_tick); From e9971554229725a5430f73631d8590b3e1c1c812 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Tue, 18 May 2021 11:57:25 -0700 Subject: [PATCH 3/3] resource->value --- crates/bevy_ecs/src/world/pointer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ecs/src/world/pointer.rs b/crates/bevy_ecs/src/world/pointer.rs index 1b71c5991a59c..dbca45b6f93e2 100644 --- a/crates/bevy_ecs/src/world/pointer.rs +++ b/crates/bevy_ecs/src/world/pointer.rs @@ -17,7 +17,7 @@ impl<'a, T> Mut<'a, T> { /// Manually flags this value as having been changed. This normally isn't /// required because accessing this pointer mutably automatically flags this - /// resource as "changed". + /// value as "changed". /// /// **Note**: This operation is irreversible. #[inline]