@@ -25,25 +25,35 @@ pub struct SumMe(pub u32);
2525struct TotalSum (u32 );
2626
2727// This observer will trigger when spawning or inserting a SumMe component
28- fn add_when_inserting (mut trigger : Trigger <OnInsert , SumMe >, query : Query <& SumMe >, mut total_sum : ResMut <TotalSum >){
29- let sum_me = query . get (trigger . target ());
30- total_sum . 0 += sum_me . 0 ;
28+ fn add_when_inserting (
29+ trigger : Trigger <OnInsert , SumMe >,
30+ query : Query <& SumMe >,
31+ mut total_sum : ResMut <TotalSum >,
32+ ) {
33+ if let Ok (sum_me ) = query . get (trigger . target ()) {
34+ total_sum . 0 += sum_me . 0 ;
35+ }
3136}
3237
3338// This observer will trigger when despawning or removing a SumMe component
34- fn subtract_when_removing (mut trigger : Trigger <OnRemove , SumMe >, query : Query <& SumMe >, mut total_sum : ResMut <TotalSum >){
35- let sum_me = query . get (trigger . target ());
36- total_sum . 0 -= sum_me . 0 ;
39+ fn subtract_when_removing (
40+ trigger : Trigger <OnRemove , SumMe >,
41+ query : Query <& SumMe >,
42+ mut total_sum : ResMut <TotalSum >,
43+ ) {
44+ if let Ok (sum_me ) = query . get (trigger . target ()) {
45+ total_sum . 0 -= sum_me . 0 ;
46+ }
3747}
3848
3949// Changing this to `&mut SumMe` would fail to compile!
40- fn modify_values (mut commands : Commands , query : Query <(Entity , & SumMe )>){
41- for (entity , sum_me ) in query . iter (){
50+ fn modify_values (mut commands : Commands , query : Query <(Entity , & SumMe )>) {
51+ for (entity , sum_me ) in query . iter () {
4252 // We can read the value, but not write to it.
4353 let current_value = sum_me . 0 ;
4454 // This will overwrite: indirectly mutating the value
4555 // and triggering both observers: removal first, then insertion
46- commands . entity (entity ). insert (sum_me . 0 + 1 );
56+ commands . entity (entity ). insert (SumMe ( current_value + 1 ) );
4757 }
4858}
4959```
0 commit comments