fantasy_craft/gui/
plugins.rs1use 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}