fantasy-craft 0.0.2

A 2D / 2.5D game engine built on top of Macroquad and Hecs for the Foxvoid Ecosystem
Documentation
use std::collections::HashMap;

use macroquad::math::Vec2;

use 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}};
use crate::gui::resources::{UiResolvedRects, PreviousMousePosition};
use crate::gui::gui_element::GuiElementLoader;
use crate::gui::font_component::FontComponentLoader;
use crate::gui::gui_button::GuiButtonLoader;

pub struct GuiPlugin;

impl Plugin for GuiPlugin {
    fn build(&self, app: &mut crate::prelude::App) {
        app.context.insert_resource(UiResolvedRects(HashMap::new()));
        app.context.insert_resource(PreviousMousePosition(Vec2::ZERO));

        app.scene_loader
            .register("GuiElement", Box::new(GuiElementLoader))
            .register("GuiLayout", Box::new(GuiLayoutLoader))
            .register("GuiLocalOffset", Box::new(GuiLocalOffsetLoader))
            .register("FontComponent", Box::new(FontComponentLoader))
            .register("VerticalAlignment", Box::new(VerticalAlignmentLoader))
            .register("HorizontalAlignment", Box::new(HorizontalAlignmentLoader))
            .register("TextDisplay", Box::new(TextDisplayLoader))
            .register("GuiBox", Box::new(GuiBoxLoader))
            .register("GuiButton", Box::new(GuiButtonLoader))
            .register("GuiDraggable", Box::new(GuiDraggableLoader))
            .register("GuiSlider", Box::new(GuiSliderLoader))
            .register("GuiCheckbox", Box::new(GuiCheckboxLoader))
            .register("GuiInputField", Box::new(GuiInputFieldLoader))
            .register("GuiImage", Box::new(GuiImageLoader))
            .register("GuiAction", Box::new(GuiActionLoader));

        app
            .add_system(Stage::Update, System::new(
                gui_resolve_layout_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                button_interaction_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                checkbox_logic_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                draggable_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                slider_interaction_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                input_field_focus_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::Update, System::new(
                input_field_typing_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                gui_box_render_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                checkbox_render_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                slider_render_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                text_render_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                input_field_render_system,
                vec![GameState::Playing, GameState::Menu]
            ))
            .add_system(Stage::GuiRender, System::new(
                gui_image_render_system,
                vec![GameState::Playing, GameState::Menu]
            ));
    }
}