From b8138c0129d05a4be86259172a86e5b6743a64c1 Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Mon, 9 Oct 2023 11:40:54 -0700 Subject: [PATCH] Simple 2d/3d toggle --- src/main.rs | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 201cccc..3e7a40e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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::() - .add_systems(Update, state) + .add_systems(Update, state.run_if(resource_changed::>())) .add_systems(Update, loading.run_if(in_state(GameState::Loading))) + .add_systems( + Update, + toggle_display_mode.run_if(on_event::()), + ) .add_plugins(( DefaultPlugins .set(ImagePlugin::default_nearest()) @@ -69,10 +76,27 @@ fn loading( } /// System for printing the current state -fn state(state: Option>>) { - state.map(|s| { - if s.is_added() || s.is_changed() { - info!("State is {:?}", s); - } - }); +/// +/// Only runs when state is modified. +fn state(state: Res>) { + info!("State is {:?}", *state); +} + +fn toggle_display_mode( + mut events: EventReader, + state: Res>, + mut next_state: ResMut>, +) { + 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), + _ => (), + }) }