diff --git a/.gitmodules b/.gitmodules index 7e95e64..4256800 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,6 +13,3 @@ [submodule "external/ImFileDialog"] path = external/ImFileDialog url = https://github.com/dfranx/ImFileDialog.git -[submodule "external/svector"] - path = external/svector - url = https://github.com/martinus/svector.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 37301d6..6098595 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,8 +35,6 @@ else () message(STATUS "ccache not found") endif () -add_subdirectory(external/svector) - option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF) option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF) @@ -106,7 +104,7 @@ add_executable(BillySheet ${SOURCES}) target_include_directories(BillySheet PRIVATE include include/imgui external/ImFileDialog) -set_target_properties(BillySheet spdlog svector PROPERTIES +set_target_properties(BillySheet spdlog PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF @@ -114,7 +112,7 @@ set_target_properties(BillySheet spdlog svector PROPERTIES # UNITY_BUILD ON ) -set_target_properties(spdlog svector PROPERTIES UNITY_BUILD ON) +set_target_properties(spdlog PROPERTIES UNITY_BUILD ON) set_target_properties(glfw PROPERTIES C_STANDARD 11 @@ -124,35 +122,27 @@ set_target_properties(glfw PROPERTIES UNITY_BUILD ON ) +set_target_properties(spdlog PROPERTIES UNITY_BUILD ON) target_compile_definitions(BillySheet PRIVATE $<$:_GLIBCXX_DEBUG> $<$:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG> $<$:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_ERROR>) -target_compile_definitions(spdlog PRIVATE $<$:_GLIBCXX_DEBUG>) -target_compile_definitions(svector INTERFACE $<$:_GLIBCXX_DEBUG>) -target_compile_definitions(glfw PRIVATE $<$:_GLIBCXX_DEBUG>) +target_compile_definitions(spdlog PRIVATE + $<$:_GLIBCXX_DEBUG>) + +target_compile_definitions(glfw PRIVATE + $<$:_GLIBCXX_DEBUG>) target_compile_options(spdlog PRIVATE ${COMPILE_FLAGS}) -target_compile_options(svector INTERFACE ${COMPILE_FLAGS}) target_compile_options(glfw PRIVATE ${COMPILE_FLAGS}) target_compile_options(BillySheet PRIVATE ${COMPILE_FLAGS}) target_link_options(spdlog PRIVATE ${LINKER_OPTIONS}) -target_link_options(svector INTERFACE ${LINKER_OPTIONS}) target_link_options(glfw PRIVATE ${LINKER_OPTIONS}) target_link_options(BillySheet PRIVATE ${LINKER_OPTIONS}) target_link_libraries(spdlog PRIVATE ${LINKER_FLAGS}) -target_link_libraries(svector INTERFACE ${LINKER_FLAGS}) target_link_libraries(glfw PRIVATE ${LINKER_FLAGS}) -target_link_libraries(BillySheet glfw - spdlog::spdlog_header_only - svector::svector - OpenGL::OpenGL - GLEW::GLEW - nlohmann_json::nlohmann_json - ${Boost_LIBRARIES} - ${LINKER_FLAGS} -) +target_link_libraries(BillySheet glfw spdlog::spdlog_header_only OpenGL::OpenGL GLEW::GLEW nlohmann_json::nlohmann_json ${Boost_LIBRARIES} ${LINKER_FLAGS}) diff --git a/external/svector b/external/svector deleted file mode 160000 index 74817cf..0000000 --- a/external/svector +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 74817cfbdbaceb415508de1ff10a0589bf8f25d7 diff --git a/include/billy_objects.hpp b/include/billy_objects.hpp index 5b9b9c7..7b4b95b 100644 --- a/include/billy_objects.hpp +++ b/include/billy_objects.hpp @@ -10,7 +10,6 @@ #include #include #include -#include #include "characteristic/characteristic.hpp" // helper type for the visitor @@ -46,7 +45,7 @@ namespace character { class BillyObjects final { public: using billyObject = std::variant; - using container = ankerl::svector; + using container = std::array; static constexpr std::string_view sword{ "Sword" }; static constexpr std::string_view lance{ "Lance" }; @@ -69,7 +68,9 @@ namespace character { void pop_object(CharacterSheet &sheet) noexcept; - [[nodiscard]] const container &get_objects() const noexcept { return objects; } + [[nodiscard]] std::pair get_objects() const noexcept { + return { objects, end_object }; + } // void insert_weapon(weapons weapon, CharacterSheet &sheet) noexcept; @@ -77,30 +78,34 @@ namespace character { container objects; std::plus plus; std::minus minus; + std::uint8_t end_object{ 0 }; static void change_carac_weapon(const weapons &arg, - CharacterSheet &sheet, - characteristic::Characteristic &localHabilete, - characteristic::Characteristic &localAdresse, - characteristic::Characteristic &localEndurance, - const std::function &operation) noexcept; + CharacterSheet &sheet, + characteristic::Characteristic &localHabilete, + characteristic::Characteristic &localAdresse, + characteristic::Characteristic &localEndurance, + const std::function &operation) noexcept; static void change_carac_equipment(const equipments &arg, - CharacterSheet &sheet, - characteristic::Characteristic &localHabilete, - characteristic::Characteristic &localAdresse, - characteristic::Characteristic &localEndurance, - characteristic::Characteristic &localChance, - const std::function &primary, - const std::function &complement) noexcept; + CharacterSheet &sheet, + characteristic::Characteristic &localHabilete, + characteristic::Characteristic &localAdresse, + characteristic::Characteristic &localEndurance, + characteristic::Characteristic &localChance, + const std::function &primary, + const std::function &complement) noexcept; static void change_carac_tools(const tools &arg, - CharacterSheet &sheet, - characteristic::Characteristic &localHabilete, - characteristic::Characteristic &localAdresse, - characteristic::Characteristic &localEndurance, - characteristic::Characteristic &localChance, - const std::function &operation) noexcept; + CharacterSheet &sheet, + characteristic::Characteristic &localHabilete, + characteristic::Characteristic &localAdresse, + characteristic::Characteristic &localEndurance, + characteristic::Characteristic &localChance, + const std::function &operation) noexcept; }; } diff --git a/include/character_sheet.hpp b/include/character_sheet.hpp index cd608b9..b19ce82 100644 --- a/include/character_sheet.hpp +++ b/include/character_sheet.hpp @@ -45,8 +45,6 @@ namespace character { std::uint32_t damage{ 0 }; - std::uint32_t critique{ 0 }; - std::uint32_t glory{ 0 }; std::uint32_t money{ 0 }; diff --git a/include/characteristic/characteristic.hpp b/include/characteristic/characteristic.hpp index d41000f..d52479c 100644 --- a/include/characteristic/characteristic.hpp +++ b/include/characteristic/characteristic.hpp @@ -25,9 +25,9 @@ namespace character::characteristic { Characteristic() noexcept = default; Characteristic(const std::uint32_t base, - const std::uint32_t carac, - const std::uint32_t materiel, - const std::uint32_t additional) noexcept: + const std::uint32_t carac, + const std::uint32_t materiel, + const std::uint32_t additional) noexcept: base(base), carac(carac), materiel(materiel), additional(additional) { (void) get_total(); } Characteristic(const Characteristic &charac) noexcept = default; diff --git a/include/gui/menu/menu_data.hpp b/include/gui/menu/menu_data.hpp index 883a316..d40bc1f 100644 --- a/include/gui/menu/menu_data.hpp +++ b/include/gui/menu/menu_data.hpp @@ -37,10 +37,10 @@ namespace gui::menu { [[nodiscard]] bool is_edit_mode() const { return edit_mode; } void set_save_path([[maybe_unused]] const Controller &controller, - const fs::path &savePath) const { save_path = savePath; } + const fs::path &savePath) const { save_path = savePath; } void set_filename([[maybe_unused]] const Controller &controller, - const std::string &fileName) const { filename = fileName; } + const std::string &fileName) const { filename = fileName; } }; } diff --git a/src/billy_objects.cpp b/src/billy_objects.cpp index ad4146e..dd69c23 100644 --- a/src/billy_objects.cpp +++ b/src/billy_objects.cpp @@ -9,8 +9,9 @@ namespace character { using characteristic::Characteristic; void BillyObjects::push_object(const billyObject &object, CharacterSheet &sheet) noexcept { - if (objects.size() < 3) { - objects.emplace_back(object); + if (end_object < 3) { + objects.at(end_object) = object; + ++end_object; auto &local_habilete = static_cast(sheet.habilete); auto &local_adresse = static_cast(sheet.adresse); @@ -25,32 +26,32 @@ namespace character { [&](const equipments &arg) { ++sheet.nb_equipments; change_carac_equipment(arg, - sheet, - local_habilete, - local_adresse, - local_endurance, - local_chance, - plus, - minus); + sheet, + local_habilete, + local_adresse, + local_endurance, + local_chance, + plus, + minus); }, [&](const tools &arg) { ++sheet.nb_tools; change_carac_tools(arg, - sheet, - local_habilete, - local_adresse, - local_endurance, - local_chance, - plus); + sheet, + local_habilete, + local_adresse, + local_endurance, + local_chance, + plus); }, }, object); } } void BillyObjects::pop_object(CharacterSheet &sheet) noexcept { - if (!objects.empty()) { - const billyObject obj = objects.back(); - objects.pop_back(); + if (end_object > 0) { + const auto &obj = objects.at(end_object - 1); + --end_object; auto &local_habilete = static_cast(sheet.habilete); auto &local_adresse = static_cast(sheet.adresse); @@ -65,35 +66,36 @@ namespace character { [&](const equipments &arg) { --sheet.nb_equipments; change_carac_equipment(arg, - sheet, - local_habilete, - local_adresse, - local_endurance, - local_chance, - minus, - plus); + sheet, + local_habilete, + local_adresse, + local_endurance, + local_chance, + minus, + plus); }, [&](const tools &arg) { --sheet.nb_tools; change_carac_tools(arg, - sheet, - local_habilete, - local_adresse, - local_endurance, - local_chance, - minus); + sheet, + local_habilete, + local_adresse, + local_endurance, + local_chance, + minus); } }, obj); } } void BillyObjects::change_carac_tools(const tools &arg, - CharacterSheet &sheet, - Characteristic &localHabilete, - Characteristic &localAdresse, - Characteristic &localEndurance, - Characteristic &localChance, - const std::function &operation) noexcept { + CharacterSheet &sheet, + Characteristic &localHabilete, + Characteristic &localAdresse, + Characteristic &localEndurance, + Characteristic &localChance, + const std::function &operation) noexcept { switch (arg) { case tools::Fourche: localHabilete.materiel = operation(localHabilete.materiel, 1); @@ -112,13 +114,14 @@ namespace character { } void BillyObjects::change_carac_equipment(const equipments &arg, - CharacterSheet &sheet, - Characteristic &localHabilete, - Characteristic &localAdresse, - Characteristic &localEndurance, - Characteristic &localChance, - const std::function &primary, - const std::function &complement) noexcept { + CharacterSheet &sheet, + Characteristic &localHabilete, + Characteristic &localAdresse, + Characteristic &localEndurance, + Characteristic &localChance, + const std::function &primary, + const std::function &complement) noexcept { switch (arg) { case equipments::Chainmail: localHabilete.materiel = complement(localHabilete.materiel, 1); @@ -140,11 +143,12 @@ namespace character { } void BillyObjects::change_carac_weapon(const weapons &arg, - CharacterSheet &sheet, - Characteristic &localHabilete, - Characteristic &localAdresse, - Characteristic &localEndurance, - const std::function &operation) noexcept { + CharacterSheet &sheet, + Characteristic &localHabilete, + Characteristic &localAdresse, + Characteristic &localEndurance, + const std::function &operation) noexcept { switch (arg) { case weapons::Sword: localHabilete.materiel = operation(localHabilete.materiel, 4); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 32f3f77..62a65ae 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -53,14 +53,13 @@ void gui::Gui::render_gui(const Controller &controller) { menu.gui(); if (ImGui::BeginCombo("Classe", - GuiData::classes[static_cast(data.billy.get_current_class())].data(), - ImGuiComboFlags_PopupAlignLeft)) { + 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 (is_selected) { + if (is_selected) ImGui::SetItemDefaultFocus(); - } } ImGui::EndCombo(); } @@ -132,8 +131,8 @@ void gui::Gui::characteristic_gui(const Characteristic &characteristic) noexcept void gui::Gui::habilete_menu() noexcept { ImGui::BeginChild("habilete", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), + ImGuiChildFlags_Border); ImGui::Text("Habileté"); characteristic_gui(static_cast(data.billy.get_habilete())); ImGui::EndChild(); @@ -141,8 +140,8 @@ void gui::Gui::habilete_menu() noexcept { void gui::Gui::adresse_menu() noexcept { ImGui::BeginChild("adresse", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), + ImGuiChildFlags_Border); ImGui::Text("Adresse"); characteristic_gui(static_cast(data.billy.get_adresse())); ImGui::EndChild(); @@ -150,8 +149,8 @@ void gui::Gui::adresse_menu() noexcept { void gui::Gui::endurance_menu() noexcept { ImGui::BeginChild("endurance", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), + ImGuiChildFlags_Border); ImGui::Text("Endurance"); characteristic_gui(static_cast(data.billy.get_endurance())); ImGui::EndChild(); @@ -159,25 +158,25 @@ void gui::Gui::endurance_menu() noexcept { void gui::Gui::chance_menu() noexcept { ImGui::BeginChild("chance", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.2f), + ImGuiChildFlags_Border); ImGui::Text("Chance"); - characteristic_gui(static_cast(data.billy.get_chance())); + characteristic_gui(static_cast(data.billy.get_chance())); ImGui::EndChild(); } void gui::Gui::stat_second_menu() noexcept { ImGui::BeginChild("stats secondaire", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.4f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.4f), + ImGuiChildFlags_Border); ImGui::Text("STAT. SECONDAIRES"); ImGui::EndChild(); } void gui::Gui::materiel_menu() noexcept { ImGui::BeginChild("materiel", - ImVec2(ImGui::GetWindowWidth() / 3, 0), - ImGuiChildFlags_Border | ImGuiChildFlags_AutoResizeY); + ImVec2(ImGui::GetWindowWidth() / 3, 0), + ImGuiChildFlags_Border | ImGuiChildFlags_AutoResizeY); ImGui::Text("Matériel"); ImGui::BeginChild("weapons", ImVec2(0, 0), ImGuiChildFlags_Border | ImGuiChildFlags_AutoResizeY); @@ -206,16 +205,16 @@ void gui::Gui::materiel_menu() noexcept { void gui::Gui::gloire_menu() noexcept { ImGui::BeginChild("gloire", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.1f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.1f), + ImGuiChildFlags_Border); ImGui::Text("Gloire"); ImGui::EndChild(); } void gui::Gui::richesse_menu() noexcept { ImGui::BeginChild("richesse", - ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.1f), - ImGuiChildFlags_Border); + ImVec2(ImGui::GetWindowWidth() / 3, ImGui::GetWindowHeight() * 0.1f), + ImGuiChildFlags_Border); ImGui::Text("Richesse"); ImGui::EndChild(); } diff --git a/src/gui/menu/menu.cpp b/src/gui/menu/menu.cpp index d057959..3c79fd7 100644 --- a/src/gui/menu/menu.cpp +++ b/src/gui/menu/menu.cpp @@ -41,8 +41,8 @@ void gui::menu::Menu::gui() const noexcept { if (ImGui::MenuItem("Open file")) { SPDLOG_DEBUG("Opening file"); ifd::FileDialog::Instance().Open(data.open_character_key, - "Open a character sheet", - "Character sheet (*.json){.json},.*"); + "Open a character sheet", + "Character sheet (*.json){.json},.*"); SPDLOG_DEBUG("File opened"); } @@ -57,8 +57,8 @@ void gui::menu::Menu::gui() const noexcept { if (ImGui::MenuItem("Save as...")) { SPDLOG_DEBUG("Saving with file dialog"); ifd::FileDialog::Instance().Save(data.save_character_key, - "Save character sheet as...", - "*.json {.json}"); + "Save character sheet as...", + "*.json {.json}"); SPDLOG_DEBUG("File saved with dialog"); } diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 5f8cbe9..ade8de1 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -21,11 +21,11 @@ gui::Window::Window() { glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); wwindow = std::unique_ptr(glfwCreateWindow(720, - 1280, - "Billy Sheet tracker", - nullptr, - nullptr), - delete_glfw_window); + 1280, + "Billy Sheet tracker", + nullptr, + nullptr), + delete_glfw_window); if (!wwindow) { glfwTerminate(); SPDLOG_CRITICAL("No GLFW window created, nullptr.");