|
|
|
|
@ -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),
|
|
|
|
|
_ => (),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|