1use bevy::prelude::*;
2use bevy_mod_picking::DefaultPickingPlugins;
3use resources::GameTitle;
4use settings::SettingsPlugin;
5use splash::SplashPlugin;
6use widgets::slider::systems::update_value;
7
8use self::{
9 hud::HudPlugin,
10 loading::LoadingPlugin,
11 main_menu::MainMenuPlugin,
12 pause::PausePlugin,
13 systems::{interact_with_quit_button, interact_with_settings_button},
14};
15
16pub mod components;
17pub mod hud;
18pub mod loading;
19pub mod main_menu;
20pub mod pause;
21pub mod resources;
22pub mod settings;
23pub mod splash;
24pub mod styles;
25pub mod systems;
26pub mod widgets;
27
28#[derive(Clone)]
29pub struct UiScreensPlugin {
30 pub title: String,
31}
32
33impl Plugin for UiScreensPlugin {
34 fn build(&self, app: &mut App) {
35 app.insert_resource(GameTitle(self.title.clone()))
36 .add_plugins((
37 MainMenuPlugin,
38 PausePlugin,
39 SettingsPlugin,
40 SplashPlugin,
41 HudPlugin,
42 DefaultPickingPlugins,
43 LoadingPlugin,
44 ))
45 .add_systems(
46 Update,
47 (
48 interact_with_quit_button,
49 update_value,
50 interact_with_settings_button,
51 ),
52 );
53 }
54}
55
56#[derive(Default, Component, States, Debug, Hash, Eq, PartialEq, Clone, Reflect)]
57#[reflect(Component)]
58pub enum UiState {
59 MainMenu,
60 Loading,
61 Settings,
62 Hud,
63 #[default]
64 Splash,
65 Debug,
66}
67
68#[derive(Default, States, Debug, Hash, Eq, PartialEq, Clone)]
69pub enum SimulationState {
70 #[default]
71 Running,
72 Paused,
73}