diff --git a/res/menu_item_calibrate1.png b/res/menu_item_calibrate1.png new file mode 100644 index 0000000..98f68ff Binary files /dev/null and b/res/menu_item_calibrate1.png differ diff --git a/res/menu_item_calibrate1_click.png b/res/menu_item_calibrate1_click.png new file mode 100644 index 0000000..0825e14 Binary files /dev/null and b/res/menu_item_calibrate1_click.png differ diff --git a/res/menu_item_calibrate1_hover.png b/res/menu_item_calibrate1_hover.png new file mode 100644 index 0000000..c3d2583 Binary files /dev/null and b/res/menu_item_calibrate1_hover.png differ diff --git a/res/menu_item_quit1.png b/res/menu_item_quit1.png new file mode 100644 index 0000000..7b974b4 Binary files /dev/null and b/res/menu_item_quit1.png differ diff --git a/res/menu_item_quit1_click.png b/res/menu_item_quit1_click.png new file mode 100644 index 0000000..8b45519 Binary files /dev/null and b/res/menu_item_quit1_click.png differ diff --git a/res/menu_item_quit1_hover.png b/res/menu_item_quit1_hover.png new file mode 100644 index 0000000..21d25b1 Binary files /dev/null and b/res/menu_item_quit1_hover.png differ diff --git a/res/menu_item_start.png b/res/menu_item_start.png new file mode 100644 index 0000000..41a0a26 Binary files /dev/null and b/res/menu_item_start.png differ diff --git a/res/menu_item_start1.png b/res/menu_item_start1.png new file mode 100644 index 0000000..dd400c6 Binary files /dev/null and b/res/menu_item_start1.png differ diff --git a/res/menu_item_start1_click.png b/res/menu_item_start1_click.png new file mode 100644 index 0000000..cc2cc06 Binary files /dev/null and b/res/menu_item_start1_click.png differ diff --git a/res/menu_item_start1_hover.png b/res/menu_item_start1_hover.png new file mode 100644 index 0000000..4fcfae3 Binary files /dev/null and b/res/menu_item_start1_hover.png differ diff --git a/src/gui/gui_element.h b/src/gui/gui_element.h index 9643674..ea7afd0 100644 --- a/src/gui/gui_element.h +++ b/src/gui/gui_element.h @@ -5,6 +5,11 @@ namespace gui { + //Represents the type of the entitie + enum class GuiType{ + LABEL, BUTTON + }; + /* * Structure for representing a gui item to display on the screen * @@ -12,12 +17,17 @@ namespace gui * position = The center position of the gui * scale = The size (scale) of the gui */ + struct GuiTexture { int texture; glm::vec2 position; glm::vec2 scale; + virtual GuiType GetType() { + return GuiType::LABEL; + } + GuiTexture(int texture, glm::vec2 position, glm::vec2 scale): texture(texture), position(position), scale(scale) { scale.x /= (WINDOW_WIDTH / WINDOW_HEIGT); diff --git a/src/gui/gui_interactable.h b/src/gui/gui_interactable.h index 2957e7b..5743728 100644 --- a/src/gui/gui_interactable.h +++ b/src/gui/gui_interactable.h @@ -104,6 +104,10 @@ namespace gui */ void SetOnExitAction(void (*fun)()) { on_exit_action = fun; } + GuiType GetType() override { + return GuiType::BUTTON; + } + protected: void OnClick() override { if (on_click_action != nullptr) on_click_action(); } void OnEnter() override { if (on_enter_action != nullptr) on_enter_action(); } diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index fe67b0f..81d88fc 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -2,27 +2,96 @@ #include #include #include "startup_Scene.h" +#include +#include "../models/model.h" +#include "../renderEngine/loader.h" +#include "../renderEngine/obj_loader.h" +#include "../renderEngine/renderer.h" +#include "../shaders/entity_shader.h" +#include "../toolbox/toolbox.h" + + namespace scene { + shaders::GuiShader* gui_shader1; + std::vector guis1; + + Startup_Scene::Startup_Scene() { + shaders::EntityShader shader; + shader.Init(); + render_engine::renderer::Init(shader); + shader.CleanUp(); + + gui_shader1 = new shaders::GuiShader(); + gui_shader1->Init(); + } + + gui::Button* ConvertGuiTextureToButton(gui::GuiTexture* texture) { + if (texture->GetType() == gui::GuiType::BUTTON) { + return (gui::Button*)texture; + } + else { + return NULL; + } + } scene::Scenes scene::Startup_Scene::start(GLFWwindow *window) { + // GUI stuff + gui::Button button_start(render_engine::loader::LoadTexture("res/menu_item_start1.png"), glm::vec2(0.0f, 0.6f), glm::vec2(0.25f, 0.25f)); + button_start.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_start1_hover.png")); + button_start.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_start1_click.png")); + button_start.SetOnClickAction([]() + { + std::cout << "Clicked on button: Start!" << std::endl; + }); + guis1.push_back(&button_start); + + gui::Button button_calibrate(render_engine::loader::LoadTexture("res/menu_item_calibrate1.png"), glm::vec2(0.0f, 0.0f), glm::vec2(0.25f, 0.25f)); + button_calibrate.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_calibrate1_hover.png")); + button_calibrate.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_calibrate1_click.png")); + button_calibrate.SetOnClickAction([]() + { + std::cout << "Clicked on button: Calibrate!" << std::endl; + }); + guis1.push_back(&button_calibrate); + + gui::Button button_quit(render_engine::loader::LoadTexture("res/menu_item_quit1.png"), glm::vec2(0.0f, -0.6f), glm::vec2(0.25f, 0.25f)); + button_quit.SetHoverTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_hover.png")); + button_quit.SetClickedTexture(render_engine::loader::LoadTexture("res/menu_item_quit1_click.png")); + button_quit.SetOnClickAction([]() + { + std::cout << "Clicked on button: Quit!" << std::endl; + }); + guis1.push_back(&button_quit); + while (return_value == scene::Scenes::STARTUP) { render(); update(window); - + for (gui::GuiTexture* button : guis1) { + gui::Button* new_button = ConvertGuiTextureToButton(button); + if(new_button != NULL) + new_button->Update(window); + + } + + glfwSwapBuffers(window); glfwPollEvents(); } - + gui_shader1->CleanUp(); + render_engine::loader::CleanUp(); return return_value; } void scene::Startup_Scene::render() { + render_engine::renderer::Prepare(); + // Render GUI items + render_engine::renderer::Render(guis1, *gui_shader1); } void scene::Startup_Scene::update(GLFWwindow* window) diff --git a/src/scenes/startup_Scene.h b/src/scenes/startup_Scene.h index 277a750..a2d181c 100644 --- a/src/scenes/startup_Scene.h +++ b/src/scenes/startup_Scene.h @@ -1,6 +1,6 @@ #pragma once #include "scene.h" -#include +#include "../gui/gui_interactable.h" namespace scene { @@ -12,6 +12,8 @@ namespace scene scene::Scenes return_value = scene::Scenes::STARTUP; public: + Startup_Scene(); + gui::Button* ConvertGuiTextureToButton(gui::GuiTexture* texture); Scenes start(GLFWwindow* window) override; void render() override; void update(GLFWwindow* window) override;