|
|
|
|
@ -5,7 +5,8 @@ pub struct ViewPlugin;
|
|
|
|
|
|
|
|
|
|
impl Plugin for ViewPlugin {
|
|
|
|
|
fn build(&self, app: &mut App) {
|
|
|
|
|
app.add_observer(state_monitor).init_state::<ViewState>();
|
|
|
|
|
app.init_state::<ViewState>()
|
|
|
|
|
.add_systems(Update, state_monitor);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -31,22 +32,19 @@ pub(crate) fn button_set_state<S: FreelyMutableState + Clone>(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn state_monitor(
|
|
|
|
|
trigger: Trigger<StateTransitionEvent<ViewState>>,
|
|
|
|
|
mut events: EventReader<StateTransitionEvent<ViewState>>,
|
|
|
|
|
mut entities: Query<(&ViewState, &mut Visibility)>,
|
|
|
|
|
) {
|
|
|
|
|
events.read().for_each(|event| {
|
|
|
|
|
entities
|
|
|
|
|
.iter_mut()
|
|
|
|
|
.for_each(|(view_state, mut visibility)| {
|
|
|
|
|
info!(
|
|
|
|
|
"Transition from {:?} to {:?}",
|
|
|
|
|
trigger.event().exited,
|
|
|
|
|
trigger.event().entered
|
|
|
|
|
);
|
|
|
|
|
if Some(view_state) == trigger.event().exited.as_ref() {
|
|
|
|
|
*visibility = Visibility::Hidden;
|
|
|
|
|
}
|
|
|
|
|
if Some(view_state) == trigger.event().entered.as_ref() {
|
|
|
|
|
info!("Transition from {:?} to {:?}", event.exited, event.entered);
|
|
|
|
|
if Some(view_state) == event.entered.as_ref() {
|
|
|
|
|
*visibility = Visibility::Inherited;
|
|
|
|
|
} else {
|
|
|
|
|
*visibility = Visibility::Hidden;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|