limnus_default_keys/
lib.rs1use limnus_app::prelude::{App, Plugin};
7use limnus_basic_input::InputMessage;
8use limnus_basic_input::prelude::{ButtonState, KeyCode};
9use limnus_default_stages::First;
10use limnus_local_resource::LocalResource;
11use limnus_macros::LocalResource;
12use limnus_screen::{ScreenMode, Window};
13use limnus_system_params::{LoReM, Msg, ReM};
14
15#[derive(Debug, LocalResource)]
16pub struct DefaultKeys {
17 pub left_alt_key: bool,
18 pub left_shift_key: bool,
19}
20
21fn check_key(
22 key_input_messages: Msg<InputMessage>,
23 mut default_keys: LoReM<DefaultKeys>,
24 mut window_settings: ReM<Window>,
25) {
26 for key_input in key_input_messages.iter_previous() {
27 if let InputMessage::KeyboardInput(button_state, button) = key_input {
28 match button {
29 KeyCode::AltLeft => {
30 default_keys.left_alt_key = *button_state == ButtonState::Pressed;
31 }
32 KeyCode::ShiftLeft => {
33 default_keys.left_shift_key = *button_state == ButtonState::Pressed;
34 }
35 KeyCode::Enter => {
36 if default_keys.left_alt_key && *button_state == ButtonState::Pressed {
37 let new_mode = match window_settings.mode {
38 ScreenMode::WindowedOnTop | ScreenMode::Windowed => {
39 ScreenMode::WindowedFullscreen
40 }
41 ScreenMode::WindowedFullscreen => {
42 if default_keys.left_shift_key {
43 ScreenMode::WindowedOnTop
44 } else {
45 ScreenMode::Windowed
46 }
47 }
48 };
49 window_settings.mode = new_mode;
50 }
51 }
52 _ => {}
53 }
54 }
55 }
56}
57
58pub struct DefaultKeysPlugin;
59
60impl Plugin for DefaultKeysPlugin {
61 fn build(&self, app: &mut App) {
62 app.insert_local_resource(DefaultKeys {
63 left_alt_key: false,
64 left_shift_key: false,
65 });
66 app.add_system(First, check_key);
67 }
68}