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