Simple 2d/3d toggle

selection-refactor
Elijah Voigt 2 years ago
parent ab130b4be9
commit b8138c0129

@ -8,7 +8,10 @@ mod prelude;
use std::time::Duration; use std::time::Duration;
use bevy::asset::ChangeWatcher; use bevy::{
asset::ChangeWatcher,
input::{keyboard::KeyboardInput, ButtonState},
};
use crate::prelude::*; use crate::prelude::*;
@ -19,8 +22,12 @@ fn main() {
App::new() App::new()
.add_state::<GameState>() .add_state::<GameState>()
.add_systems(Update, state) .add_systems(Update, state.run_if(resource_changed::<State<GameState>>()))
.add_systems(Update, loading.run_if(in_state(GameState::Loading))) .add_systems(Update, loading.run_if(in_state(GameState::Loading)))
.add_systems(
Update,
toggle_display_mode.run_if(on_event::<KeyboardInput>()),
)
.add_plugins(( .add_plugins((
DefaultPlugins DefaultPlugins
.set(ImagePlugin::default_nearest()) .set(ImagePlugin::default_nearest())
@ -69,10 +76,27 @@ fn loading(
} }
/// System for printing the current state /// System for printing the current state
fn state(state: Option<Res<State<GameState>>>) { ///
state.map(|s| { /// Only runs when state is modified.
if s.is_added() || s.is_changed() { fn state(state: Res<State<GameState>>) {
info!("State is {:?}", s); info!("State is {:?}", *state);
} }
});
fn toggle_display_mode(
mut events: EventReader<KeyboardInput>,
state: Res<State<GameState>>,
mut next_state: ResMut<NextState<GameState>>,
) {
events
.iter()
.filter(
|KeyboardInput {
key_code, state, ..
}| (*key_code, *state) == (Some(KeyCode::Space), ButtonState::Pressed),
)
.for_each(|_| match state.get() {
GameState::Display2d => next_state.set(GameState::Display3d),
GameState::Display3d => next_state.set(GameState::Display2d),
_ => (),
})
} }

Loading…
Cancel
Save