@ -29,11 +29,22 @@ fn main() {
let mut app = App ::new ( ) ;
app . add_state ::< GameState > ( ) ;
app . add_state ::< DisplayState > ( ) ;
app . add_systems ( Update , state . run_if ( resource_changed ::< State < GameState > > ( ) ) ) ;
app . add_systems (
Update ,
(
debug_state ::< DisplayState > . run_if ( resource_changed ::< State < DisplayState > > ( ) ) ,
debug_state ::< GameState > . run_if ( resource_changed ::< State < GameState > > ( ) ) ,
) ,
) ;
app . add_systems ( Update , loading . run_if ( in_state ( GameState ::Loading ) ) ) ;
app . add_systems (
Update ,
(
toggle_display_mode . run_if ( on_event ::< KeyboardInput > ( ) ) ,
// TODO: Run this other times too so we ensure a camera is always active
toggle_display_camera . run_if ( state_changed ::< DisplayState > ( ) ) ,
toggle_display_camera . run_if ( state_changed ::< GameState > ( ) ) ,
) ,
) ;
app . add_plugins (
DefaultPlugins
@ -116,9 +127,8 @@ fn loading(
/// System for printing the current state
///
/// Only runs when state is modified.
fn state ( game_state : Res < State < GameState > > , display_state : Res < State < DisplayState > > ) {
info ! ( "Game State is {:?}" , * game_state ) ;
info ! ( "Display State is {:?}" , * display_state ) ;
fn debug_state < S : States > ( state : Res < State < S > > ) {
info ! ( "State change {:?}" , * state ) ;
}
fn toggle_display_mode (
@ -139,25 +149,26 @@ fn toggle_display_mode(
} )
}
fn toggle_display_camera (
state : Res < State < DisplayState > > ,
mut cameras : Query < ( & mut Camera , & DisplayState ) > ,
) {
cameras . iter_mut ( ) . for_each ( | ( mut camera , display_state ) | {
camera . is_active = display_state = = state . get ( ) ;
} ) ;
}
fn activate < Marker : Component > (
mut cameras : Query < & mut Camera , With < Marker > > ,
mut entities : Query < & mut Visibility , ( With < Marker > , Without < game ::Captured > ) > ,
) {
cameras . iter_mut ( ) . for_each ( | mut camera | {
camera . is_active = true ;
} ) ;
entities . iter_mut ( ) . for_each ( | mut visibility | {
* visibility = Visibility ::Visible ;
} ) ;
}
fn deactivate < Marker : Component > (
mut cameras : Query < & mut Camera , With < Marker > > ,
mut entities : Query < & mut Visibility , ( With < Marker > , Without < game ::Captured > ) > ,
) {
cameras . iter_mut ( ) . for_each ( | mut camera | {
camera . is_active = false ;
} ) ;
entities . iter_mut ( ) . for_each ( | mut visibility | {
* visibility = Visibility ::Hidden ;
} ) ;