#include "gui/gui.hpp" #include "imgui.h" #include "imgui_stdlib.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" #include "gui/window.hpp" #include "gui/gui_data.hpp" #include "character_sheet.hpp" #include "controller.hpp" gui::Gui::Gui(GuiData &data, menu::MenuData &menuData) : data(data), menu(menuData), font("font/DejaVuSans.ttf") { SPDLOG_DEBUG("Creating GUI"); (void) ImGui::CreateContext(); ImGui::StyleColorsDark(); (void) ImGui::GetIO().Fonts->AddFontFromFileTTF(font.c_str(), 18.0f); (void) ImGui_ImplGlfw_InitForOpenGL(data.get_window().get_window().get(), true); initialized = ImGui_ImplOpenGL3_Init("#version 130"); SPDLOG_DEBUG("Initialized: {}", initialized); } gui::Gui::~Gui() noexcept { ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); } void gui::Gui::render_gui(const Controller &controller) { if (initialized) { constexpr ImGuiWindowFlags flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar; ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); //TODO GUI { const ImGuiViewport &viewport = *ImGui::GetMainViewport(); ImGui::SetNextWindowPos(viewport.Pos); ImGui::SetNextWindowSize(viewport.Size); } // Never collapsed. (void) ImGui::Begin("Billy", nullptr, flags); menu.gui(); if (ImGui::BeginCombo("Classe", GuiData::classes[static_cast(data.billy.get_current_class())].data(), ImGuiComboFlags_PopupAlignLeft)) { for (std::size_t i = 0; i < GuiData::classes.size(); ++i) { const bool is_selected = (data.billy.get_current_class() == static_cast(i)); if (ImGui::Selectable(GuiData::classes[i].data(), is_selected)) data.billy.current_class = static_cast(i); if (is_selected) ImGui::SetItemDefaultFocus(); } ImGui::EndCombo(); } { ImGui::BeginChild("carac", ImVec2(0, ImGui::GetWindowHeight() * 0.2f), true); ImGui::Text("Caractère"); // Remove label ImGui::PushItemWidth(-1); ImGui::InputTextMultiline("Caractère", &data.billy.caractere); ImGui::PopItemWidth(); ImGui::EndChild(); } ImGui::BeginGroup(); habilete_menu(); ImGui::SameLine(); adresse_menu(); endurance_menu(); ImGui::SameLine(); chance_menu(); ImGui::EndGroup(); ImGui::SameLine(); stat_second_menu(); ImGui::End(); controller.control_menu(); ImGui::Render(); } } void gui::Gui::render_gpu() const { if (initialized) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); } } void gui::Gui::habilete_menu() noexcept { ImGui::BeginChild("habilete", ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), true); ImGui::Text("Habileté"); ImGui::EndChild(); } void gui::Gui::adresse_menu() noexcept { ImGui::BeginChild("adresse", ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), true); ImGui::Text("Adresse"); ImGui::Text("Bottom pane1"); ImGui::Text("Bottom pane2"); ImGui::Text("Bottom pane3"); ImGui::Text("Bottom pane4"); ImGui::EndChild(); } void gui::Gui::endurance_menu() noexcept { ImGui::BeginChild("endurance", ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), true); ImGui::Text("Endurance"); ImGui::Text("Bottom pane1"); ImGui::Text("Bottom pane2"); ImGui::Text("Bottom pane3"); ImGui::Text("Bottom pane4"); ImGui::EndChild(); } void gui::Gui::chance_menu() noexcept { ImGui::BeginChild("chance", ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), true); ImGui::Text("Chance"); ImGui::Text("Bottom pane1"); ImGui::Text("Bottom pane2"); ImGui::Text("Bottom pane3"); ImGui::Text("Bottom pane4"); ImGui::EndChild(); } void gui::Gui::stat_second_menu() noexcept { ImGui::BeginChild("stats secondaire", ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.4f), true); ImGui::Text("STAT. SECONDAIRES"); ImGui::EndChild(); }