rmv_bevy_testing_tools/traits/
manage_state.rs1use bevy_state::state::{FreelyMutableState, NextState, State, States};
2
3use crate::prelude::TestApp;
4
5pub trait ManageState {
6 fn get_state<S: States>(&self) -> Option<&S>;
7 fn get_next_state<S: FreelyMutableState>(&self) -> Option<&NextState<S>>;
8 fn set_next_state<S: FreelyMutableState>(&mut self, next: S) -> Option<()>;
9}
10
11impl ManageState for TestApp {
12 fn get_state<S: States>(&self) -> Option<&S> {
13 self.world().get_resource::<State<S>>().map(|s| s.get())
14 }
15 fn get_next_state<S: FreelyMutableState>(&self) -> Option<&NextState<S>> {
16 self.world().get_resource::<NextState<S>>()
17 }
18 fn set_next_state<S: FreelyMutableState>(&mut self, next: S) -> Option<()> {
19 self.world_mut()
20 .get_resource_mut::<NextState<S>>()
21 .map(|mut s| s.set(next))
22 }
23}