Skip to main content

limnus_default_keys/
lib.rs

1/*
2 * Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/swamp/limnus
3 * Licensed under the MIT License. See LICENSE in the project root for license information.
4 */
5
6use 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}