use crate::{
change_detection::Mut,
component::Tick,
message::{MessageRegistry, ShouldUpdateMessages},
system::{Local, Res, ResMut},
world::World,
};
use bevy_ecs_macros::SystemSet;
#[cfg(feature = "bevy_reflect")]
use core::hash::Hash;
#[doc(hidden)]
#[derive(SystemSet, Clone, Debug, PartialEq, Eq, Hash)]
pub struct MessageUpdateSystems;
#[deprecated(since = "0.17.0", note = "Renamed to `MessageUpdateSystems`.")]
pub type EventUpdates = MessageUpdateSystems;
pub fn signal_message_update_system(signal: Option<ResMut<MessageRegistry>>) {
if let Some(mut registry) = signal {
registry.should_update = ShouldUpdateMessages::Ready;
}
}
pub fn message_update_system(world: &mut World, mut last_change_tick: Local<Tick>) {
world.try_resource_scope(|world, mut registry: Mut<MessageRegistry>| {
registry.run_updates(world, *last_change_tick);
registry.should_update = match registry.should_update {
ShouldUpdateMessages::Always => ShouldUpdateMessages::Always,
ShouldUpdateMessages::Waiting | ShouldUpdateMessages::Ready => {
ShouldUpdateMessages::Waiting
}
};
});
*last_change_tick = world.change_tick();
}
pub fn message_update_condition(maybe_signal: Option<Res<MessageRegistry>>) -> bool {
match maybe_signal {
Some(signal) => match signal.should_update {
ShouldUpdateMessages::Always | ShouldUpdateMessages::Ready => true,
ShouldUpdateMessages::Waiting => false,
},
None => true,
}
}