1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use bevy::prelude::*;
use resources::GameTitle;
use settings::SettingsPlugin;
use splash::SplashPlugin;

use self::{
    loading::LoadingPlugin,
    main_menu::MainMenuPlugin,
    pause::PausePlugin,
    systems::{interact_with_quit_button, interact_with_settings_button},
};

pub mod components;
pub mod loading;
pub mod main_menu;
pub mod pause;
pub mod resources;
pub mod settings;
pub mod splash;
pub mod styles;
pub mod systems;

#[derive(Clone)]
pub struct UiScreensPlugin {
    pub title: String,
}

impl Plugin for UiScreensPlugin {
    fn build(&self, app: &mut App) {
        app.insert_resource(GameTitle(self.title.clone()))
            .add_plugins((
                MainMenuPlugin,
                PausePlugin,
                SettingsPlugin,
                SplashPlugin,
                LoadingPlugin,
            ))
            .add_systems(
                Update,
                (interact_with_quit_button, interact_with_settings_button),
            );
    }
}

#[derive(Default, Component, States, Debug, Hash, Eq, PartialEq, Clone, Reflect)]
#[reflect(Component)]
pub enum UiState {
    MainMenu,
    Loading,
    Settings,
    Hud,
    #[default]
    Splash,
    Debug,
}

#[derive(Default, States, Debug, Hash, Eq, PartialEq, Clone)]
pub enum SimulationState {
    #[default]
    Running,
    Paused,
}