Skip to main content

fantasy_craft/gui/
plugins.rs

1use std::collections::HashMap;
2
3use macroquad::math::Vec2;
4
5use crate::{gui::{alignment::{HorizontalAlignmentLoader, VerticalAlignmentLoader}, gui_action::GuiActionLoader, gui_box::{GuiBoxLoader, gui_box_render_system}, gui_button::button_interaction_system, gui_checkbox::{GuiCheckboxLoader, checkbox_logic_system, checkbox_render_system}, gui_draggable::{GuiDraggableLoader, draggable_system}, gui_image::{GuiImageLoader, gui_image_render_system}, gui_input_field::{GuiInputFieldLoader, input_field_focus_system, input_field_render_system, input_field_typing_system}, gui_layout::{GuiLayoutLoader, gui_resolve_layout_system}, gui_local_offset::GuiLocalOffsetLoader, gui_slider::{GuiSliderLoader, slider_interaction_system, slider_render_system}, text_display::{TextDisplayLoader, text_render_system}}, prelude::{GameState, Plugin, Stage, System}};
6use crate::gui::resources::{UiResolvedRects, PreviousMousePosition};
7use crate::gui::gui_element::GuiElementLoader;
8use crate::gui::font_component::FontComponentLoader;
9use crate::gui::gui_button::GuiButtonLoader;
10
11pub struct GuiPlugin;
12
13impl Plugin for GuiPlugin {
14    fn build(&self, app: &mut crate::prelude::App) {
15        app.context.insert_resource(UiResolvedRects(HashMap::new()));
16        app.context.insert_resource(PreviousMousePosition(Vec2::ZERO));
17
18        app.scene_loader
19            .register("GuiElement", Box::new(GuiElementLoader))
20            .register("GuiLayout", Box::new(GuiLayoutLoader))
21            .register("GuiLocalOffset", Box::new(GuiLocalOffsetLoader))
22            .register("FontComponent", Box::new(FontComponentLoader))
23            .register("VerticalAlignment", Box::new(VerticalAlignmentLoader))
24            .register("HorizontalAlignment", Box::new(HorizontalAlignmentLoader))
25            .register("TextDisplay", Box::new(TextDisplayLoader))
26            .register("GuiBox", Box::new(GuiBoxLoader))
27            .register("GuiButton", Box::new(GuiButtonLoader))
28            .register("GuiDraggable", Box::new(GuiDraggableLoader))
29            .register("GuiSlider", Box::new(GuiSliderLoader))
30            .register("GuiCheckbox", Box::new(GuiCheckboxLoader))
31            .register("GuiInputField", Box::new(GuiInputFieldLoader))
32            .register("GuiImage", Box::new(GuiImageLoader))
33            .register("GuiAction", Box::new(GuiActionLoader));
34
35        app
36            .add_system(Stage::Update, System::new(
37                gui_resolve_layout_system,
38                vec![GameState::Playing, GameState::Menu]
39            ))
40            .add_system(Stage::Update, System::new(
41                button_interaction_system,
42                vec![GameState::Playing, GameState::Menu]
43            ))
44            .add_system(Stage::Update, System::new(
45                checkbox_logic_system,
46                vec![GameState::Playing, GameState::Menu]
47            ))
48            .add_system(Stage::Update, System::new(
49                draggable_system,
50                vec![GameState::Playing, GameState::Menu]
51            ))
52            .add_system(Stage::Update, System::new(
53                slider_interaction_system,
54                vec![GameState::Playing, GameState::Menu]
55            ))
56            .add_system(Stage::Update, System::new(
57                input_field_focus_system,
58                vec![GameState::Playing, GameState::Menu]
59            ))
60            .add_system(Stage::Update, System::new(
61                input_field_typing_system,
62                vec![GameState::Playing, GameState::Menu]
63            ))
64            .add_system(Stage::GuiRender, System::new(
65                gui_box_render_system,
66                vec![GameState::Playing, GameState::Menu]
67            ))
68            .add_system(Stage::GuiRender, System::new(
69                checkbox_render_system,
70                vec![GameState::Playing, GameState::Menu]
71            ))
72            .add_system(Stage::GuiRender, System::new(
73                slider_render_system,
74                vec![GameState::Playing, GameState::Menu]
75            ))
76            .add_system(Stage::GuiRender, System::new(
77                text_render_system,
78                vec![GameState::Playing, GameState::Menu]
79            ))
80            .add_system(Stage::GuiRender, System::new(
81                input_field_render_system,
82                vec![GameState::Playing, GameState::Menu]
83            ))
84            .add_system(Stage::GuiRender, System::new(
85                gui_image_render_system,
86                vec![GameState::Playing, GameState::Menu]
87            ));
88    }
89}