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 bevy::asset::ChangeWatcher;
use bevy::{
asset::ChangeWatcher,
input::{keyboard::KeyboardInput, ButtonState},
};
use crate::prelude::*;
@ -19,8 +22,12 @@ fn main() {
App::new()
.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,
toggle_display_mode.run_if(on_event::<KeyboardInput>()),
)
.add_plugins((
DefaultPlugins
.set(ImagePlugin::default_nearest())
@ -69,10 +76,27 @@ fn loading(
}
/// System for printing the current state
fn state(state: Option<Res<State<GameState>>>) {
state.map(|s| {
if s.is_added() || s.is_changed() {
info!("State is {:?}", s);
///
/// Only runs when state is modified.
fn state(state: Res<State<GameState>>) {
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