rmv_bevy_testing_tools/traits/
manage_state.rs

1use 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}