bevy_ecs/message/
update.rs1use crate::{
2 change_detection::Mut,
3 change_detection::Tick,
4 message::{MessageRegistry, ShouldUpdateMessages},
5 system::{Local, Res, ResMut},
6 world::World,
7};
8use bevy_ecs_macros::SystemSet;
9#[cfg(feature = "bevy_reflect")]
10use core::hash::Hash;
11
12#[doc(hidden)]
13#[derive(SystemSet, Clone, Debug, PartialEq, Eq, Hash)]
14pub struct MessageUpdateSystems;
15
16pub fn signal_message_update_system(signal: Option<ResMut<MessageRegistry>>) {
21 if let Some(mut registry) = signal {
22 registry.should_update = ShouldUpdateMessages::Ready;
23 }
24}
25
26pub fn message_update_system(world: &mut World, mut last_change_tick: Local<Tick>) {
28 world.try_resource_scope(|world, mut registry: Mut<MessageRegistry>| {
29 registry.run_updates(world, *last_change_tick);
30
31 registry.should_update = match registry.should_update {
32 ShouldUpdateMessages::Always => ShouldUpdateMessages::Always,
34 ShouldUpdateMessages::Waiting | ShouldUpdateMessages::Ready => {
36 ShouldUpdateMessages::Waiting
37 }
38 };
39 });
40 *last_change_tick = world.change_tick();
41}
42
43pub fn message_update_condition(maybe_signal: Option<Res<MessageRegistry>>) -> bool {
50 match maybe_signal {
51 Some(signal) => match signal.should_update {
52 ShouldUpdateMessages::Always | ShouldUpdateMessages::Ready => true,
53 ShouldUpdateMessages::Waiting => false,
54 },
55 None => true,
56 }
57}