From 7cdb8b41e1c52ea5b8b54d32cbb5da7a20e57655 Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 13:39:17 -0400 Subject: [PATCH 1/7] Move PupuID helpers to OpenVIII and disable viewports on non-MSVC Replace editor-local PupuID and UniquifyPupu implementations with the shared versions from open_viii::graphics::background and update all dependent code paths accordingly. Remove duplicate source files and CMake entries now that the functionality is provided by OpenVIII. Also disable ImGui multi-viewports by default on non-MSVC builds. Viewports remain enabled on MSVC where support is known to be stable, avoiding window-management issues seen under Wayland tiling compositors while leaving room for a future user-configurable option. --- src/opengl/experimental/CMakeLists.txt | 2 - src/opengl/experimental/ff8/MapFilters.hpp | 14 +- src/opengl/experimental/ff8/MapHistory.cpp | 10 +- src/opengl/experimental/ff8/MapHistory.hpp | 64 ++- .../experimental/ff8/MapTileAdjustments.hpp | 147 +++--- src/opengl/experimental/ff8/PupuID.hpp | 127 ----- .../experimental/ff8/UniqueTileValues.hpp | 4 +- src/opengl/experimental/ff8/UniquifyPupu.hpp | 58 --- src/opengl/main/CMakeLists.txt | 2 - src/opengl/main/MapHistory.cpp | 33 +- src/opengl/main/MapHistory.hpp | 87 ++-- src/opengl/main/PupuID.cpp | 123 ----- src/opengl/main/PupuID.hpp | 225 -------- src/opengl/main/UniquifyPupu.cpp | 39 -- src/opengl/main/UniquifyPupu.hpp | 29 -- src/opengl/main/filter.hpp | 78 +-- src/opengl/main/gui/Selections.hpp | 37 +- src/opengl/main/gui/filter_window.cpp | 317 +++++++----- src/opengl/main/gui/filter_window.hpp | 32 +- src/opengl/main/gui/gui.cpp | 482 ++++++++++-------- src/opengl/main/map_sprite.cpp | 260 +++++----- src/opengl/main/map_sprite.hpp | 95 ++-- src/opengl/main/path_search.cpp | 50 +- src/opengl/main/path_search.hpp | 29 +- src/opengl/main/save_image_pbo.cpp | 27 +- src/opengl/main/save_image_pbo.hpp | 11 +- src/opengl/main/unique_values.hpp | 8 +- 27 files changed, 980 insertions(+), 1410 deletions(-) delete mode 100644 src/opengl/experimental/ff8/PupuID.hpp delete mode 100644 src/opengl/experimental/ff8/UniquifyPupu.hpp delete mode 100644 src/opengl/main/PupuID.cpp delete mode 100644 src/opengl/main/PupuID.hpp delete mode 100644 src/opengl/main/UniquifyPupu.cpp delete mode 100644 src/opengl/main/UniquifyPupu.hpp diff --git a/src/opengl/experimental/CMakeLists.txt b/src/opengl/experimental/CMakeLists.txt index 9d3f9fba..a631fce1 100644 --- a/src/opengl/experimental/CMakeLists.txt +++ b/src/opengl/experimental/CMakeLists.txt @@ -30,7 +30,6 @@ add_executable( ff8/SimilarAdjustments.cpp ff8/Configuration.cpp ff8/MenuSaveToggles.hpp - ff8/PupuID.hpp ImGuiDisabled.cpp ImGuiPushItemWidth.cpp ImGuiPushID.cpp @@ -47,7 +46,6 @@ add_executable( test/TestBatchRenderingTexture2DDynamic.cpp test/TestMenu.cpp test/TestTexture2D.cpp - ff8/UniquifyPupu.hpp Window.cpp) target_link_libraries( ${PROJECT_NAME}_EXPERIMENTAL diff --git a/src/opengl/experimental/ff8/MapFilters.hpp b/src/opengl/experimental/ff8/MapFilters.hpp index 9724ff80..8a831cb0 100644 --- a/src/opengl/experimental/ff8/MapFilters.hpp +++ b/src/opengl/experimental/ff8/MapFilters.hpp @@ -127,11 +127,12 @@ class MapFilters { const auto push_id_1 = glengine::ImGuiPushId(); - if (ImGui::Selectable( - string.c_str(), - static_cast(*boolptr), - 0, - size)) + if ( + ImGui::Selectable( + string.c_str(), + static_cast(*boolptr), + 0, + size)) { *boolptr = !static_cast(*boolptr); @@ -247,7 +248,8 @@ class MapFilters } return ret_changed; } - bool operator()(const PupuID &pupu_id) const + bool + operator()(const open_viii::graphics::background::PupuID &pupu_id) const { return filter( // todo get pupu ID from map history? Map filters currently has no diff --git a/src/opengl/experimental/ff8/MapHistory.cpp b/src/opengl/experimental/ff8/MapHistory.cpp index 31f0286d..f103178c 100644 --- a/src/opengl/experimental/ff8/MapHistory.cpp +++ b/src/opengl/experimental/ff8/MapHistory.cpp @@ -61,13 +61,14 @@ namespace ff_8 } -std::vector MapHistory::calculate_pupu(const map_t &map) +std::vector + MapHistory::calculate_pupu(const map_t &map) { return map.visit_tiles( [](const auto &tiles) { - std::vector pupu_ids = {}; - UniquifyPupu pupu_map = {}; + std::vector pupu_ids = {}; + open_viii::graphics::background::UniquifyPupu pupu_map = {}; pupu_ids.reserve(std::ranges::size(tiles)); std::ranges::transform( tiles, std::back_insert_iterator(pupu_ids), pupu_map); @@ -81,7 +82,8 @@ MapHistory::MapHistory(map_t map) , m_front_pupu(calculate_pupu(m_front)) { } -[[nodiscard]] const std::vector &MapHistory::pupu() const noexcept +[[nodiscard]] const std::vector & + MapHistory::pupu() const noexcept { return m_front_pupu; } diff --git a/src/opengl/experimental/ff8/MapHistory.hpp b/src/opengl/experimental/ff8/MapHistory.hpp index ad6a05ff..01c0784c 100644 --- a/src/opengl/experimental/ff8/MapHistory.hpp +++ b/src/opengl/experimental/ff8/MapHistory.hpp @@ -6,8 +6,8 @@ #define FIELD_MAP_EDITOR_MAPHISTORY_HPP #include "MouseToTilePos.h" #include "SimilarAdjustments.hpp" -#include "UniquifyPupu.hpp" #include +#include #include namespace ff_8 { @@ -18,10 +18,11 @@ class [[nodiscard]] MapHistory Front, Back }; - using map_t = open_viii::graphics::background::Map; - mutable map_t m_front = {}; - mutable map_t m_back = {}; - mutable std::vector m_front_pupu = {}; + using map_t = open_viii::graphics::background::Map; + mutable map_t m_front = {}; + mutable map_t m_back = {}; + mutable std::vector m_front_pupu + = {}; mutable std::vector m_front_history = {}; mutable std::vector m_back_history = {}; mutable std::vector m_redo_history = {}; @@ -55,8 +56,8 @@ class [[nodiscard]] MapHistory [[nodiscard]] const map_t &undo_original(bool skip_redo = false) const; auto debug_count_print( - std::source_location source_location - = std::source_location::current()) const + std::source_location source_location + = std::source_location::current()) const { return glengine::ScopeGuard( [=, this]() @@ -80,10 +81,11 @@ class [[nodiscard]] MapHistory return front().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto front_tile = tiles.cbegin(); @@ -129,10 +131,11 @@ class [[nodiscard]] MapHistory return back().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto tile = tiles.begin(); std::ranges::advance(tile, pos); @@ -154,7 +157,8 @@ class [[nodiscard]] MapHistory }); } - static std::vector calculate_pupu(const map_t &map); + static std::vector + calculate_pupu(const map_t &map); public: MapHistory() = default; @@ -162,13 +166,15 @@ class [[nodiscard]] MapHistory explicit MapHistory(map_t map); template - [[nodiscard]] PupuID get_pupu_from_working(const TileT &tile) const + [[nodiscard]] open_viii::graphics::background::PupuID + get_pupu_from_working(const TileT &tile) const { return m_front_pupu[static_cast( get_offset_from_working(tile))]; } - [[nodiscard]] const std::vector &pupu() const noexcept; + [[nodiscard]] const std::vector & + pupu() const noexcept; template [[nodiscard]] auto get_offset_from_working(const TileT &tile) const @@ -176,10 +182,11 @@ class [[nodiscard]] MapHistory return back().visit_tiles( [&](const auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { return std::ranges::distance(&tiles.front(), &tile); } @@ -239,10 +246,11 @@ class [[nodiscard]] MapHistory back().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto filtered_tiles = tiles | std::views::filter(filter); for (auto &tile : filtered_tiles) @@ -313,8 +321,8 @@ class [[nodiscard]] MapHistory * @return */ [[nodiscard]] bool redo( - std::source_location source_location - = std::source_location::current()) const; + std::source_location source_location + = std::source_location::current()) const; /** * Deletes the most recent back or front diff --git a/src/opengl/experimental/ff8/MapTileAdjustments.hpp b/src/opengl/experimental/ff8/MapTileAdjustments.hpp index db09afd4..f12cd436 100644 --- a/src/opengl/experimental/ff8/MapTileAdjustments.hpp +++ b/src/opengl/experimental/ff8/MapTileAdjustments.hpp @@ -80,8 +80,8 @@ class MapTileAdjustments MapFilters &m_filters; SimilarAdjustments &m_matching; static auto generate_inner_width( - int components, - float neg_width = {}) + int components, + float neg_width = {}) -> std::pair< float, float> @@ -166,12 +166,7 @@ class MapTileAdjustments ImGuiInputTextFlags_ReadOnly); } { - const std::string hex = [&]() -> std::string - { - std::stringstream ss = {}; - tile.to_hex(ss); - return ss.str(); - }(); + const std::string hex = tile.to_hex(); ImGui::InputText( "Raw Hex", const_cast(hex.data()), @@ -203,8 +198,8 @@ class MapTileAdjustments const float width = ImGui::CalcItemWidth(); const auto pop_width = glengine::ImGuiPushItemWidth(width - checkbox_width); - if (ImGui::Combo( - "BPP", ¤t_bpp_selection, bpp_options.data(), 3)) + if ( + ImGui::Combo("BPP", ¤t_bpp_selection, bpp_options.data(), 3)) { m_map_history.copy_working_perform_operation( tile, @@ -263,14 +258,15 @@ class MapTileAdjustments { assert(step > 0); int current_int = static_cast(group.current) / step; - if (ImGui::SliderInt( - "##", - ¤t_int, - static_cast(group.min_value) / step, - override_max ? *override_max - : static_cast(group.max_value) / step, - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "##", + ¤t_int, + static_cast(group.min_value) / step, + override_max ? *override_max + : static_cast(group.max_value) / step, + {}, + ImGuiSliderFlags_AlwaysClamp)) { group.current = static_cast( current_int * step); @@ -302,12 +298,13 @@ class MapTileAdjustments checkbox_tool_tip( "##matching source_x", "Matching Source X", m_matching.source_x); auto x = SourceXGroup(tile); - if (generic_slider_int( - x, - item_width.first, - tile.width(), - (static_cast( - std::pow(2, (2 - current_bpp_selection) + 2) - 1)))) + if ( + generic_slider_int( + x, + item_width.first, + tile.width(), + (static_cast( + std::pow(2, (2 - current_bpp_selection) + 2) - 1)))) { changed = true; const auto op = [&](TileT &new_tile) @@ -421,11 +418,12 @@ class MapTileAdjustments "##matching blend mode", "Matching Blend Mode", m_matching.blend_mode); - if (glengine::GenericCombo( - "Blend Mode", - current_blend_mode_selection, - blend_mode_str, - checkbox_width)) + if ( + glengine::GenericCombo( + "Blend Mode", + current_blend_mode_selection, + blend_mode_str, + checkbox_width)) { if constexpr (has_with_blend_mode) { @@ -460,13 +458,14 @@ class MapTileAdjustments = glengine::ImGuiPushItemWidth(width - checkbox_width); checkbox_tool_tip( "##matching layer_id", "Matching Layer ID", m_matching.layer_id); - if (ImGui::SliderInt( - "Layer ID", - &layer_id, - LayerIdT{}, - LayerIdT{ 0b0111'1111U }, - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "Layer ID", + &layer_id, + LayerIdT{}, + LayerIdT{ 0b0111'1111U }, + {}, + ImGuiSliderFlags_AlwaysClamp)) { if constexpr (has_with_layer_id) { @@ -499,14 +498,14 @@ class MapTileAdjustments "##matching texture_page_id", "Matching Texture Page ID", m_matching.texture_id); - if (ImGui::SliderInt( - "Texture Page ID", - &texture_page_id, - TextureIdT{}, - TextureIdT{ - 12U },// 15 is max val but 12 or 11 is max used - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "Texture Page ID", + &texture_page_id, + TextureIdT{}, + TextureIdT{ 12U },// 15 is max val but 12 or 11 is max used + {}, + ImGuiSliderFlags_AlwaysClamp)) { changed = true; m_map_history.copy_working_perform_operation( @@ -536,13 +535,14 @@ class MapTileAdjustments "Matching Palette ID", m_matching.palette_id); int palette_id = static_cast(tile.palette_id()); - if (ImGui::SliderInt( - "Palette ID", - &palette_id, - PaletteIdT{}, - PaletteIdT{ 0b1111U }, - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "Palette ID", + &palette_id, + PaletteIdT{}, + PaletteIdT{ 0b1111U }, + {}, + ImGuiSliderFlags_AlwaysClamp)) { changed = true; @@ -570,13 +570,14 @@ class MapTileAdjustments "##matching blend other", "Matching Blend Other", m_matching.blend); const auto pop_width = glengine::ImGuiPushItemWidth(width - checkbox_width); - if (ImGui::SliderInt( - "Blend Other", - &blend, - BlendT{}, - BlendT{ 0b0011U }, - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "Blend Other", + &blend, + BlendT{}, + BlendT{ 0b0011U }, + {}, + ImGuiSliderFlags_AlwaysClamp)) { changed = true; m_map_history.copy_working_perform_operation( @@ -612,13 +613,14 @@ class MapTileAdjustments = glengine::ImGuiDisabled(!has_with_animation_id); const auto pop_width = glengine::ImGuiPushItemWidth(item_width.first); - if (ImGui::SliderInt( - "##Animation ID", - &animation_id, - std::numeric_limits>::min(), - std::numeric_limits>::max(), - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "##Animation ID", + &animation_id, + std::numeric_limits>::min(), + std::numeric_limits>::max(), + {}, + ImGuiSliderFlags_AlwaysClamp)) { if constexpr (has_with_animation_id) { @@ -647,13 +649,14 @@ class MapTileAdjustments = glengine::ImGuiDisabled(!has_with_animation_state); const auto pop_width = glengine::ImGuiPushItemWidth(item_width.second); - if (ImGui::SliderInt( - "##Animation State", - &animation_state, - std::numeric_limits>::min(), - std::numeric_limits>::max(), - {}, - ImGuiSliderFlags_AlwaysClamp)) + if ( + ImGui::SliderInt( + "##Animation State", + &animation_state, + std::numeric_limits>::min(), + std::numeric_limits>::max(), + {}, + ImGuiSliderFlags_AlwaysClamp)) { if constexpr (has_with_animation_state) { diff --git a/src/opengl/experimental/ff8/PupuID.hpp b/src/opengl/experimental/ff8/PupuID.hpp deleted file mode 100644 index a25fbaaa..00000000 --- a/src/opengl/experimental/ff8/PupuID.hpp +++ /dev/null @@ -1,127 +0,0 @@ -// -// Created by pcvii on 10/19/2021. -// - -#ifndef FIELD_MAP_EDITOR_PUPUID_HPP -#define FIELD_MAP_EDITOR_PUPUID_HPP -#include "open_viii/graphics/background/Map.hpp" -#include -#include -struct PupuID -{ - constexpr PupuID() = default; - constexpr explicit PupuID(std::uint32_t raw) - : m_raw(raw) - { - } - // layer is 7 bits - static constexpr std::uint32_t layer_offset = 24U; - // blend is only 0,1,2,3,4. So 3 bits - static constexpr std::uint32_t blend_offset = 20U; - // animation id and state is 8 bits - static constexpr std::uint32_t animation_offset = 12U; - static constexpr std::uint32_t animation_state_offset = 4U; - // leaves 3 bits for offset markers and 3 bits for offset increment - constexpr PupuID( - const open_viii::graphics::background::is_tile auto &tile, - std::uint8_t offset = 0U) - : PupuID( - std::uint32_t{ - ((static_cast(tile.layer_id()) & 0x7FU) - << layer_offset) - | ((static_cast(tile.blend_mode()) & 0x07U) << blend_offset) - | static_cast( - tile.animation_id() << animation_offset) - | static_cast( - tile.animation_state() << animation_state_offset) - | static_cast(offset & 0xF) }) - { - if (tile.x() % 16 != 0) - { - m_raw |= 0x8000'0000U; - } - if (tile.y() % 16 != 0) - { - m_raw |= 0x0080'0000U; - } - } - constexpr auto &operator+=(std::uint32_t right) - { - m_raw += right; - return *this; - } - [[nodiscard]] constexpr auto operator+(std::uint32_t right) const - { - auto cpy = *this; - cpy += right; - return cpy; - } - constexpr auto &operator|=(std::uint32_t right) - { - m_raw |= right; - return *this; - } - [[nodiscard]] constexpr auto operator|(std::uint32_t right) const - { - auto cpy = *this; - cpy |= right; - return cpy; - } - constexpr auto &operator+=(PupuID right) - { - m_raw += right.raw(); - return *this; - } - [[nodiscard]] constexpr auto operator+(PupuID right) const - { - auto cpy = *this; - cpy += right.raw(); - return cpy; - } - [[nodiscard]] constexpr std::uint32_t raw() const - { - return m_raw; - } - [[nodiscard]] bool constexpr same_base(PupuID right) const - { - constexpr auto mask = 0xFFFF'FFF0U; - return (m_raw & mask) == (right.raw() & mask); - } - - constexpr auto operator<=>(const PupuID &) const = default; - - private: - std::uint32_t m_raw{}; -}; -// PupuID = uint32_t(0U + (tile.layer_id() << -// 24U)+(static_cast(tile.blend_mode()) << 20U) + -// (tile.animation_id() <<12U)+ (tile.animation_state()<<4U)) - -// std::transform(Sprites.cbegin(), Sprites.cend() - 1, Sprites.cbegin() + 1, -// Sprites.begin()+1, [](const Sprite& first, Sprite second) { -// static constexpr auto mask = 0xFFFFFFF0U; -// if ((first.ID & mask) == (second.ID & mask)) -// { -// second.ID = first.ID + 1; -// } -// return second; -// }); - -// IDs.reserve(Sprites.size()); -// std::transform(Sprites.cbegin(), Sprites.cend(), std::back_inserter(IDs), -// [](const Sprite& sprite) {return sprite.ID; }); std::sort(IDs.begin(), -// IDs.end()); auto it = std::unique(IDs.begin(), IDs.end()); IDs.erase(it, -// IDs.end()); -template<> -struct fmt::formatter : fmt::formatter -{ - // Formats value using the parsed format specification stored in this - // formatter and writes the output to ctx.out(). - auto format( - const PupuID &value, - format_context &ctx) const -> format_context::iterator - { - return fmt::format_to(ctx.out(), "{:08X}", value.raw()); - } -}; -#endif// FIELD_MAP_EDITOR_PUPUID_HPP diff --git a/src/opengl/experimental/ff8/UniqueTileValues.hpp b/src/opengl/experimental/ff8/UniqueTileValues.hpp index e9f8462c..6d67aeaf 100644 --- a/src/opengl/experimental/ff8/UniqueTileValues.hpp +++ b/src/opengl/experimental/ff8/UniqueTileValues.hpp @@ -57,7 +57,7 @@ struct UniqueTileValues const auto not_unique = std::ranges::unique(pupu_values); pupu_values.erase(not_unique.begin(), not_unique.end()); const auto removal - = std::ranges::remove(pupu_values, PupuID{ 0x8000'0000 }); + = std::ranges::remove(pupu_values, open_viii::graphics::background::PupuID{ 0x8000'0000 }); pupu_values.erase(removal.begin(), removal.end()); return pupu_values; } @@ -237,7 +237,7 @@ struct UniqueTileValues UniqueValues blend_other = {}; UniqueValues blend_mode = {}; UniqueValues bpp = {}; - UniqueValues pupu = {}; + UniqueValues pupu = {}; }; struct TilePossibleValues { diff --git a/src/opengl/experimental/ff8/UniquifyPupu.hpp b/src/opengl/experimental/ff8/UniquifyPupu.hpp deleted file mode 100644 index 24966c5c..00000000 --- a/src/opengl/experimental/ff8/UniquifyPupu.hpp +++ /dev/null @@ -1,58 +0,0 @@ -// -// Created by pcvii on 9/6/2022. -// - -#ifndef FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP -#define FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP -#include "PupuID.hpp" -#include - -class UniquifyPupu -{ - public: - struct PupuKey - { - PupuID pupu_id = {}; - std::int16_t x = {}; - std::int16_t y = {}; - auto operator<=>(const PupuKey &) const = default; - }; - std::map m_pupu_map = {}; - - PupuID operator()( - const open_viii::graphics::background::is_tile auto &tile_const) - { - const auto tile_size = 16; - const auto x_position - = static_cast(tile_const.x() / tile_size); - const auto y_position - = static_cast(tile_const.y() / tile_size); - auto input_value - = PupuKey{ PupuID(tile_const), x_position, y_position }; - auto insert_key = [&](PupuKey key) -> PupuID - { - if (m_pupu_map.contains(key)) - { - ++(m_pupu_map.at(key)); - return key.pupu_id + m_pupu_map.at(key); - } - else - { - m_pupu_map.emplace(key, std::uint8_t{}); - return key.pupu_id + m_pupu_map.at(key); - } - }; - return insert_key(input_value); - } - // operator UniqueValues() const - // { - // std::vector values{}; - // std::ranges::transform(m_pupu_map, - // std::back_insert_iterator(values),[](auto && key_value)->PupuID{ - // const auto & [key,value] = key_value; - // return key.pupu_id; - // }); - // UniqueValues{std::move(values)}; - // } -}; -#endif// FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP diff --git a/src/opengl/main/CMakeLists.txt b/src/opengl/main/CMakeLists.txt index b32c7d5f..a022dd44 100644 --- a/src/opengl/main/CMakeLists.txt +++ b/src/opengl/main/CMakeLists.txt @@ -53,13 +53,11 @@ set(MAIN_SOURCES mim_sprite.cpp open_file_explorer.cpp path_search.cpp - PupuID.cpp safedir.cpp save_image_pbo.cpp source_tile_conflicts.cpp tile_sizes.cpp unique_values.cpp - UniquifyPupu.cpp utilities.cpp) if(WIN32 AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug") diff --git a/src/opengl/main/MapHistory.cpp b/src/opengl/main/MapHistory.cpp index 881bcd92..ba118bca 100644 --- a/src/opengl/main/MapHistory.cpp +++ b/src/opengl/main/MapHistory.cpp @@ -311,9 +311,10 @@ static void disambiguate_normalized_tiles( working_similar_counts, [&](auto &similar) { - if (std::cmp_equal( - similar.first.m_animation_id, - (std::numeric_limits::max)())) + if ( + std::cmp_equal( + similar.first.m_animation_id, + (std::numeric_limits::max)())) { if (similar.second > 1) { @@ -434,24 +435,25 @@ void ff_8::MapHistory::refresh_working_conflicts() const m_working_similar_counts, m_working_animation_counts); } -const std::vector & +const std::vector & ff_8::MapHistory::original_pupu() const noexcept { return m_original_pupu; } -const std::vector &ff_8::MapHistory::working_pupu() const noexcept +const std::vector & + ff_8::MapHistory::working_pupu() const noexcept { return m_working_pupu; } -const std::vector & +const std::vector & ff_8::MapHistory::original_unique_pupu() const noexcept { return m_original_unique_pupu; } -const std::vector & +const std::vector & ff_8::MapHistory::working_unique_pupu() const noexcept { return m_working_unique_pupu; @@ -733,7 +735,7 @@ const map_t &ff_8::MapHistory::const_working() const } template -[[nodiscard]] ff_8::PupuID +[[nodiscard]] open_viii::graphics::background::PupuID ff_8::MapHistory::get_pupu_from_working(const TileT &tile) const { return m_original_pupu[static_cast( @@ -741,11 +743,11 @@ template } // Explicit instantiation for Tiles -template ff_8::PupuID +template open_viii::graphics::background::PupuID ff_8::MapHistory::get_pupu_from_working(const Tile1 &) const; -template ff_8::PupuID +template open_viii::graphics::background::PupuID ff_8::MapHistory::get_pupu_from_working(const Tile2 &) const; -template ff_8::PupuID +template open_viii::graphics::background::PupuID ff_8::MapHistory::get_pupu_from_working(const Tile3 &) const; template @@ -755,10 +757,11 @@ std::vector::difference_type return working().visit_tiles( [&](const auto &tiles) -> std::vector::difference_type { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { return static_cast::difference_type>( std::ranges::distance(&tiles.front(), &tile)); diff --git a/src/opengl/main/MapHistory.hpp b/src/opengl/main/MapHistory.hpp index c207fbcc..035a9b50 100644 --- a/src/opengl/main/MapHistory.hpp +++ b/src/opengl/main/MapHistory.hpp @@ -5,13 +5,13 @@ #ifndef FIELD_MAP_EDITOR_MAPHISTORY_HPP #define FIELD_MAP_EDITOR_MAPHISTORY_HPP #include "normalized_source_tile.hpp" -#include "PupuID.hpp" #include "source_tile_conflicts.hpp" -#include "UniquifyPupu.hpp" #include #include #include #include +#include +#include #include #include /** @@ -66,7 +66,7 @@ class [[nodiscard]] MapHistory * until `end_multi_frame_working` is called, which sets it back to * `false`. */ - mutable bool m_in_multi_frame_operation = { false }; + mutable bool m_in_multi_frame_operation = { false }; /** * @brief Indicates whether the original state has been changed. * @@ -79,7 +79,7 @@ class [[nodiscard]] MapHistory * @note This flag is used to track modifications to the original tile * data. */ - mutable bool m_original_changed = { false }; + mutable bool m_original_changed = { false }; /** * @brief Indicates whether the working state has been changed. @@ -92,43 +92,47 @@ class [[nodiscard]] MapHistory * * @note This flag is used to track modifications to the working tile data. */ - mutable bool m_working_changed = { false }; + mutable bool m_working_changed = { false }; // Current states /** * @brief The active original map state. */ - map_t m_original = {}; + map_t m_original = {}; /** * @brief The active working map state. */ - map_t m_working = {}; + map_t m_working = {}; // Corresponding PupuIDs /** * @brief PupuID list corresponding to the original map state. */ - mutable std::vector m_original_pupu = {}; + mutable std::vector + m_original_pupu = {}; /** * @brief PupuID list corresponding to the working map state. */ - mutable std::vector m_working_pupu = {}; + mutable std::vector m_working_pupu + = {}; // Corresponding PupuIDs /** * @brief Unique PupuID list corresponding to the original map state. */ - mutable std::vector m_original_unique_pupu = {}; + mutable std::vector + m_original_unique_pupu = {}; /** * @brief Unique PupuID list corresponding to the working map state. */ - mutable std::vector m_working_unique_pupu = {}; + mutable std::vector + m_working_unique_pupu = {}; /** @@ -250,10 +254,11 @@ class [[nodiscard]] MapHistory return original().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto front_tile = tiles.cbegin(); if ( @@ -312,10 +317,11 @@ class [[nodiscard]] MapHistory return working().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto tile = tiles.begin(); std::ranges::advance(tile, pos); @@ -632,14 +638,16 @@ class [[nodiscard]] MapHistory * @return A constant reference to the vector of PupuIDs for the original * map. */ - [[nodiscard]] const std::vector &original_pupu() const noexcept; + [[nodiscard]] const std::vector & + original_pupu() const noexcept; /** * @brief Retrieves the PupuIDs for the working map. * @return A constant reference to the vector of PupuIDs for the working * map. */ - [[nodiscard]] const std::vector &working_pupu() const noexcept; + [[nodiscard]] const std::vector & + working_pupu() const noexcept; /** @@ -654,7 +662,8 @@ class [[nodiscard]] MapHistory * the original state. * @note The returned vector is guaranteed to contain only unique values. */ - const std::vector &original_unique_pupu() const noexcept; + const std::vector & + original_unique_pupu() const noexcept; /** * @brief Retrieves the unique PupuIDs for the working state of the map. @@ -669,7 +678,8 @@ class [[nodiscard]] MapHistory * the working state. * @note The returned vector is guaranteed to contain only unique values. */ - const std::vector &working_unique_pupu() const noexcept; + const std::vector & + working_unique_pupu() const noexcept; /** * @brief Retrieves the unique colors associated with the original PupuIDs. @@ -736,19 +746,20 @@ class [[nodiscard]] MapHistory * the input color matches exactly a generated working color; otherwise, * the lookup will fail. */ - std::optional + std::optional working_color_to_pupu_id(const glm::vec4 &in_color) const noexcept { auto color_and_ids = std::views::zip( working_unique_pupu_color(), working_unique_pupu()); - if (auto &&it = std::ranges::find_if( - color_and_ids, - [&](const auto ¤t_pair) - { - auto &&[color, _] = current_pair; - return in_color == color; - }); - it != std::ranges::end(color_and_ids)) + if ( + auto &&it = std::ranges::find_if( + color_and_ids, + [&](const auto ¤t_pair) + { + auto &&[color, _] = current_pair; + return in_color == color; + }); + it != std::ranges::end(color_and_ids)) { return std::get<1>(*it); } @@ -825,7 +836,8 @@ class [[nodiscard]] MapHistory * @return The corresponding PupuID. */ template - [[nodiscard]] PupuID get_pupu_from_working(const TileT &tile) const; + [[nodiscard]] open_viii::graphics::background::PupuID + get_pupu_from_working(const TileT &tile) const; /** * @brief Calculates the offset of the given tile in the working map. @@ -921,10 +933,11 @@ class [[nodiscard]] MapHistory working().visit_tiles( [&](auto &tiles) { - if constexpr (std::is_same_v< - std::ranges::range_value_t< - std::remove_cvref_t>, - TileT>) + if constexpr ( + std::is_same_v< + std::ranges::range_value_t< + std::remove_cvref_t>, + TileT>) { auto filtered_tiles = tiles | std::views::filter(filter); for (auto &tile : filtered_tiles) diff --git a/src/opengl/main/PupuID.cpp b/src/opengl/main/PupuID.cpp deleted file mode 100644 index 9ea60a2e..00000000 --- a/src/opengl/main/PupuID.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include "PupuID.hpp" -#include "formatters.hpp" -using namespace open_viii::graphics::background; -namespace ff_8 -{ -[[nodiscard]] std::string PupuID::create_summary() const -{ - return fmt::format( - "Layer ID: {}\nBlend Mode: {}\nAnimation ID: {}\nAnimation State: " - "{}\nOffset: {}\nX not aligned: {}\nY not aligned: {}", - layer_id(), - blend_mode(), - animation_id(), - animation_state(), - offset(), - is_x_not_aligned_to_grid(), - is_y_not_aligned_to_grid()); -} - -// You are using all 32 bits without overlap. -// The layer field uses 7 bits, which are stored in bits 24-30 of the m_raw -// value. The blend field uses only 3 bits, which are stored in bits 20-22 of -// the m_raw value. The animation id and animation state fields are 8 bits each, -// which are stored in bits 12-19 and 4-11 respectively. The offset field uses 4 -// bits, which are stored in bits 0-3 of the m_raw value. Finally, you use two -// more bits (31 and 23) for the x_not_aligned_to_grid and y_not_aligned_to_grid -// flags, respectively. Therefore, all 32 bits are used without any overlap or -// waste of space. - - -// template PupuID::PupuID(const Tile1 &, std::uint8_t); -// template PupuID::PupuID(const Tile2 &, std::uint8_t); -// template PupuID::PupuID(const Tile3 &, std::uint8_t); - - -// PupuID = uint32_t(0U + (tile.layer_id() << -// 24U)+(static_cast(tile.blend_mode()) << 20U) + -// (tile.animation_id() <<12U)+ (tile.animation_state()<<4U)) - -// std::transform(Sprites.cbegin(), Sprites.cend() - 1, Sprites.cbegin() + 1, -// Sprites.begin()+1, [](const Sprite& first, Sprite second) { -// static constexpr auto mask = 0xFFFFFFF0U; -// if ((first.ID & mask) == (second.ID & mask)) -// { -// second.ID = first.ID + 1; -// } -// return second; -// }); - -// IDs.reserve(Sprites.size()); -// std::transform(Sprites.cbegin(), Sprites.cend(), std::back_inserter(IDs), -// [](const Sprite& sprite) {return sprite.ID; }); std::sort(IDs.begin(), -// IDs.end()); auto it = std::unique(IDs.begin(), IDs.end()); IDs.erase(it, -// IDs.end()); -}// namespace ff_8 - - -// struct PupuIDComparator -// { -// bool operator()(const PupuID &a, const PupuID &b) const -// { -// auto key = [](const PupuID &id) { -// return std::tuple{ // 1. prefer static images (animation_id == -// 255) -// id.animation_id() == 255 ? 0 : 1, - -// // 2. prefer blend mode none -// id.blend_mode() == BlendMode::None ? 0 : 1, - -// // 3. prefer animated if still tied -// id.animation_id() != 255 ? 0 : 1, - -// // 4. if blend mode != none, group by blend -// mode id.blend_mode() != BlendMode::None ? -// static_cast(id.blend_mode()) : -1, - -// // 5. prefer smallest offset -// id.offset(), - -// // 6. prefer grid aligned -// (id.is_x_not_aligned_to_grid() || -// id.is_y_not_aligned_to_grid()) ? 1 : 0 -// }; -// }; - -// return key(a) < key(b); -// } -// }; -// struct PupuIDComparator -// { -// const std::unordered_map *pupuCount; //not sure what -// this will do lol. the ids are stored in a vector and we know the count -// from std::size() - -// bool operator()(const PupuID &a, -// const PupuID &b) const -// { -// auto key = [&](const PupuID &id) { -// return std::tuple{ pupuCount->at(id) == 1 ? 0 : 1,// prefer -// unique -// id.animation_id() == 255 ? 0 : 1, -// id.blend_mode() == BlendMode::None ? 0 : 1, -// id.animation_id() != 255 ? 0 : 1, -// id.blend_mode() != BlendMode::None ? -// static_cast(id.blend_mode()) : -1, -// id.offset(), -// (id.is_x_not_aligned_to_grid() || -// id.is_y_not_aligned_to_grid()) ? 1 : 0 }; -// }; -// return key(a) < key(b); -// } -// }; - -// hmm since each file entry will have one or more pupu ids. would we like use -// the comparitor to sort the list of pupu ids and then choose the one that is -// first? I plan on having like one set of keys and once one gets used up it -// won't be able to be used by another image. then we'll pass those images -// through the maskes to hide the unused pixels.hmm since each file entry will -// have one or more pupu ids. would we like use the comparitor to sort the list -// of pupu ids and then choose the one that is first? I plan on having like one -// set of keys and once one gets used up it won't be able to be used by another -// image. then we'll pass those images through the maskes to hide the unused -// pixels. \ No newline at end of file diff --git a/src/opengl/main/PupuID.hpp b/src/opengl/main/PupuID.hpp deleted file mode 100644 index 329b4ab9..00000000 --- a/src/opengl/main/PupuID.hpp +++ /dev/null @@ -1,225 +0,0 @@ -// -// Created by pcvii on 10/19/2021. -// - -#ifndef FIELD_MAP_EDITOR_PUPUID_HPP -#define FIELD_MAP_EDITOR_PUPUID_HPP -#include "open_viii/graphics/background/Map.hpp" -#include -#include -namespace ff_8 -{ -struct PupuID -{ - - // 1 bit for x not aligned - static constexpr std::uint32_t x_not_aligned_offset = 31U; - static constexpr std::uint32_t x_not_aligned_mask = 0x1U; - static constexpr std::uint32_t x_not_aligned_to_grid - = x_not_aligned_mask << x_not_aligned_offset; - // layer is 7 bits - static constexpr std::uint32_t layer_offset = 24U; - static constexpr std::uint32_t layer_mask = 0x7FU; - // 1 bit for y not aligned - static constexpr std::uint32_t y_not_aligned_offset = 23U; - static constexpr std::uint32_t y_not_aligned_mask = 0x1U; - static constexpr std::uint32_t y_not_aligned_to_grid - = y_not_aligned_mask << y_not_aligned_offset; - // blend is only 0,1,2,3,4. So 3 bits - static constexpr std::uint32_t blend_offset = 20U; - static constexpr std::uint32_t blend_mask = 0x07U; - // animation id 8 bits - static constexpr std::uint32_t animation_offset = 12U; - static constexpr std::uint32_t animation_mask = 0xFFU; - // animation state 8 bits - static constexpr std::uint32_t animation_state_offset = 4U; - static constexpr std::uint32_t animation_state_mask = 0xFFU; - // the offset is 4 bits - static constexpr std::uint32_t offset_mask = 0xFU; - // We just used this to check if the x and y are not aligned. - static constexpr std::int8_t tile_grid_size = 16; - - static_assert(x_not_aligned_to_grid == 0x8000'0000U); - static_assert((layer_mask << layer_offset) == 0x7F00'0000U); - static_assert(y_not_aligned_to_grid == 0x0080'0000U); - static_assert((blend_mask << blend_offset) == 0x0070'0000U); - static_assert((animation_mask << animation_offset) == 0x000F'F000U); - static_assert( - (animation_state_mask << animation_state_offset) == 0x0000'0FF0); - - - constexpr PupuID() noexcept = default; - constexpr explicit PupuID(std::uint32_t raw) noexcept - : m_raw(raw) - { - } - constexpr explicit PupuID( - const open_viii::graphics::background::is_tile auto &tile, - std::uint8_t offset = 0U) noexcept - : PupuID( - std::uint32_t{ - ((static_cast(tile.layer_id()) & layer_mask) - << layer_offset) - | ((static_cast(tile.blend_mode()) & blend_mask) << blend_offset) - | static_cast( - tile.animation_id() << animation_offset) - | static_cast( - tile.animation_state() << animation_state_offset) - | (offset & offset_mask) }) - { - if (tile.x() % tile_grid_size != 0) - { - m_raw |= x_not_aligned_to_grid; - } - if (tile.y() % tile_grid_size != 0) - { - m_raw |= y_not_aligned_to_grid; - } - assert(tile.layer_id() == layer_id()); - assert(tile.blend_mode() == blend_mode()); - assert(tile.animation_id() == animation_id()); - assert(tile.animation_state() == animation_state()); - } - [[nodiscard]] constexpr std::uint8_t layer_id() const noexcept - { - return static_cast( - (m_raw >> layer_offset) & layer_mask); - } - [[nodiscard]] constexpr open_viii::graphics::background::BlendModeT - blend_mode() const noexcept - { - return static_cast( - (m_raw >> blend_offset) & blend_mask); - } - [[nodiscard]] constexpr std::uint8_t animation_id() const noexcept - { - return static_cast( - (m_raw >> animation_offset) - & std::numeric_limits::max()); - } - [[nodiscard]] constexpr std::uint8_t animation_state() const noexcept - { - return static_cast( - (m_raw >> animation_state_offset) - & std::numeric_limits::max()); - } - [[nodiscard]] constexpr std::uint8_t offset() const noexcept - { - return static_cast(m_raw & offset_mask); - } - [[nodiscard]] constexpr bool is_x_not_aligned_to_grid() const noexcept - { - return (m_raw & x_not_aligned_to_grid) != 0; - } - [[nodiscard]] constexpr bool is_y_not_aligned_to_grid() const noexcept - { - return (m_raw & y_not_aligned_to_grid) != 0; - } - constexpr PupuID &operator+=(std::uint32_t right) noexcept - { - m_raw += right; - return *this; - } - [[nodiscard]] constexpr PupuID - operator+(std::uint32_t right) const noexcept - { - auto cpy = *this; - return cpy += right; - } - constexpr PupuID &operator|=(std::uint32_t right) noexcept - { - m_raw |= right; - return *this; - } - [[nodiscard]] constexpr PupuID - operator|(std::uint32_t right) const noexcept - { - auto cpy = *this; - return cpy |= right; - } - constexpr PupuID &operator+=(PupuID right) noexcept - { - m_raw += right.raw(); - return *this; - } - [[nodiscard]] constexpr PupuID operator+(PupuID right) const noexcept - { - auto cpy = *this; - return cpy += right.raw(); - } - [[nodiscard]] constexpr explicit operator std::uint32_t() const noexcept - { - return m_raw; - } - [[nodiscard]] constexpr std::uint32_t raw() const noexcept - { - return m_raw; - } - [[nodiscard]] bool constexpr same_base(PupuID right) const noexcept - { - constexpr std::uint32_t mask = ~offset_mask; - static_assert(mask == 0xFFFFFFF0u, "same_base mask mismatch"); - return (m_raw & mask) == (right.raw() & mask); - } - - [[nodiscard]] bool constexpr same_layer_base(PupuID right) const noexcept - { - constexpr std::uint32_t mask - = ~((layer_mask << layer_offset) | offset_mask); - static_assert(mask == 0x80FFFFF0u, "same_layer_base mask mismatch"); - return (m_raw & mask) == (right.raw() & mask); - } - - [[nodiscard]] bool constexpr same_animation_base( - PupuID right) const noexcept - { - constexpr std::uint32_t mask = ~( - (animation_mask << animation_offset) - | (animation_state_mask << animation_state_offset) | offset_mask); - static_assert( - mask == 0xFFF00000u, "same_animation_base mask mismatch"); - return (m_raw & mask) == (right.raw() & mask); - } - - - [[nodiscard]] bool constexpr same_animation_id_base( - PupuID right) const noexcept - { - constexpr std::uint32_t mask - = ~((animation_state_mask << animation_state_offset) | offset_mask); - static_assert( - mask == 0xFFFFF000u, "same_animation_id_base mask mismatch"); - return (m_raw & mask) == (right.raw() & mask); - } - - [[nodiscard]] bool constexpr same_animation_state_base( - PupuID right) const noexcept - { - constexpr std::uint32_t mask - = ~((animation_mask << animation_offset) | offset_mask); - static_assert( - mask == 0xFFF00FF0u, "same_animation_state_base mask mismatch"); - return (m_raw & mask) == (right.raw() & mask); - } - - constexpr auto operator<=>(const PupuID &) const noexcept = default; - [[nodiscard]] std::string create_summary() const; - - private: - std::uint32_t m_raw{}; -}; -}// namespace ff_8 -template<> -struct fmt::formatter : fmt::formatter -{ - // Formats value using the parsed format specification stored in this - // formatter and writes the output to ctx.out(). - auto format( - const ff_8::PupuID &value, - format_context &ctx) const -> format_context::iterator - { - return fmt::format_to(ctx.out(), "{:08X}", value.raw()); - } -}; - -#endif// FIELD_MAP_EDITOR_PUPUID_HPP diff --git a/src/opengl/main/UniquifyPupu.cpp b/src/opengl/main/UniquifyPupu.cpp deleted file mode 100644 index 23d321e5..00000000 --- a/src/opengl/main/UniquifyPupu.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "UniquifyPupu.hpp" -using namespace open_viii::graphics::background; -namespace ff_8 -{ -PupuID UniquifyPupu::operator()(const is_tile auto &tile_const) -{ - const auto t = 16; - const auto x = static_cast(tile_const.x() / t); - const auto y = static_cast(tile_const.y() / t); - auto input_value = PupuKey{ PupuID(tile_const), x, y }; - auto insert_key = [&](PupuKey key) -> PupuID - { - if (m_pupu_map.contains(key)) - { - ++(m_pupu_map.at(key)); - return key.pupu_id + m_pupu_map.at(key); - } - else - { - m_pupu_map.emplace(key, std::uint8_t{}); - return key.pupu_id + m_pupu_map.at(std::move(key)); - } - }; - return insert_key(input_value); -} -template PupuID UniquifyPupu::operator()(const Tile1 &); -template PupuID UniquifyPupu::operator()(const Tile2 &); -template PupuID UniquifyPupu::operator()(const Tile3 &); -// operator UniqueValues() const -// { -// std::vector values{}; -// std::ranges::transform(m_pupu_map, -// std::back_insert_iterator(values),[](auto && key_value)->PupuID{ -// const auto & [key,value] = key_value; -// return key.pupu_id; -// }); -// UniqueValues{std::move(values)}; -// } -}// namespace ff_8 \ No newline at end of file diff --git a/src/opengl/main/UniquifyPupu.hpp b/src/opengl/main/UniquifyPupu.hpp deleted file mode 100644 index c842a07b..00000000 --- a/src/opengl/main/UniquifyPupu.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Created by pcvii on 9/6/2022. -// - -#ifndef FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP -#define FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP -#include "PupuID.hpp" -#include -namespace ff_8 -{ -class UniquifyPupu -{ - public: - struct PupuKey - { - PupuID pupu_id = {}; - std::int16_t x = {}; - std::int16_t y = {}; - auto operator<=>(const PupuKey &) const = default; - }; - - PupuID operator()( - const open_viii::graphics::background::is_tile auto &tile_const); - - private: - std::map m_pupu_map = {}; -}; -}// namespace ff_8 -#endif// FIELD_MAP_EDITOR_UNIQUIFYPUPU_HPP diff --git a/src/opengl/main/filter.hpp b/src/opengl/main/filter.hpp index 29737f4e..59273bd6 100644 --- a/src/opengl/main/filter.hpp +++ b/src/opengl/main/filter.hpp @@ -9,9 +9,6 @@ #include "formatters.hpp" #include "gui/colors.hpp" #include "gui/compact_type.hpp" -#include "open_viii/graphics/background/BlendModeT.hpp" -#include "open_viii/graphics/BPPT.hpp" -#include "PupuID.hpp" #include "tile_operations.hpp" #include "utilities.hpp" #include @@ -19,6 +16,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -142,7 +142,7 @@ struct ConfigKeys; template<> struct ConfigKeys { - using value_type = PupuID; + using value_type = open_viii::graphics::background::PupuID; static constexpr std::string_view key_name = "filter_pupu"; static constexpr std::string_view enabled_key_name = "filter_pupu_enabled"; }; @@ -150,7 +150,7 @@ struct ConfigKeys template<> struct ConfigKeys { - using value_type = std::vector; + using value_type = std::vector; static constexpr std::string_view key_name = "filter_multi_pupu"; static constexpr std::string_view enabled_key_name = "filter_multi_pupu_enabled"; @@ -493,8 +493,8 @@ struct FilterLoadStrategy } else if constexpr (glengine::is_std_vector) { - if constexpr (std::is_enum_v< - glengine::vector_elem_type_t>) + if constexpr ( + std::is_enum_v>) { (void)fme::Configuration::load_array< glengine::vector_elem_type_t, @@ -502,17 +502,19 @@ struct FilterLoadStrategy glengine::vector_elem_type_t>>( config, id, value); } - else if constexpr (std::same_as< - glengine::vector_elem_type_t, - open_viii::graphics::BPPT>) + else if constexpr ( + std::same_as< + glengine::vector_elem_type_t, + open_viii::graphics::BPPT>) { (void)fme::Configuration::load_array< glengine::vector_elem_type_t, std::uint8_t>(config, id, value); } - else if constexpr (std::same_as< - glengine::vector_elem_type_t, - PupuID>) + else if constexpr ( + std::same_as< + glengine::vector_elem_type_t, + open_viii::graphics::background::PupuID>) { (void)fme::Configuration::load_array< glengine::vector_elem_type_t, @@ -591,8 +593,8 @@ struct FilterUpdateStrategy } else if constexpr (glengine::is_std_vector) { - if constexpr (std::is_enum_v< - glengine::vector_elem_type_t>) + if constexpr ( + std::is_enum_v>) { fme::Configuration::update_array< glengine::vector_elem_type_t, @@ -600,17 +602,19 @@ struct FilterUpdateStrategy glengine::vector_elem_type_t>>( config, id, value); } - else if constexpr (std::same_as< - glengine::vector_elem_type_t, - open_viii::graphics::BPPT>) + else if constexpr ( + std::same_as< + glengine::vector_elem_type_t, + open_viii::graphics::BPPT>) { fme::Configuration::update_array< glengine::vector_elem_type_t, std::uint8_t>(config, id, value); } - else if constexpr (std::same_as< - glengine::vector_elem_type_t, - PupuID>) + else if constexpr ( + std::same_as< + glengine::vector_elem_type_t, + open_viii::graphics::background::PupuID>) { fme::Configuration::update_array< glengine::vector_elem_type_t, @@ -875,10 +879,10 @@ struct filter return *this; } SetFlag(m_settings, FilterSettings::Toggle_Enabled, true); - if constexpr (std::same_as< - std::remove_cvref_t< - decltype(ConfigKeys::enabled_key_name)>, - std::string_view>) + if constexpr ( + std::same_as< + std::remove_cvref_t::enabled_key_name)>, + std::string_view>) { if (HasFlag(m_settings, FilterSettings::Config_Enabled)) { @@ -897,10 +901,10 @@ struct filter return *this; } SetFlag(m_settings, FilterSettings::Toggle_Enabled, false); - if constexpr (std::same_as< - std::remove_cvref_t< - decltype(ConfigKeys::enabled_key_name)>, - std::string_view>) + if constexpr ( + std::same_as< + std::remove_cvref_t::enabled_key_name)>, + std::string_view>) { if (HasFlag(m_settings, FilterSettings::Config_Enabled)) { @@ -1174,10 +1178,10 @@ struct filter filter &enable() { SetFlag(m_settings, FilterSettings::Toggle_Enabled, true); - if constexpr (std::same_as< - std::remove_cvref_t< - decltype(ConfigKeys::enabled_key_name)>, - std::string_view>) + if constexpr ( + std::same_as< + std::remove_cvref_t::enabled_key_name)>, + std::string_view>) { if (HasFlag(m_settings, FilterSettings::Config_Enabled)) { @@ -1192,10 +1196,10 @@ struct filter filter &disable() { SetFlag(m_settings, FilterSettings::Toggle_Enabled, false); - if constexpr (std::same_as< - std::remove_cvref_t< - decltype(ConfigKeys::enabled_key_name)>, - std::string_view>) + if constexpr ( + std::same_as< + std::remove_cvref_t::enabled_key_name)>, + std::string_view>) { if (HasFlag(m_settings, FilterSettings::Config_Enabled)) { diff --git a/src/opengl/main/gui/Selections.hpp b/src/opengl/main/gui/Selections.hpp index 22ab05b8..effec88a 100644 --- a/src/opengl/main/gui/Selections.hpp +++ b/src/opengl/main/gui/Selections.hpp @@ -1285,8 +1285,8 @@ struct SelectionLoadStrategy } else if constexpr (glengine::is_std_vector) { - if constexpr (std::is_enum_v< - glengine::vector_elem_type_t>) + if constexpr ( + std::is_enum_v>) { return fme::Configuration::load_array< glengine::vector_elem_type_t, @@ -1294,9 +1294,10 @@ struct SelectionLoadStrategy glengine::vector_elem_type_t>>( config, id, value); } - else if constexpr (std::same_as< - glengine::vector_elem_type_t, - ff_8::PupuID>) + else if constexpr ( + std::same_as< + glengine::vector_elem_type_t, + open_viii::graphics::background::PupuID>) { return fme::Configuration::load_array< glengine::vector_elem_type_t, @@ -1360,8 +1361,9 @@ struct SelectionLoadStrategy::value_type> { const toml::array *index_array = nullptr; - if (auto it_base = root_table.find(index_id); - it_base != root_table.end() && it_base->second.is_array()) + if ( + auto it_base = root_table.find(index_id); + it_base != root_table.end() && it_base->second.is_array()) { index_array = it_base->second.as_array(); } @@ -1389,9 +1391,10 @@ struct SelectionLoadStrategy::value_type> } std::string entry_name = [&]() -> std::string { - if (const auto *name_ptr - = value_table->get_as("name"); - name_ptr) + if ( + const auto *name_ptr + = value_table->get_as("name"); + name_ptr) { return name_ptr->get(); } @@ -1399,9 +1402,10 @@ struct SelectionLoadStrategy::value_type> }(); const bool entry_enabled = [&]() -> bool { - if (const auto *enabled_ptr - = value_table->get_as("enabled"); - enabled_ptr) + if ( + const auto *enabled_ptr + = value_table->get_as("enabled"); + enabled_ptr) { return enabled_ptr->get(); } @@ -1502,9 +1506,8 @@ struct SelectionUpdateStrategy { Configuration::update_array(config, id, value); } - else if constexpr (std::same_as< - ValueT, - std::vector>) + else if constexpr ( + std::same_as>) { Configuration::update_array(config, id, value); } @@ -1969,7 +1972,7 @@ struct Selections const auto *src_value = std::get_if(&src); auto *dst_value = std::get_if< - std::to_underlying(BatchConfigKeys[Is]) + 1U>(&dst); + std::to_underlying(BatchConfigKeys[Is]) + 1U>(&dst); if (dst_value && src_value) { dst_value->value = *src_value; diff --git a/src/opengl/main/gui/filter_window.cpp b/src/opengl/main/gui/filter_window.cpp index 4972dd84..fc48b8fe 100644 --- a/src/opengl/main/gui/filter_window.cpp +++ b/src/opengl/main/gui/filter_window.cpp @@ -157,14 +157,14 @@ void fme::filter_window::render() const const char *button_text = "Fix Name(s)"; const char *input_text = "Filter"; float buttonWidth = ImGui::CalcTextSize(button_text).x - + ImGui::GetStyle().FramePadding.x * 2.0f; + + ImGui::GetStyle().FramePadding.x * 2.0f; float inputWidth = ImGui::GetContentRegionAvail().x - buttonWidth - ImGui::GetStyle().ItemSpacing.x - ImGui::CalcTextSize(input_text).x; ImGui::SetNextItemWidth(inputWidth); - if (ImGui::InputText( - input_text, filter_buf.data(), filter_buf.size())) + if ( + ImGui::InputText(input_text, filter_buf.data(), filter_buf.size())) { m_search_field = filter_buf.data(); } @@ -331,8 +331,9 @@ void fme::filter_window::render() const cleanup_invalid_selections(); handle_thumbnail_size_adjustment(); - if (const auto temp = lock_map_sprite->get_deswizzle_combined_textures(); - temp.has_value()) + if ( + const auto temp = lock_map_sprite->get_deswizzle_combined_textures(); + temp.has_value()) m_textures_map = temp.value(); else { @@ -626,13 +627,14 @@ bool fme::filter_window::contains_key_recursive(const toml::table *tbl) const return true; // Check current level keys - if (std::ranges::any_of( - *tbl, - [&](auto const &node) - { - const auto &[key, _] = node; - return open_viii::tools::i_find(key, m_search_field); - })) + if ( + std::ranges::any_of( + *tbl, + [&](auto const &node) + { + const auto &[key, _] = node; + return open_viii::tools::i_find(key, m_search_field); + })) { return true; } @@ -906,7 +908,7 @@ void fme::filter_window::combo_failover( static const auto strings = FailOverLevelsArray | std::views::transform(AsString{}) | std::ranges::to(); - const auto gcc = GenericCombo( + const auto gcc = GenericCombo( "Fail Over", FailOverLevelsArray, strings, @@ -1133,8 +1135,8 @@ int fme::filter_window::calc_column_count(float width) const { const ImVec2 region_size = ImGui::GetContentRegionAvail(); const float padding = ImGui::GetStyle().FramePadding.x * 2.0f - + ImGui::GetStyle().ItemSpacing.x; - const int count = static_cast(region_size.x / (width + padding)); + + ImGui::GetStyle().ItemSpacing.x; + const int count = static_cast(region_size.x / (width + padding)); return count > 0 ? count : 1; } @@ -1147,9 +1149,10 @@ void fme::filter_window::select_file( { return; } - if (auto *ptr - = lock_map_sprite->get_deswizzle_combined_toml_table(file_name); - ptr) + if ( + auto *ptr + = lock_map_sprite->get_deswizzle_combined_toml_table(file_name); + ptr) { if (ImGui::GetIO().KeyCtrl) { @@ -1424,8 +1427,8 @@ std::string fme::filter_window::generate_file_name( auto now = std::chrono::system_clock::now(); auto sec = std::chrono::time_point_cast(now); auto ms = std::chrono::duration_cast( - now.time_since_epoch()) - % 1000; + now.time_since_epoch()) + % 1000; if (index.has_value()) { return fmt::format( @@ -1473,10 +1476,9 @@ void fme::filter_window::draw_filename_controls( const std::shared_ptr &lock_selections, const std::shared_ptr &lock_map_sprite) const { - if (ImGui::InputText( - "##Empty", - m_file_name_buffer.data(), - m_file_name_buffer.size() - 1U)) + if ( + ImGui::InputText( + "##Empty", m_file_name_buffer.data(), m_file_name_buffer.size() - 1U)) { } @@ -1541,9 +1543,10 @@ void fme::filter_window::draw_filename_controls( ImGui::BeginDisabled(!can_undo_rename); if (ImGui::Button("Undo Rename")) { - if (const auto node_ptr = m_selected_toml_table->find("old_key"); - node_ptr != m_selected_toml_table->end() - && node_ptr->second.is_string()) + if ( + const auto node_ptr = m_selected_toml_table->find("old_key"); + node_ptr != m_selected_toml_table->end() + && node_ptr->second.is_string()) { std::string new_file_name = node_ptr->second.as_string()->get(); m_selected_toml_table @@ -1564,9 +1567,10 @@ void fme::filter_window::draw_filename_controls( } else if (m_selected_toml_table) { - if (const auto node_ptr = m_selected_toml_table->find("old_key"); - node_ptr != m_selected_toml_table->end() - && node_ptr->second.is_string()) + if ( + const auto node_ptr = m_selected_toml_table->find("old_key"); + node_ptr != m_selected_toml_table->end() + && node_ptr->second.is_string()) { tool_tip(node_ptr->second.as_string()->get()); } @@ -1659,7 +1663,8 @@ void fme::filter_window::draw_filter_controls( combo_filtered_draw_bit(lock_map_sprite); } -std::vector fme::filter_window::get_unused_ids() const +std::vector + fme::filter_window::get_unused_ids() const { if (!m_textures_map) { @@ -1671,7 +1676,7 @@ std::vector fme::filter_window::get_unused_ids() const spdlog::error("Failed to lock map_sprite: shared_ptr is expired."); return {}; } - std::set used_pupu{}; + std::set used_pupu{}; // collect used IDs from textures_map for (const auto &[current_file_name, _] : *m_textures_map) @@ -1686,10 +1691,10 @@ std::vector fme::filter_window::get_unused_ids() const } // get all possible IDs - const auto &all_ids = lock_map_sprite->working_unique_pupu(); + const auto &all_ids = lock_map_sprite->working_unique_pupu(); // compute unused - std::vector unused_ids; + std::vector unused_ids; unused_ids.reserve(all_ids.size()); for (const auto &id : all_ids) @@ -1705,8 +1710,9 @@ void fme::filter_window::popup_combo_filtered_pupu( const std::shared_ptr &lock_selections, const std::shared_ptr &lock_map_sprite) const { - if (ImGui::BeginPopupModal( - "Pupu Filter Popup", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) + if ( + ImGui::BeginPopupModal( + "Pupu Filter Popup", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { const auto strings = lock_map_sprite->working_unique_pupu() | std::views::transform(AsString{}) @@ -1714,8 +1720,8 @@ void fme::filter_window::popup_combo_filtered_pupu( const auto tooltips = lock_map_sprite->working_unique_pupu() | std::views::transform( - [](const ff_8::PupuID &pupu_id) -> decltype(auto) - { return pupu_id.create_summary(); }) + [](const open_viii::graphics::background::PupuID &pupu_id) + -> decltype(auto) { return pupu_id.create_summary(); }) | std::ranges::to(); const auto gcc = GenericComboWithMultiFilter( gui_labels::pupu_id, @@ -1760,11 +1766,12 @@ void fme::filter_window::combo_filtered_pupu( const auto strings = lock_map_sprite->working_unique_pupu() | std::views::transform(AsString{}) | std::ranges::to(); - const auto tooltips = lock_map_sprite->working_unique_pupu() - | std::views::transform( - [](const ff_8::PupuID &pupu_id) -> decltype(auto) - { return pupu_id.create_summary(); }) - | std::ranges::to(); + const auto tooltips + = lock_map_sprite->working_unique_pupu() + | std::views::transform( + [](const open_viii::graphics::background::PupuID &pupu_id) + -> decltype(auto) { return pupu_id.create_summary(); }) + | std::ranges::to(); const auto gcc = GenericComboWithMultiFilter( gui_labels::pupu_id, lock_map_sprite->working_unique_pupu(), @@ -1810,7 +1817,7 @@ void fme::filter_window::combo_filtered_palettes( auto transform_pairs = pairs | std::views::transform( [](const auto &pair) { return pair.zip(); }); - auto join_pairs = std::ranges::join_view(transform_pairs); + auto join_pairs = std::ranges::join_view(transform_pairs); return join_pairs | std::ranges::to(); }; @@ -1851,16 +1858,16 @@ void fme::filter_window::combo_filtered_palettes( value_string_pairs.erase(unique_range.begin(), unique_range.end()); // Extract values and strings into separate views - const auto values = value_string_pairs - | std::views::transform([](const auto &pair) - { return std::get<0>(pair); }) - | std::ranges::to(); + const auto values = value_string_pairs + | std::views::transform([](const auto &pair) + { return std::get<0>(pair); }) + | std::ranges::to(); const auto strings = value_string_pairs | std::views::transform([](const auto &pair) { return std::get<1>(pair); }) | std::ranges::to(); - const auto gcc = fme::GenericComboWithMultiFilter( + const auto gcc = fme::GenericComboWithMultiFilter( gui_labels::palette, values, strings, @@ -1995,7 +2002,7 @@ void fme::filter_window::combo_filtered_animation_states( auto transform_pairs = pairs | std::views::transform( [](const auto &pair) { return pair.zip(); }); - auto join_pairs = std::ranges::join_view(transform_pairs); + auto join_pairs = std::ranges::join_view(transform_pairs); return join_pairs | std::ranges::to(); }; @@ -2034,15 +2041,15 @@ void fme::filter_window::combo_filtered_animation_states( [](const auto &pair) { return std::get<0>(pair); }); value_string_pairs.erase(unique_range.begin(), unique_range.end()); - const auto values = value_string_pairs - | std::views::transform([&](const auto &pair) - { return std::get<0>(pair); }) - | std::ranges::to(); + const auto values = value_string_pairs + | std::views::transform([&](const auto &pair) + { return std::get<0>(pair); }) + | std::ranges::to(); const auto strings = value_string_pairs | std::views::transform([&](const auto &pair) { return std::get<1>(pair); }) | std::ranges::to(); - const auto gcc = fme::GenericComboWithMultiFilter( + const auto gcc = fme::GenericComboWithMultiFilter( gui_labels::animation_state, values, strings, @@ -2081,8 +2088,8 @@ void fme::filter_window::combo_filtered_draw_bit( static constexpr auto values = std::array{ ff_8::draw_bitT::all, ff_8::draw_bitT::enabled, ff_8::draw_bitT::disabled }; - static const auto strings = values | std::views::transform(AsString{}) - | std::ranges::to(); + static const auto strings = values | std::views::transform(AsString{}) + | std::ranges::to(); static constexpr auto tooltips = std::array{ gui_labels::draw_bit_all_tooltip, gui_labels::draw_bit_enabled_tooltip, @@ -2115,8 +2122,8 @@ struct map_pupu_id { return m_map_sprite->working_unique_pupu() | std::views::transform( - [](const ff_8::PupuID &pupu_id) -> decltype(auto) - { return pupu_id.create_summary(); }); + [](const open_viii::graphics::background::PupuID &pupu_id) + -> decltype(auto) { return pupu_id.create_summary(); }); } auto zip() const { @@ -2164,7 +2171,7 @@ void fme::filter_window::menu_filtered_palettes( auto transform_pairs = pairs | std::views::transform( [](const auto &pair) { return pair.zip(); }); - auto join_pairs = std::ranges::join_view(transform_pairs); + auto join_pairs = std::ranges::join_view(transform_pairs); return join_pairs | std::ranges::to(); }; @@ -2296,17 +2303,17 @@ void fme::filter_window::menu_filtered_animation_ids( void fme::filter_window::menu_filtered_animation_states( const std::shared_ptr &lock_map_sprite) const { - const auto &map = lock_map_sprite->uniques().animation_state(); - const auto &keys = lock_map_sprite->filter() - .get() - .value(); + const auto &map = lock_map_sprite->uniques().animation_state(); + const auto &keys = lock_map_sprite->filter() + .get() + .value(); - const auto join_vector = [](auto &&pairs) + const auto join_vector = [](auto &&pairs) { auto transform_pairs = pairs | std::views::transform( [](const auto &pair) { return pair.zip(); }); - auto join_pairs = std::ranges::join_view(transform_pairs); + auto join_pairs = std::ranges::join_view(transform_pairs); return join_pairs | std::ranges::to(); }; @@ -2478,8 +2485,9 @@ const std::string &fme::filter_window::get_thumbnail_tooltip( const std::string &file_name) const { static const std::string empty_msg = "No filters are enabled..."; - if (lock_map_sprite->get_deswizzle_combined_textures_tooltips().contains( - file_name)) + if ( + lock_map_sprite->get_deswizzle_combined_textures_tooltips().contains( + file_name)) { const std::string &tmp = lock_map_sprite->get_deswizzle_combined_textures_tooltips().at( @@ -2501,7 +2509,7 @@ void fme::filter_window::render_thumbnail_button( : glengine::ConvertGliDtoImTextureId( framebuffer.value().color_attachment_id()); m_aspect_ratio = static_cast(framebuffer.value().height()) - / static_cast(framebuffer.value().width()); + / static_cast(framebuffer.value().width()); const ImVec2 thumb_size = { m_thumb_size_width, m_thumb_size_width * m_aspect_ratio }; @@ -2539,24 +2547,24 @@ void fme::filter_window::render_thumbnail_popup( { return; } - if (ImGui::MenuItem( - ICON_FA_SQUARE_PLUS " Add to selected", - nullptr, - nullptr, - std::ranges::find(m_multi_select, file_name) - == m_multi_select.end())) + if ( + ImGui::MenuItem( + ICON_FA_SQUARE_PLUS " Add to selected", + nullptr, + nullptr, + std::ranges::find(m_multi_select, file_name) == m_multi_select.end())) { m_multi_select.push_back(file_name); std::ranges::sort(m_multi_select); m_last_selected = file_name; } tool_tip("Add hovered item to selected."); - if (ImGui::MenuItem( - ICON_FA_SQUARE_MINUS " Remove from selected", - nullptr, - nullptr, - std::ranges::find(m_multi_select, file_name) - != m_multi_select.end())) + if ( + ImGui::MenuItem( + ICON_FA_SQUARE_MINUS " Remove from selected", + nullptr, + nullptr, + std::ranges::find(m_multi_select, file_name) != m_multi_select.end())) { const auto remove_range = std::ranges::remove(m_multi_select, file_name); @@ -2568,11 +2576,12 @@ void fme::filter_window::render_thumbnail_popup( } tool_tip("Remove hovered item from selected."); ImGui::Separator(); - if (ImGui::MenuItem( - ICON_FA_LAYER_GROUP " Combine (New)", - nullptr, - nullptr, - !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_LAYER_GROUP " Combine (New)", + nullptr, + nullptr, + !m_multi_select.empty())) { (void)lock_map_sprite->add_combine_deswizzle_combined_toml_table( m_multi_select, generate_file_name(lock_map_sprite)); @@ -2582,11 +2591,12 @@ void fme::filter_window::render_thumbnail_popup( tool_tip( "Combine selected entries into a new entry without " "removing the originals."); - if (ImGui::MenuItem( - ICON_FA_OBJECT_GROUP " Combine (Replace)", - nullptr, - nullptr, - !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_OBJECT_GROUP " Combine (Replace)", + nullptr, + nullptr, + !m_multi_select.empty())) { std::string temp_name = generate_file_name(lock_map_sprite); (void)lock_map_sprite->add_combine_deswizzle_combined_toml_table( @@ -2602,8 +2612,9 @@ void fme::filter_window::render_thumbnail_popup( "originals."); ImGui::Separator(); - if (ImGui::MenuItem( - ICON_FA_COPY " Copy", nullptr, nullptr, !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_COPY " Copy", nullptr, nullptr, !m_multi_select.empty())) { lock_map_sprite->copy_deswizzle_combined_toml_table( m_multi_select, @@ -2616,29 +2627,32 @@ void fme::filter_window::render_thumbnail_popup( tool_tip( "Copy selected entries into new entries with generated " "names."); - if (ImGui::MenuItem( - ICON_FA_TRASH " Remove", nullptr, nullptr, !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_TRASH " Remove", nullptr, nullptr, !m_multi_select.empty())) { std::ranges::move(m_multi_select, std::back_inserter(m_remove_queue)); m_multi_select.clear(); } tool_tip("Remove selected entries."); - if (ImGui::MenuItem( - ICON_FA_FILTER " Pupu Filter", - nullptr, - nullptr, - !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_FILTER " Pupu Filter", + nullptr, + nullptr, + !m_multi_select.empty())) { ImGui::OpenPopup("Pupu Filter Popup"); } tool_tip("Bulk enable or disable pupu."); ImGui::Separator(); - if (ImGui::MenuItem( - ICON_FA_BROOM " Clear Selection", - nullptr, - nullptr, - !m_multi_select.empty())) + if ( + ImGui::MenuItem( + ICON_FA_BROOM " Clear Selection", + nullptr, + nullptr, + !m_multi_select.empty())) { m_multi_select.clear(); } @@ -2646,7 +2660,8 @@ void fme::filter_window::render_thumbnail_popup( ImGui::EndPopup(); } -bool fme::filter_window::is_excluded(const ff_8::PupuID &pupu_id) const +bool fme::filter_window::is_excluded( + const open_viii::graphics::background::PupuID &pupu_id) const { return m_excluded_animation_id_from_state.enabled() && std::ranges::any_of( @@ -2678,8 +2693,10 @@ void fme::filter_window::process_combine( coo_table, unique_pupu_ids, [](auto &&...) { return true; }, []( - const ff_8::PupuID &u_pupu_id, - const ff_8::PupuID &i_pupu_id) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const open_viii::graphics::background::PupuID + &i_pupu_id) { return u_pupu_id.same_base(i_pupu_id); }); } if (m_checkanimation_id) @@ -2688,8 +2705,10 @@ void fme::filter_window::process_combine( coo_table, unique_pupu_ids, [](auto &&...) { return true; }, []( - const ff_8::PupuID &u_pupu_id, - const ff_8::PupuID &i_pupu_id) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const open_viii::graphics::background::PupuID + &i_pupu_id) { return u_pupu_id.same_animation_id_base(i_pupu_id); }); } if (m_checkanimation_state) @@ -2698,8 +2717,10 @@ void fme::filter_window::process_combine( coo_table, unique_pupu_ids, [](auto &&...) { return true; }, []( - const ff_8::PupuID &u_pupu_id, - const ff_8::PupuID &i_pupu_id) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const open_viii::graphics::background::PupuID + &i_pupu_id) { return u_pupu_id.same_animation_state_base(i_pupu_id) && i_pupu_id.animation_id() != 0xFFU @@ -2711,19 +2732,26 @@ void fme::filter_window::process_combine( process_combine( coo_table, unique_pupu_ids, []( - const ff_8::PupuID &u_pupu_id, - const std::span temp_pupus) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const std::span< + const open_viii::graphics::background::PupuID> + temp_pupus) { return u_pupu_id.animation_state() != 0u || std::ranges::any_of( temp_pupus, - [&](const ff_8::PupuID &pupu_id) + [&]( + const open_viii::graphics::background:: + PupuID &pupu_id) { return u_pupu_id .same_animation_id_base(pupu_id); }); }, - [](const ff_8::PupuID &, const ff_8::PupuID &) + []( + const open_viii::graphics::background::PupuID &, + const open_viii::graphics::background::PupuID &) { return true; }); } if (m_checklayer_id) @@ -2732,15 +2760,20 @@ void fme::filter_window::process_combine( coo_table, unique_pupu_ids, [](auto &&...) { return true; }, []( - const ff_8::PupuID &u_pupu_id, - const ff_8::PupuID &i_pupu_id) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const open_viii::graphics::background::PupuID + &i_pupu_id) { return u_pupu_id.same_layer_base(i_pupu_id); }); } - auto cmp = []( - std::vector const &a, - std::vector const &b) + auto cmp + = []( + std::vector const + &a, + std::vector const + &b) { if (a.size() != b.size()) return a.size() < b.size();// size first @@ -2748,7 +2781,10 @@ void fme::filter_window::process_combine( a, b);// then lexicographically }; // Assuming value() is hashable/comparable - std::set, decltype(cmp)> seen(cmp); + std::set< + std::vector, + decltype(cmp)> + seen(cmp); for (auto &&[key, value] : *coo_table) @@ -2776,8 +2812,10 @@ void fme::filter_window::process_combine( coo_table, unique_pupu_ids, [](auto &&...) { return true; }, []( - const ff_8::PupuID &u_pupu_id, - const ff_8::PupuID &i_pupu_id) + const open_viii::graphics::background::PupuID + &u_pupu_id, + const open_viii::graphics::background::PupuID + &i_pupu_id) { return u_pupu_id.same_animation_base(i_pupu_id) && i_pupu_id.animation_id() != 0xFFU @@ -2795,10 +2833,10 @@ void fme::filter_window::process_combine( } void fme::filter_window::process_combine( - toml::table *coo_table, - const std::vector &unique_pupu_ids, - fme::filter_window::OuterFilter outer_filter, - fme::filter_window::PupuMatchPredicate match_pred) const + toml::table *coo_table, + const std::vector &unique_pupu_ids, + fme::filter_window::OuterFilter outer_filter, + fme::filter_window::PupuMatchPredicate match_pred) const { if (!coo_table) { @@ -2827,7 +2865,7 @@ void fme::filter_window::process_combine( !m_checkallow_same_blend && std::ranges::any_of( temp_filter.value(), - [](const ff_8::PupuID &pupu_id) + [](const open_viii::graphics::background::PupuID &pupu_id) { return pupu_id.blend_mode() != open_viii::graphics::background::BlendModeT::none; @@ -2837,16 +2875,17 @@ void fme::filter_window::process_combine( } // debating on this being here. - if (std::ranges::all_of( - temp_filter.value(), - [&](const ff_8::PupuID &pupu_id) - { - if (is_excluded(pupu_id)) - { - return false; - } - return pupu_id.offset() > 0; - })) + if ( + std::ranges::all_of( + temp_filter.value(), + [&](const open_viii::graphics::background::PupuID &pupu_id) + { + if (is_excluded(pupu_id)) + { + return false; + } + return pupu_id.offset() > 0; + })) { // mark for deletion m_remove_queue.emplace_back(key); diff --git a/src/opengl/main/gui/filter_window.hpp b/src/opengl/main/gui/filter_window.hpp index 7ed5713b..cfd464e0 100644 --- a/src/opengl/main/gui/filter_window.hpp +++ b/src/opengl/main/gui/filter_window.hpp @@ -21,10 +21,12 @@ struct table_move }; struct filter_window { - using OuterFilter = std::move_only_function< - bool(const ff_8::PupuID &, const std::span)>; - using PupuMatchPredicate = std::move_only_function< - bool(const ff_8::PupuID &, const ff_8::PupuID &)>; + using OuterFilter = std::move_only_function)>; + using PupuMatchPredicate = std::move_only_function; filter_window( std::weak_ptr, std::weak_ptr); @@ -55,8 +57,8 @@ struct filter_window [[nodiscard]] bool begin_window(const std::shared_ptr &) const; [[nodiscard]] bool contains_key_recursive(const toml::table *tbl) const; void handle_remove_queue( - const std::shared_ptr &, - const std::shared_ptr &) const; + const std::shared_ptr &, + const std::shared_ptr &) const; void handle_rename_queue( const std::shared_ptr &, const std::shared_ptr &) const; @@ -73,9 +75,10 @@ struct filter_window const std::shared_ptr &) const; [[nodiscard]] int calc_column_count(float) const; void select_file( - const std::string &, - const std::shared_ptr &) const; - [[nodiscard]] std::vector get_unused_ids() const; + const std::string &, + const std::shared_ptr &) const; + [[nodiscard]] std::vector + get_unused_ids() const; [[nodiscard]] std::optional prev_key() const; [[nodiscard]] std::optional next_key() const; void draw_thumbnail_label(const std::string &) const; @@ -163,13 +166,14 @@ struct filter_window const std::shared_ptr &, const std::string &) const; - [[nodiscard]] bool is_excluded(const ff_8::PupuID &) const; - void process_combine( - const std::shared_ptr &, - const std::shared_ptr &) const; + [[nodiscard]] bool + is_excluded(const open_viii::graphics::background::PupuID &) const; + void process_combine( + const std::shared_ptr &, + const std::shared_ptr &) const; void process_combine( toml::table *, - const std::vector &, + const std::vector &, OuterFilter, PupuMatchPredicate) const; diff --git a/src/opengl/main/gui/gui.cpp b/src/opengl/main/gui/gui.cpp index 8a8774de..ffa3e5bb 100644 --- a/src/opengl/main/gui/gui.cpp +++ b/src/opengl/main/gui/gui.cpp @@ -605,12 +605,13 @@ void gui::tile_conflicts_panel() } format_imgui_text( "index count: {}", std::ranges::size(conflict_group)); - if (ImGui::BeginTable( - "##table_overlaps", - count_per_row, - ImGuiTableFlags_SizingStretchProp - | ImGuiTableFlags_NoPadOuterX - | ImGuiTableFlags_NoPadInnerX)) + if ( + ImGui::BeginTable( + "##table_overlaps", + count_per_row, + ImGuiTableFlags_SizingStretchProp + | ImGuiTableFlags_NoPadOuterX + | ImGuiTableFlags_NoPadInnerX)) { for (const auto index : conflict_group) @@ -758,12 +759,13 @@ void gui::selected_tiles_panel() { const auto &original_tile = original_tiles[i]; const auto &working_tile = working_tiles[i]; - if (collapsing_tile_info( - m_map_sprite, - original_tile, - working_tile, - {}, - i)) + if ( + collapsing_tile_info( + m_map_sprite, + original_tile, + working_tile, + {}, + i)) { remove_index = i; } @@ -912,8 +914,9 @@ void gui::background_color_picker() static constexpr const auto flags = /*ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV |*/ ImGuiColorEditFlags_DisplayHex; - if (ImGui::ColorEdit3( - gui_labels::background.data(), clear_color_f.data(), flags)) + if ( + ImGui::ColorEdit3( + gui_labels::background.data(), clear_color_f.data(), flags)) { m_selections->get() = { clear_color_f[0], clear_color_f[1], clear_color_f[2] }; @@ -926,8 +929,9 @@ void gui::background_color_picker() HasFlag(bg_settings, BackgroundSettings::TwoColors) && !HasFlag(bg_settings, BackgroundSettings::Solid)) { - if (ImGui::ColorEdit3( - gui_labels::background2.data(), clear_color_f2.data(), flags)) + if ( + ImGui::ColorEdit3( + gui_labels::background2.data(), clear_color_f2.data(), flags)) { m_selections->get() = { clear_color_f2[0], clear_color_f2[1], clear_color_f2[2] }; @@ -1215,8 +1219,8 @@ void gui::combo_coo() } constexpr static auto values = open_viii::LangCommon::to_array(); static const auto strings = values | std::views::transform(AsString{}) - | std::ranges::to(); - const auto gcc = GenericCombo( + | std::ranges::to(); + const auto gcc = GenericCombo( gui_labels::language, values, strings, @@ -1295,8 +1299,9 @@ void gui::combo_field() { return {}; } - if (const auto it = std::ranges::find(maplist, name); - it == std::ranges::end(maplist)) + if ( + const auto it = std::ranges::find(maplist, name); + it == std::ranges::end(maplist)) { return fmt::format("{:<8}", name); } @@ -1401,9 +1406,10 @@ void gui::refresh_map_swizzle() } void gui::checkbox_map_swizzle() { - if (ImGui::Checkbox( - gui_labels::swizzle.data(), - &m_selections->get())) + if ( + ImGui::Checkbox( + gui_labels::swizzle.data(), + &m_selections->get())) { refresh_map_swizzle(); } @@ -1428,9 +1434,10 @@ void gui::checkbox_map_disable_blending() { if (!m_selections->get()) { - if (ImGui::Checkbox( - gui_labels::disable_blending.data(), - &m_selections->get())) + if ( + ImGui::Checkbox( + gui_labels::disable_blending.data(), + &m_selections->get())) { refresh_map_disable_blending(); } @@ -1449,9 +1456,10 @@ void gui::checkbox_map_disable_blending() tool_tip(gui_labels::forced_on_while_swizzled); ImGui::EndDisabled(); } - if (ImGui::Checkbox( - gui_labels::force_reloading_of_textures.data(), - &m_selections->get())) + if ( + ImGui::Checkbox( + gui_labels::force_reloading_of_textures.data(), + &m_selections->get())) { m_selections->update(); } @@ -1462,9 +1470,10 @@ void gui::checkbox_map_disable_blending() if (!m_selections->get()) { - if (ImGui::Checkbox( - gui_labels::force_rendering_of_map.data(), - &m_selections->get())) + if ( + ImGui::Checkbox( + gui_labels::force_rendering_of_map.data(), + &m_selections->get())) { m_selections->update(); } @@ -1485,8 +1494,9 @@ void gui::checkbox_map_disable_blending() } - if (ImGui::Checkbox( - "Draw Pupu Mask", &m_selections->get())) + if ( + ImGui::Checkbox( + "Draw Pupu Mask", &m_selections->get())) { m_selections->update(); } @@ -1508,9 +1518,10 @@ void gui::refresh_mim_palette_texture() } void gui::checkbox_mim_palette_texture() { - if (ImGui::Checkbox( - gui_labels::draw_palette_texture.data(), - &m_selections->get())) + if ( + ImGui::Checkbox( + gui_labels::draw_palette_texture.data(), + &m_selections->get())) { refresh_mim_palette_texture(); } @@ -1622,10 +1633,11 @@ void gui::help_menu() return; } const auto end_menu = glengine::ScopeGuard(&ImGui::EndMenu); - if (ImGui::MenuItem( - gui_labels::DisplayKeyboardShortcutsWindow.data(), - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::DisplayKeyboardShortcutsWindow.data(), + nullptr, + &m_selections->get())) { m_selections->update(); } @@ -1638,22 +1650,25 @@ void gui::windows_menu() return; } const auto end_menu = glengine::ScopeGuard(&ImGui::EndMenu); - if (ImGui::MenuItem( - gui_labels::display_control_panel_window.data(), - "Control + P", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_control_panel_window.data(), + "Control + P", + &m_selections->get())) { m_selections->update(); } - if (ImGui::MenuItem( - "ImGui Demo Window", std::nullptr_t{}, &toggle_imgui_demo_window)) + if ( + ImGui::MenuItem( + "ImGui Demo Window", std::nullptr_t{}, &toggle_imgui_demo_window)) { } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::display_field_file_window.data(), - "Control + F", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_field_file_window.data(), + "Control + F", + &m_selections->get())) { m_selections->update(); } @@ -1661,10 +1676,11 @@ void gui::windows_menu() { return; } - if (ImGui::MenuItem( - gui_labels::batch_operation_window.data(), - "Control + B", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::batch_operation_window.data(), + "Control + B", + &m_selections->get())) { m_selections->update(); } @@ -1675,52 +1691,58 @@ void gui::windows_menu() // m_selections->update(); // } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::display_history.data(), - "Control + H", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_history.data(), + "Control + H", + &m_selections->get())) { m_selections->update(); } - if (ImGui::MenuItem( - "Display Textures", - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + "Display Textures", + nullptr, + &m_selections->get())) { m_selections->update(); } - if (ImGui::MenuItem( - "Display Image Compare", - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + "Display Image Compare", + nullptr, + &m_selections->get())) { m_selections->update(); } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::display_draw_window.data(), - "Control + D", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_draw_window.data(), + "Control + D", + &m_selections->get())) { m_selections->update(); } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::display_custom_paths_window.data(), - "Control + U", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_custom_paths_window.data(), + "Control + U", + &m_selections->get())) { m_selections->update(); } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::deswizzle_toml_editor.data(), - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::deswizzle_toml_editor.data(), + nullptr, + &m_selections->get())) { m_selections->update(); } @@ -1738,11 +1760,12 @@ void gui::edit_menu() const auto end_menu = glengine::ScopeGuard(&ImGui::EndMenu); if (map_test()) { - if (ImGui::MenuItem( - gui_labels::undo.data(), - "Control + Z", - false, - m_map_sprite->undo_enabled())) + if ( + ImGui::MenuItem( + gui_labels::undo.data(), + "Control + Z", + false, + m_map_sprite->undo_enabled())) { m_map_sprite->undo(); } @@ -1753,11 +1776,12 @@ void gui::edit_menu() = m_map_sprite->current_undo_description(); tool_tip(description); } - if (ImGui::MenuItem( - gui_labels::redo.data(), - "Control + Y", - false, - m_map_sprite->redo_enabled())) + if ( + ImGui::MenuItem( + gui_labels::redo.data(), + "Control + Y", + false, + m_map_sprite->redo_enabled())) { m_map_sprite->redo(); } @@ -1768,27 +1792,30 @@ void gui::edit_menu() tool_tip(description); } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::undo_all.data(), - "Shift + Control + Z", - false, - m_map_sprite->undo_enabled())) + if ( + ImGui::MenuItem( + gui_labels::undo_all.data(), + "Shift + Control + Z", + false, + m_map_sprite->undo_enabled())) { m_map_sprite->undo_all(); } - if (ImGui::MenuItem( - gui_labels::redo_all.data(), - "Shift + Control + Y", - false, - m_map_sprite->redo_enabled())) + if ( + ImGui::MenuItem( + gui_labels::redo_all.data(), + "Shift + Control + Y", + false, + m_map_sprite->redo_enabled())) { m_map_sprite->redo_all(); } ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::display_history.data(), - "Control + H", - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::display_history.data(), + "Control + H", + &m_selections->get())) { m_selections->update(); } @@ -1817,8 +1844,9 @@ void gui::edit_menu() { bool care_not = m_selections->get() == mode; - if (ImGui::MenuItem( - str.data(), nullptr, &care_not, !care_not)) + if ( + ImGui::MenuItem( + str.data(), nullptr, &care_not, !care_not)) { if ( m_selections->get() @@ -1853,8 +1881,9 @@ void gui::edit_menu() bool care_not = m_selections->get() == mode; - if (ImGui::MenuItem( - str.data(), nullptr, &care_not, !care_not)) + if ( + ImGui::MenuItem( + str.data(), nullptr, &care_not, !care_not)) { if ( m_selections->get() @@ -1906,11 +1935,12 @@ void gui::edit_menu() ImGui::EndDisabled(); } - if (ImGui::MenuItem( - gui_labels::force_reloading_of_textures.data(), - nullptr, - &m_selections - ->get())) + if ( + ImGui::MenuItem( + gui_labels::force_reloading_of_textures.data(), + nullptr, + &m_selections + ->get())) { m_selections ->update(); @@ -1924,11 +1954,12 @@ void gui::edit_menu() if (!m_selections ->get()) { - if (ImGui::MenuItem( - gui_labels::force_rendering_of_map.data(), - nullptr, - &m_selections - ->get())) + if ( + ImGui::MenuItem( + gui_labels::force_rendering_of_map.data(), + nullptr, + &m_selections + ->get())) { m_selections ->update(); @@ -1954,10 +1985,11 @@ void gui::edit_menu() if (mim_test()) { - if (ImGui::MenuItem( - gui_labels::draw_palette_texture.data(), - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::draw_palette_texture.data(), + nullptr, + &m_selections->get())) { refresh_mim_palette_texture(); } @@ -1969,10 +2001,11 @@ void gui::edit_menu() ImGui::Separator(); - if (ImGui::MenuItem( - gui_labels::draw_tile_grid.data(), - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::draw_tile_grid.data(), + nullptr, + &m_selections->get())) { spdlog::info( "selections_draw_grid: {}", @@ -1985,10 +2018,11 @@ void gui::edit_menu() (map_test() && m_selections->get()) || (mim_test() && !m_selections->get())) { - if (ImGui::MenuItem( - gui_labels::draw_texture_page_grid.data(), - nullptr, - &m_selections->get())) + if ( + ImGui::MenuItem( + gui_labels::draw_texture_page_grid.data(), + nullptr, + &m_selections->get())) { spdlog::info( "selections_draw_texture_page_grid: {}", @@ -2001,11 +2035,11 @@ void gui::edit_menu() if (map_test()) { - if (ImGui::MenuItem( - gui_labels::draw_tile_conflict_rects.data(), - nullptr, - &m_selections - ->get())) + if ( + ImGui::MenuItem( + gui_labels::draw_tile_conflict_rects.data(), + nullptr, + &m_selections->get())) { spdlog::info( "selections_draw_tile_conflict_rects: {}", @@ -2032,8 +2066,9 @@ void gui::edit_menu() - 1; static constexpr int max_power = 8; static constexpr int min_power = 0; - if (ImGui::SliderInt( - "Checkerboard Scale", &exponent, min_power, max_power)) + if ( + ImGui::SliderInt( + "Checkerboard Scale", &exponent, min_power, max_power)) { m_selections->get() = static_cast(1 << exponent); @@ -2064,10 +2099,9 @@ void gui::edit_menu() constexpr int columns = 2; format_imgui_wrapped_text( "Hold Control to set Secondary Background Color"); - if (ImGui::BeginTable( - "##ColorTable", - columns, - ImGuiTableFlags_SizingStretchSame)) + if ( + ImGui::BeginTable( + "##ColorTable", columns, ImGuiTableFlags_SizingStretchSame)) { for (auto &&[color_value, color_name] : zip_view) { @@ -2129,10 +2163,11 @@ void gui::edit_menu() /*ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV |*/ ImGuiColorEditFlags_DisplayHex; - if (ImGui::ColorPicker3( - "##Choose Primary Background Color", - clear_color_f.data(), - flags)) + if ( + ImGui::ColorPicker3( + "##Choose Primary Background Color", + clear_color_f.data(), + flags)) { m_selections->get() = { clear_color_f[0], clear_color_f[1], @@ -2146,10 +2181,11 @@ void gui::edit_menu() HasFlag(bg_settings, BackgroundSettings::TwoColors) && !HasFlag(bg_settings, BackgroundSettings::Solid)) { - if (ImGui::ColorPicker3( - "##Choose Secondary Background Color", - clear_color_f2.data(), - flags)) + if ( + ImGui::ColorPicker3( + "##Choose Secondary Background Color", + clear_color_f2.data(), + flags)) { m_selections->get() = { clear_color_f2[0], clear_color_f2[1], @@ -2184,8 +2220,8 @@ void gui::edit_menu() { const bool selected = filter.value() == value; bool checked = selected && filter.enabled(); - if (ImGui::MenuItem( - str.data(), nullptr, &checked)) + if ( + ImGui::MenuItem(str.data(), nullptr, &checked)) { if (selected) { @@ -2309,8 +2345,9 @@ void gui::browse_buttons() m_selections->update(); if (selected) { - if (std::ranges::empty( - m_selections->get())) + if ( + std::ranges::empty( + m_selections->get())) { m_selections->get() = ""; } @@ -2338,12 +2375,13 @@ void gui::file_menu() { const auto end_menu1 = glengine::ScopeGuard(&ImGui::EndMenu); menuitem_locate_ff8(); - if (ImGui::MenuItem( - gui_labels::explore.data(), - nullptr, - nullptr, - !std::ranges::empty( - m_selections->get()))) + if ( + ImGui::MenuItem( + gui_labels::explore.data(), + nullptr, + nullptr, + !std::ranges::empty( + m_selections->get()))) { open_directory(m_selections->get()); } @@ -2351,8 +2389,9 @@ void gui::file_menu() { tool_tip(gui_labels::explore_tooltip); } - if (std::ranges::empty( - m_selections->get())) + if ( + std::ranges::empty( + m_selections->get())) { return; } @@ -2370,11 +2409,12 @@ void gui::file_menu() = path == m_selections->get(); ImGui::TableNextColumn(); ImGui::SetNextItemAllowOverlap(); - if (ImGui::MenuItem( - path.string().data(), - nullptr, - &is_checked, - !is_checked)) + if ( + ImGui::MenuItem( + path.string().data(), + nullptr, + &is_checked, + !is_checked)) { m_selections->get() = path; refresh_path(); @@ -2384,9 +2424,10 @@ void gui::file_menu() const float button_size = ImGui::GetFrameHeight(); const auto _ = PushPopID(); - if (ImGui::Button( - ICON_FA_FOLDER_OPEN, - ImVec2{ button_size, button_size })) + if ( + ImGui::Button( + ICON_FA_FOLDER_OPEN, + ImVec2{ button_size, button_size })) { open_directory(path); } @@ -2396,8 +2437,9 @@ void gui::file_menu() } ImGui::SameLine(); - if (ImGui::Button( - ICON_FA_TRASH, ImVec2{ button_size, button_size })) + if ( + ImGui::Button( + ICON_FA_TRASH, ImVec2{ button_size, button_size })) { delete_me = index; // ImGui::CloseCurrentPopup(); @@ -2426,9 +2468,9 @@ void gui::file_menu() m_selections->update(); if (selected) { - if (std::ranges::empty( - m_selections - ->get())) + if ( + std::ranges::empty( + m_selections->get())) { m_selections->get() = ""; } @@ -2461,8 +2503,9 @@ void gui::file_menu() { bool is_checked = value == m_selections->get(); - if (ImGui::MenuItem( - string.data(), nullptr, &is_checked, !is_checked)) + if ( + ImGui::MenuItem( + string.data(), nullptr, &is_checked, !is_checked)) { m_selections->get() = value; refresh_coo(); @@ -2530,8 +2573,9 @@ void gui::file_menu() std::uint8_t i = 0; const auto table_cell = [&](const auto &index, const auto &str) { - if (const auto temp = std::string_view(str).substr(0, 2); - start != temp || (i % cols == 0)) + if ( + const auto temp = std::string_view(str).substr(0, 2); + start != temp || (i % cols == 0)) { start = temp; ImGui::TableNextRow(); @@ -2567,11 +2611,12 @@ void gui::file_menu() ImU32{ colors::Button });// Make the selected field // stand out more. } - if (ImGui::MenuItem( - str.c_str(), - nullptr, - const_cast(&checked), - !checked)) + if ( + ImGui::MenuItem( + str.c_str(), + nullptr, + const_cast(&checked), + !checked)) { m_field_index = static_cast(index); refresh_field(); @@ -2669,8 +2714,9 @@ void gui::file_menu() bool selected = TomlPath == path; ImGui::TableNextColumn(); ImGui::SetNextItemAllowOverlap(); - if (ImGui::MenuItem( - path.string().c_str(), nullptr, &selected)) + if ( + ImGui::MenuItem( + path.string().c_str(), nullptr, &selected)) { m_map_sprite->clear_toml_cached_framebuffers(); if (selected) @@ -2687,9 +2733,9 @@ void gui::file_menu() } ImGui::TableNextColumn(); const auto _ = PushPopID(); - if (ImGui::Button( - ICON_FA_TRASH, - ImVec2{ button_size, button_size })) + if ( + ImGui::Button( + ICON_FA_TRASH, ImVec2{ button_size, button_size })) { delete_me = index; // ImGui::CloseCurrentPopup(); @@ -2835,8 +2881,9 @@ void gui::menu_swizzle_as_one_image_paths() }, [&]() { - if (m_map_sprite->filter() - .enabled()) + if ( + m_map_sprite->filter() + .enabled()) { m_map_sprite->filter() .update( @@ -3040,9 +3087,10 @@ void gui::menu_map_paths() { if (m_map_sprite->filter().enabled()) { - if (const auto paths - = fme::generate_map_paths(m_selections, *m_map_sprite)(); - !std::ranges::empty(paths)) + if ( + const auto paths + = fme::generate_map_paths(m_selections, *m_map_sprite)(); + !std::ranges::empty(paths)) { m_map_sprite->load_map( paths.front());// grab the first match. @@ -3371,8 +3419,9 @@ void gui::directory_browser_display() update_path(); if (changed) { - if (m_map_sprite->filter() - .enabled()) + if ( + m_map_sprite->filter() + .enabled()) { m_map_sprite->filter() .get() @@ -3907,9 +3956,10 @@ void gui::bind_shortcuts() || test.starts_with("ma"sv) || test == "ggroad4"sv; }; - if (const ImGuiKeyChord escapeChord = (ImGuiKey_Escape); - ImGui::Shortcut(escapeChord, flags) - || ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_A, flags)) + if ( + const ImGuiKeyChord escapeChord = (ImGuiKey_Escape); + ImGui::Shortcut(escapeChord, flags) + || ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_A, flags)) { if (!m_filter_window.shortcut(escapeChord)) { @@ -3991,14 +4041,14 @@ void gui::bind_shortcuts() // Undo All: Ctrl+Shift+Z - else if (ImGui::Shortcut( - ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Z, flags)) + else if ( + ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Z, flags)) { m_map_sprite->undo_all(); } // Redo All: Ctrl+Shift+Y - else if (ImGui::Shortcut( - ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Y, flags)) + else if ( + ImGui::Shortcut(ImGuiMod_Ctrl | ImGuiMod_Shift | ImGuiKey_Y, flags)) { m_map_sprite->redo_all(); } @@ -4018,8 +4068,9 @@ void gui::bind_shortcuts() m_selections->get() ^= true; m_selections->update(); } - else if (const ImGuiKeyChord selectAllChord = (ImGuiMod_Ctrl | ImGuiKey_A); - ImGui::Shortcut(selectAllChord, flags)) + else if ( + const ImGuiKeyChord selectAllChord = (ImGuiMod_Ctrl | ImGuiKey_A); + ImGui::Shortcut(selectAllChord, flags)) { if (!m_filter_window.shortcut(selectAllChord)) { @@ -4027,8 +4078,9 @@ void gui::bind_shortcuts() } } // todo imports window conflicts with inverse selection - else if (const ImGuiKeyChord invertChord = (ImGuiMod_Ctrl | ImGuiKey_I); - ImGui::Shortcut(invertChord, flags)) + else if ( + const ImGuiKeyChord invertChord = (ImGuiMod_Ctrl | ImGuiKey_I); + ImGui::Shortcut(invertChord, flags)) { if (!m_filter_window.shortcut(invertChord)) { @@ -4150,21 +4202,24 @@ gui::gui(GLFWwindow *const window) IM_ASSERT(ImGui::GetCurrentContext() != nullptr); // 2. Configure ImGui (optional but common) - ImGuiIO &imgui_io = ImGui::GetIO(); - std::error_code error_code = {}; - + ImGuiIO &imgui_io = ImGui::GetIO(); + std::error_code error_code = {}; - // static const auto path = (std::filesystem::current_path(error_code) / "res" + + // static const auto path = (std::filesystem::current_path(error_code) / + // "res" // / "field-map-editor_imgui.ini") // .string(); - auto console_logger = spdlog::get(""); + auto console_logger = spdlog::get(""); static const auto path = (getAppConfigDir() / "imgui.ini").string(); spdlog::info("Imgui Confg: \"{}\"", path); console_logger->info("Imgui Confg: \"{}\"", path); imgui_io.ConfigFlags = bitwise_or(imgui_io.ConfigFlags, ImGuiConfigFlags_DockingEnable); +#ifdef _MSC_VER imgui_io.ConfigFlags = bitwise_or(imgui_io.ConfigFlags, ImGuiConfigFlags_ViewportsEnable); +#endif imgui_io.IniFilename = path.c_str(); if (error_code) { @@ -4508,9 +4563,10 @@ void gui::combo_map_path() // below if changed if (m_map_sprite->filter().enabled()) { - if (const auto paths - = fme::generate_map_paths(m_selections, *m_map_sprite)(); - !std::ranges::empty(paths)) + if ( + const auto paths + = fme::generate_map_paths(m_selections, *m_map_sprite)(); + !std::ranges::empty(paths)) { m_map_sprite->load_map(paths.front());// grab the first match. } diff --git a/src/opengl/main/map_sprite.cpp b/src/opengl/main/map_sprite.cpp index 5e8bcf1a..6fe1b6ad 100644 --- a/src/opengl/main/map_sprite.cpp +++ b/src/opengl/main/map_sprite.cpp @@ -80,8 +80,9 @@ map_sprite::map_sprite( if (m_filters.enabled()) { - if (const auto paths = ps.generate_map_paths(".map"); - !std::ranges::empty(paths)) + if ( + const auto paths = ps.generate_map_paths(".map"); + !std::ranges::empty(paths)) { load_map(paths.front(), true);// grab the first match. } @@ -343,8 +344,8 @@ const glengine::Texture *map_sprite::get_texture( return &m_texture->at(index); } -glengine::Texture * - map_sprite::get_texture_mutable(const ff_8::PupuID &pupu) const +glengine::Texture *map_sprite::get_texture_mutable( + const open_viii::graphics::background::PupuID &pupu) const { const auto &values = original_unique_pupu(); auto it = std::ranges::find(values, pupu); @@ -366,7 +367,8 @@ glengine::Texture * return nullptr; } -const glengine::Texture *map_sprite::get_texture(const ff_8::PupuID &pupu) const +const glengine::Texture *map_sprite::get_texture( + const open_viii::graphics::background::PupuID &pupu) const { return (get_texture_mutable(pupu)); } @@ -420,7 +422,8 @@ void map_sprite::queue_texture_loading() const // Deswizzling is enabled; load textures based on PupuIDs in order std::ranges::for_each( working_unique_pupu(), - [&, pos = size_t{}](const ff_8::PupuID &pupu) mutable + [&, pos = size_t{}]( + const open_viii::graphics::background::PupuID &pupu) mutable { future_of_futures.push_back( load_deswizzle_textures(pupu, pos)); @@ -563,14 +566,15 @@ void map_sprite::consume_futures(std::vector> &futures) bool map_sprite::fallback_textures() const { - if (std::ranges::all_of( - *m_texture.get(), - [](const glengine::Texture &texture) - { - const auto size = texture.get_size(); - // spdlog::info("{}", size); - return size.x == 0 || size.y == 0; - })) + if ( + std::ranges::all_of( + *m_texture.get(), + [](const glengine::Texture &texture) + { + const auto size = texture.get_size(); + // spdlog::info("{}", size); + return size.x == 0 || size.y == 0; + })) { if (m_filters.enabled()) { @@ -625,7 +629,7 @@ std::future> map_sprite::load_mim_textures( +palette); return { std::async( std::launch::async, - [ =, + [=, weak_ptr = std::weak_ptr(m_texture)]() -> std::future { spdlog::debug( @@ -645,8 +649,8 @@ std::future> map_sprite::load_mim_textures( } std::future> map_sprite::load_deswizzle_textures( - const ff_8::PupuID pupu, - const size_t pos) const + const open_viii::graphics::background::PupuID pupu, + const size_t pos) const { if (pos >= MAX_TEXTURES) { @@ -1031,10 +1035,11 @@ void map_sprite::update_position( std::set failures = {}; const auto &unique_pupu_ids = working_unique_pupu(); std::uint16_t z = 0; - const auto draw_one_tile = [&]( - [[maybe_unused]] const auto &tile_const, - const auto &tile, - const ff_8::PupuID pupu_id) + const auto draw_one_tile + = [&]( + [[maybe_unused]] const auto &tile_const, + const auto &tile, + const open_viii::graphics::background::PupuID pupu_id) { if (tile.z() != z && !m_settings.draw_swizzle) { @@ -1196,8 +1201,9 @@ void map_sprite::update_position( spdlog::trace("UV max: ({}, {})", quad.uv_max.x, quad.uv_max.y); const auto find_id = [&]() { - if (const auto it = std::ranges::find(unique_pupu_ids, pupu_id); - it != std::ranges::end(unique_pupu_ids)) + if ( + const auto it = std::ranges::find(unique_pupu_ids, pupu_id); + it != std::ranges::end(unique_pupu_ids)) { return static_cast( it - std::ranges::begin(unique_pupu_ids)); @@ -1647,8 +1653,9 @@ std::pair< const std::string &in_maskname) -> std::expected { - if (auto it = m_full_filename_textures->find(in_maskname); - it != m_full_filename_textures->end()) + if ( + auto it = m_full_filename_textures->find(in_maskname); + it != m_full_filename_textures->end()) { spdlog::debug( "{}:{} Mask chosen external mask png id: {}, " @@ -1844,7 +1851,7 @@ void map_sprite::process_post_op_entries( // Find the element with the largest count among the matching // ones - auto best_it = std::ranges::max_element( + auto best_it = std::ranges::max_element( matching, [](const PupuOpEntry &a, const PupuOpEntry &b) { return a.count < b.count; }); @@ -1863,8 +1870,9 @@ void map_sprite::process_post_op_entries( const auto size = best_it->main_texture.get_size(); - if (const auto t_size = target_texture->get_size(); - t_size.x != 0 && t_size.y != 0) + if ( + const auto t_size = target_texture->get_size(); + t_size.x != 0 && t_size.y != 0) { spdlog::error( "{}:{} target_texture is in use.", __FILE__, __LINE__); @@ -2108,14 +2116,14 @@ void map_sprite::resize_render_texture() const { return; } - auto filtered_textures = *(m_texture.get()) - | std::views::filter( - [](const auto &texture) - { + auto filtered_textures = *(m_texture.get()) + | std::views::filter( + [](const auto &texture) + { const auto &size = texture.get_size(); return size.x != 0 && size.y != 0; - }); - const auto check_size = [this]() + }); + const auto check_size = [this]() { static const GLint max_size = []() { @@ -2167,10 +2175,11 @@ void map_sprite::resize_render_texture() const { m_render_framebuffer->set_scale(1U); } - if (const std::uint16_t tmp_scale - = m_imported_tile_size / map_sprite::TILE_SIZE; - m_using_imported_texture - && std::cmp_less(m_render_framebuffer->scale(), tmp_scale)) + if ( + const std::uint16_t tmp_scale + = m_imported_tile_size / map_sprite::TILE_SIZE; + m_using_imported_texture + && std::cmp_less(m_render_framebuffer->scale(), tmp_scale)) { m_render_framebuffer->set_scale(tmp_scale); } @@ -2249,20 +2258,23 @@ const ff_8::all_unique_values_and_strings &map_sprite::uniques() const } -const std::vector &map_sprite::working_pupu() const +const std::vector & + map_sprite::working_pupu() const { // side effect. we wait till pupu is needed than we refresh it. m_map_group.maps.refresh_working_all(); return m_map_group.maps.working_pupu(); } -const std::vector &map_sprite::original_pupu() const +const std::vector & + map_sprite::original_pupu() const { // side effect. we wait till pupu is needed than we refresh it. m_map_group.maps.refresh_original_all(); return m_map_group.maps.original_pupu(); } -const std::vector &map_sprite::working_unique_pupu() const +const std::vector & + map_sprite::working_unique_pupu() const { // side effect. we wait till pupu is needed than we refresh it. m_map_group.maps.refresh_working_all(); @@ -2271,7 +2283,7 @@ const std::vector &map_sprite::working_unique_pupu() const std::vector> + open_viii::graphics::background::PupuID>> map_sprite::working_unique_color_pupu() const { // side effect. we wait till pupu is needed than we refresh it. @@ -2282,7 +2294,8 @@ std::vector(); } -const std::vector &map_sprite::original_unique_pupu() const +const std::vector & + map_sprite::original_unique_pupu() const { // side effect. we wait till pupu is needed than we refresh it. m_map_group.maps.refresh_original_all(); @@ -2611,9 +2624,10 @@ const ff_8::MapHistory::nsat_map &map_sprite::working_animation_counts() const // Backup and override current backup for exporting textures. settings_backup backup = get_backup_settings(true); backup.settings->disable_texture_page_shift = false; - if (auto detected_height - = static_cast(get_max_texture_height()); - detected_height == 0) + if ( + auto detected_height + = static_cast(get_max_texture_height()); + detected_height == 0) { return {}; } @@ -2763,10 +2777,7 @@ const ff_8::MapHistory::nsat_map &map_sprite::working_animation_counts() const std::async( std::launch::async, [map = m_map_group.maps.const_working(), - pupu = m_map_group.maps.working_pupu() - | std::views::transform([](const auto &pupu_id) - { return pupu_id.raw(); }) - | std::ranges::to(), + pupu = m_map_group.maps.working_pupu(), path = cpm.replace_tags(keyed_string, selections, selected_path)]() mutable { @@ -2830,7 +2841,7 @@ std::string map_sprite::get_base_name() const const std::string field_name = std::string{ str_to_lower(field->get_base_name()) }; - const std::vector &unique_pupu_ids + const std::vector &unique_pupu_ids = working_unique_pupu();// Get list of unique Pupu IDs const unsigned int max_number_of_texture_pages = 13U;// Reserve space for futures @@ -2840,7 +2851,7 @@ std::string map_sprite::get_base_name() const // Setup an off-screen render texture iRectangle const canvas = m_map_group.maps.const_working().canvas() * m_render_framebuffer->scale(); - const auto specification + const auto specification = glengine::FrameBufferSpecification{ .width = canvas.width(), .height = canvas.height(), .scale @@ -2848,7 +2859,7 @@ std::string map_sprite::get_base_name() const // Loop through each Pupu ID and generate/save textures - for (const ff_8::PupuID &pupu : unique_pupu_ids) + for (const open_viii::graphics::background::PupuID &pupu : unique_pupu_ids) { settings.filters.value() .update(pupu) @@ -2920,12 +2931,12 @@ void map_sprite::save_deswizzle_generate_toml( const std::string field_name = std::string{ str_to_lower(field->get_base_name()) }; - const std::vector &unique_pupu_ids + const std::vector &unique_pupu_ids = working_unique_pupu();// Get list of unique Pupu IDs // Setup an off-screen render texture iRectangle const canvas = m_map_group.maps.const_working().canvas() * m_render_framebuffer->scale(); - const auto specification + const auto specification = glengine::FrameBufferSpecification{ .width = canvas.width(), .height = canvas.height(), .scale @@ -2963,9 +2974,9 @@ void map_sprite::save_deswizzle_generate_toml( filters.update(std::vector{ pupu }) .enable()); auto out_framebuffer = glengine::FrameBuffer{ specification }; - if (generate_texture( - out_framebuffer))// todo make a if would pass filter with - // out generating textures. + if (generate_texture(out_framebuffer))// todo make a if would pass + // filter with out generating + // textures. { toml::table file; const key_value_data cpm @@ -3076,7 +3087,7 @@ void map_sprite::save_deswizzle_generate_toml( // Setup an off-screen render texture iRectangle const canvas = m_map_group.maps.const_working().canvas() * m_render_framebuffer->scale(); - const auto specification + const auto specification = glengine::FrameBufferSpecification{ .width = canvas.width(), .height = canvas.height(), .scale @@ -3116,11 +3127,13 @@ void map_sprite::save_deswizzle_generate_toml( = out_path.parent_path() / (out_path.stem().string() + "_mask" + out_path.extension().string()); spdlog::debug( "Queued image save: mask='{}'", mask_path.string()); - const auto colors_to_pupu = - [&]() -> std::vector> + const auto colors_to_pupu = [&]() + -> std::vector> { - if (selections->get< - ConfigKey::BatchGenerateWhiteOnBlackMask>()) + if ( + selections + ->get()) { return working_unique_color_pupu(); } @@ -3153,7 +3166,7 @@ void map_sprite::save_deswizzle_generate_toml( [[nodiscard]] const std::map< std::string, - std::vector> & + std::vector> & map_sprite::get_deswizzle_combined_textures_pupuids() { return m_cache_framebuffer_pupuids; @@ -3179,14 +3192,15 @@ void map_sprite::save_deswizzle_generate_toml( { return std::unexpected("Not all futures are done!"); } - if (std::ranges::all_of( - *m_texture.get(), - [](const glengine::Texture &texture) - { - const auto size = texture.get_size(); - // spdlog::info("{}", size); - return size.x == 0 || size.y == 0; - })) + if ( + std::ranges::all_of( + *m_texture.get(), + [](const glengine::Texture &texture) + { + const auto size = texture.get_size(); + // spdlog::info("{}", size); + return size.x == 0 || size.y == 0; + })) { return std::unexpected("Textures are not loaded yet!"); } @@ -3263,8 +3277,8 @@ void map_sprite::save_deswizzle_generate_toml( cache_pupuids(it->first, filters); - if (glengine::FrameBuffer fb(specification); - generate_texture(fb)) + if ( + glengine::FrameBuffer fb(specification); generate_texture(fb)) { it->second = std::move(fb);// replace empty optional } @@ -3329,13 +3343,15 @@ void map_sprite::cache_pupuids( // m_cache_framebuffer_pupuids -std::vector map_sprite::generate_deswizzle_combined_pupu_id( - const toml::table *file_table) const +std::vector + map_sprite::generate_deswizzle_combined_pupu_id( + const toml::table *file_table) const { - std::vector result{}; + std::vector result{}; - if (auto pupu_array = (*file_table)["filter_multi_pupu"].as_array(); - pupu_array) + if ( + auto pupu_array = (*file_table)["filter_multi_pupu"].as_array(); + pupu_array) { for (auto &elem : *pupu_array) { @@ -3358,14 +3374,15 @@ std::string map_sprite::generate_deswizzle_combined_tool_tip( std::ostringstream ss{}; ss << *file_table; - if (auto pupu_array = (*file_table)["filter_multi_pupu"].as_array(); - pupu_array) + if ( + auto pupu_array = (*file_table)["filter_multi_pupu"].as_array(); + pupu_array) { for (auto &elem : *pupu_array) { if (auto val = elem.value(); val) { - ff_8::PupuID pupu_id{ *val }; + open_viii::graphics::background::PupuID pupu_id{ *val }; ss << fmt::format( "\n\nPupu ID: {:08X} - {}\n{}\n", @@ -3410,8 +3427,9 @@ open_viii::LangT toml::table &root_table = config; toml::table *field_table = nullptr; - if (auto it_base = root_table.find(field_name); - it_base != root_table.end() && it_base->second.is_table()) + if ( + auto it_base = root_table.find(field_name); + it_base != root_table.end() && it_base->second.is_table()) { field_table = it_base->second.as_table(); } @@ -3426,8 +3444,9 @@ open_viii::LangT ? std::string(open_viii::LangCommon::to_string_3_char(lang)) : "x"; - if (auto it_coo = field_table->find(key); - it_coo != field_table->end() && it_coo->second.is_table()) + if ( + auto it_coo = field_table->find(key); + it_coo != field_table->end() && it_coo->second.is_table()) return it_coo->second.as_table(); return nullptr; @@ -3488,8 +3507,9 @@ toml::table *map_sprite::get_deswizzle_combined_coo_table( toml::table *coo_table = nullptr; - if (auto it_base = root_table.find(field_name); - it_base != root_table.end() && it_base->second.is_table()) + if ( + auto it_base = root_table.find(field_name); + it_base != root_table.end() && it_base->second.is_table()) { field_table = it_base->second.as_table(); } @@ -3521,8 +3541,9 @@ toml::table *map_sprite::get_deswizzle_combined_coo_table( }; const auto get_table_by_coo = [&](const std::string &key) -> toml::table * { - if (auto it_coo = field_table->find(key); - it_coo != field_table->end() && it_coo->second.is_table()) + if ( + auto it_coo = field_table->find(key); + it_coo != field_table->end() && it_coo->second.is_table()) { spdlog::trace("{}:{}, found key!: {}", __FILE__, __LINE__, key); return it_coo->second.as_table(); @@ -3583,9 +3604,10 @@ toml::table *map_sprite::get_deswizzle_combined_coo_table( { continue; } - if (auto key_str = key.str(); - key_str.size() > 4 - && key_str.ends_with(".png"))// todo case insensitive compare? + if ( + auto key_str = key.str(); + key_str.size() > 4 + && key_str.ends_with(".png"))// todo case insensitive compare? { result.emplace_back(std::move(key_str)); } @@ -3612,8 +3634,9 @@ toml::table *map_sprite::get_deswizzle_combined_toml_table( { return nullptr; } - if (auto it_base = coo_table->find(file_name_str); - it_base != coo_table->end() && it_base->second.is_table()) + if ( + auto it_base = coo_table->find(file_name_str); + it_base != coo_table->end() && it_base->second.is_table()) { return it_base->second.as_table(); } @@ -3680,24 +3703,27 @@ toml::table *map_sprite::get_deswizzle_combined_toml_table( coo_table->erase(old_file_name); // Move framebuffer cache - if (auto it_cache = m_cache_framebuffer.find(old_file_name); - it_cache != m_cache_framebuffer.end()) + if ( + auto it_cache = m_cache_framebuffer.find(old_file_name); + it_cache != m_cache_framebuffer.end()) { m_cache_framebuffer[new_file_name] = std::move(it_cache->second); m_cache_framebuffer.erase(it_cache); } // Move tooltip cache - if (auto it_tooltip = m_cache_framebuffer_tooltips.find(old_file_name); - it_tooltip != m_cache_framebuffer_tooltips.end()) + if ( + auto it_tooltip = m_cache_framebuffer_tooltips.find(old_file_name); + it_tooltip != m_cache_framebuffer_tooltips.end()) { m_cache_framebuffer_tooltips[new_file_name] = std::move(it_tooltip->second); m_cache_framebuffer_tooltips.erase(it_tooltip); } - if (auto it_tooltip = m_cache_framebuffer_pupuids.find(old_file_name); - it_tooltip != m_cache_framebuffer_pupuids.end()) + if ( + auto it_tooltip = m_cache_framebuffer_pupuids.find(old_file_name); + it_tooltip != m_cache_framebuffer_pupuids.end()) { m_cache_framebuffer_pupuids[new_file_name] = std::move(it_tooltip->second); @@ -3791,8 +3817,8 @@ toml::table *map_sprite::get_deswizzle_combined_toml_table( void map_sprite::refresh_tooltip(const std::string &file_name) { - if (const auto *table = get_deswizzle_combined_toml_table(file_name); - table) + if ( + const auto *table = get_deswizzle_combined_toml_table(file_name); table) { m_cache_framebuffer_tooltips[file_name] = generate_deswizzle_combined_tool_tip(table); @@ -3858,8 +3884,9 @@ toml::table *map_sprite::add_combine_deswizzle_combined_toml_table( ff_8::filters tmp_filters = { false }; for (const std::string &file_name_str : file_names) { - if (auto it_base = coo_table->find(file_name_str); - it_base != coo_table->end() && it_base->second.is_table()) + if ( + auto it_base = coo_table->find(file_name_str); + it_base != coo_table->end() && it_base->second.is_table()) { tmp_filters.combine(*it_base->second.as_table()); } @@ -3958,10 +3985,11 @@ uint32_t map_sprite::get_max_texture_height() const "{}:{} No textures in m_texture, using default height {}", __FILE__, __LINE__, tex_height); } - if (const auto tex_height_scale = static_cast( - static_cast(m_imported_tile_size >> 4U) << 8U); - m_using_imported_texture - && std::cmp_greater(tex_height_scale, tex_height)) + if ( + const auto tex_height_scale = static_cast( + static_cast(m_imported_tile_size >> 4U) << 8U); + m_using_imported_texture + && std::cmp_greater(tex_height_scale, tex_height)) { tex_height = tex_height_scale; } @@ -4013,10 +4041,10 @@ uint32_t map_sprite::get_max_texture_height() const // fmt::format_string< // std::string_view, // std::string_view, -// ff_8::PupuID> pattern, +// open_viii::graphics::background::PupuID> pattern, // const std::filesystem::path &path, // const std::string_view &field_name, -// const ff_8::PupuID pupu, +// const open_viii::graphics::background::PupuID pupu, // const open_viii::LangT coo) // { // return path @@ -4057,10 +4085,10 @@ uint32_t map_sprite::get_max_texture_height() const // std::filesystem::path map_sprite::save_path( // fmt::format_string< // std::string_view, -// ff_8::PupuID> pattern, +// open_viii::graphics::background::PupuID> pattern, // const std::filesystem::path &path, // const std::string_view &field_name, -// ff_8::PupuID pupu) +// open_viii::graphics::background::PupuID pupu) // { // return path // / fmt::vformat( @@ -4480,9 +4508,9 @@ std::move_only_function()> std::move_only_function()> generate_deswizzle_paths( - std::shared_ptr in_selections, - const map_sprite &in_map_sprite, - const ff_8::PupuID pupu_id) + std::shared_ptr in_selections, + const map_sprite &in_map_sprite, + const open_viii::graphics::background::PupuID pupu_id) { assert(in_selections && "generate_deswizzle_paths: in_selections is null"); // assert(in_map_sprite && "generate_deswizzle_paths: in_map_sprite is diff --git a/src/opengl/main/map_sprite.hpp b/src/opengl/main/map_sprite.hpp index c946beca..9af9f3de 100644 --- a/src/opengl/main/map_sprite.hpp +++ b/src/opengl/main/map_sprite.hpp @@ -39,12 +39,12 @@ namespace fme struct PupuOpEntry { - ff_8::PupuID pupu; - int color_index; - glengine::SubTexture main_texture; - glengine::SubTexture mask_texture; - std::uint32_t count; - float distance; + open_viii::graphics::background::PupuID pupu; + int color_index; + glengine::SubTexture main_texture; + glengine::SubTexture mask_texture; + std::uint32_t count; + float distance; }; enum class DrawError @@ -219,7 +219,8 @@ struct [[nodiscard]] map_sprite// final m_cache_framebuffer = {}; mutable std::map m_cache_framebuffer_tooltips = {}; - mutable std::map> + mutable std:: + map> m_cache_framebuffer_pupuids = {}; mutable ff_8::map_group m_map_group = {}; map_sprite_settings m_settings = {}; @@ -331,11 +332,11 @@ struct [[nodiscard]] map_sprite// final std::pair< std::vector, std::vector> - collect_post_op_entries( - std::tuple< - glengine::PaletteBuffer, - glengine::HistogramBuffer, - glengine::DistanceBuffer> &buffers) const; + collect_post_op_entries( + std::tuple< + glengine::PaletteBuffer, + glengine::HistogramBuffer, + glengine::DistanceBuffer> &buffers) const; void process_post_op_entries( const std::vector &multi_pupu_post_op, @@ -380,10 +381,10 @@ struct [[nodiscard]] map_sprite// final BPPT bpp, std::uint8_t palette, std::uint8_t texture_page) const; - [[nodiscard]] glengine::Texture * - get_texture_mutable(const ff_8::PupuID &pupu) const; + [[nodiscard]] glengine::Texture *get_texture_mutable( + const open_viii::graphics::background::PupuID &pupu) const; [[nodiscard]] const glengine::Texture * - get_texture(const ff_8::PupuID &pupu) const; + get_texture(const open_viii::graphics::background::PupuID &pupu) const; [[nodiscard]] glm::uvec2 get_tile_texture_size(const glengine::Texture *const texture) const; std::expected< @@ -394,21 +395,24 @@ struct [[nodiscard]] map_sprite// final std::expected< void, std::set> - local_draw( - const glengine::FrameBuffer &target_framebuffer, - const glengine::BatchRenderer &target_renderer) const; + local_draw( + const glengine::FrameBuffer &target_framebuffer, + const glengine::BatchRenderer &target_renderer) const; [[nodiscard]] bool draw_imported(const glengine::FrameBuffer &) const; [[nodiscard]] std::string get_base_name() const; [[nodiscard]] const ff_8::all_unique_values_and_strings &uniques() const; - [[nodiscard]] const std::vector &working_unique_pupu() const; + [[nodiscard]] const std::vector & + working_unique_pupu() const; [[nodiscard]] std::vector> + open_viii::graphics::background::PupuID>> working_unique_color_pupu() const; - [[nodiscard]] const std::vector & + [[nodiscard]] const std::vector & original_unique_pupu() const; - [[nodiscard]] const std::vector &original_pupu() const; - [[nodiscard]] const std::vector &working_pupu() const; + [[nodiscard]] const std::vector & + original_pupu() const; + [[nodiscard]] const std::vector & + working_pupu() const; [[nodiscard]] const ff_8::source_tile_conflicts & original_conflicts() const; [[nodiscard]] const ff_8::source_tile_conflicts &working_conflicts() const; @@ -422,14 +426,14 @@ struct [[nodiscard]] map_sprite// final [[nodiscard]] std::uint32_t height() const; [[nodiscard]] map_sprite with_coo(open_viii::LangT coo) const; [[nodiscard]] map_sprite with_field( - WeakField field, - open_viii::LangT coo) const; + WeakField field, + open_viii::LangT coo) const; [[nodiscard]] map_sprite with_filters(ff_8::filters filters) const; [[nodiscard]] bool empty() const; [[nodiscard]] const ff_8::filters &filter() const; [[nodiscard]] map_sprite update( - ff_8::map_group map_group, - bool draw_swizzle) const; + ff_8::map_group map_group, + bool draw_swizzle) const; [[nodiscard]] ff_8::all_unique_values_and_strings get_all_unique_values_and_strings() const; [[nodiscard]] glm::uvec2 get_tile_texture_size_for_import() const; @@ -496,19 +500,19 @@ struct [[nodiscard]] map_sprite// final get_deswizzle_combined_textures_tooltips(); [[nodiscard]] const std::map< std::string, - std::vector> & + std::vector> & get_deswizzle_combined_textures_pupuids(); [[nodiscard]] std::expected< std::map< std::string, std::optional> *, std::string> - get_deswizzle_combined_textures( - const int scale = {}, - const bool force_load = false); + get_deswizzle_combined_textures( + const int scale = {}, + const bool force_load = false); [[nodiscard]] std::string generate_deswizzle_combined_tool_tip( const toml::table *file_table) const; - [[nodiscard]] std::vector + [[nodiscard]] std::vector generate_deswizzle_combined_pupu_id(const toml::table *file_table) const; [[nodiscard]] open_viii::LangT get_used_coo(const fme::FailOverLevels max_failover) const; @@ -549,8 +553,8 @@ struct [[nodiscard]] map_sprite// final load_swizzle_as_one_image_textures( std::optional palette = std::nullopt) const; [[nodiscard]] std::future> load_deswizzle_textures( - const ff_8::PupuID pupu, - const size_t pos) const; + const open_viii::graphics::background::PupuID pupu, + const size_t pos) const; [[nodiscard]] std::future> load_full_filename_textures(const std::string filename) const; [[nodiscard]] std::future> load_mim_textures( @@ -642,10 +646,10 @@ struct [[nodiscard]] map_sprite// final // fmt::format_string< // std::string_view, // std::string_view, - // ff_8::PupuID> pattern, + // open_viii::graphics::background::PupuID> pattern, // const std::filesystem::path &path, // const std::string_view &field_name, - // const ff_8::PupuID pupu, + // const open_viii::graphics::background::PupuID pupu, // const open_viii::LangT coo); // static std::filesystem::path save_path( // fmt::format_string< @@ -666,10 +670,10 @@ struct [[nodiscard]] map_sprite// final // static std::filesystem::path save_path( // fmt::format_string< // std::string_view, - // ff_8::PupuID> pattern, + // open_viii::graphics::background::PupuID> pattern, // const std::filesystem::path &path, // const std::string_view &field_name, - // ff_8::PupuID pupu); + // open_viii::graphics::background::PupuID pupu); [[nodiscard]] std::vector find_intersecting( const open_viii::graphics::background::Map &map, @@ -753,10 +757,11 @@ struct [[nodiscard]] map_sprite// final const auto distance = std::ranges::distance( tiles.begin(), found_iterator); - if (std::cmp_greater( - std::ranges::ssize( - m_map_group.maps.original_pupu()), - distance)) + if ( + std::cmp_greater( + std::ranges::ssize( + m_map_group.maps.original_pupu()), + distance)) { auto pupu_it = m_map_group.maps.original_pupu().cbegin(); @@ -1072,9 +1077,9 @@ std::move_only_function()> std::move_only_function()> generate_deswizzle_paths( - std::shared_ptr in_selections, - const map_sprite &in_map_sprite, - const ff_8::PupuID pupu_id); + std::shared_ptr in_selections, + const map_sprite &in_map_sprite, + const open_viii::graphics::background::PupuID pupu_id); std::move_only_function()> generate_full_filename_paths( diff --git a/src/opengl/main/path_search.cpp b/src/opengl/main/path_search.cpp index 50bd0566..308020db 100644 --- a/src/opengl/main/path_search.cpp +++ b/src/opengl/main/path_search.cpp @@ -39,8 +39,8 @@ std::vector path_search::generate_deswizzle_paths( } std::vector path_search::generate_deswizzle_paths( - const ff_8::PupuID pupu, - const std::string &ext) const + const open_viii::graphics::background::PupuID pupu, + const std::string &ext) const { return generate_paths( @@ -218,8 +218,8 @@ std::vector path_search::generate_map_paths( bool path_search::has_deswizzle_path( - const ff_8::PupuID pupu, - const std::string &ext) const + const open_viii::graphics::background::PupuID pupu, + const std::string &ext) const { return has_deswizzle_path(filters_deswizzle_value_string, pupu, ext); } @@ -229,13 +229,13 @@ bool path_search::has_deswizzle_path( { return std::ranges::any_of( working_unique_pupu, - [&](const ff_8::PupuID pupu) + [&](const open_viii::graphics::background::PupuID pupu) { return has_deswizzle_path(filter_path, pupu, ext); }); } bool path_search::has_deswizzle_path( - const std::filesystem::path &filter_path, - const ff_8::PupuID pupu, - const std::string &ext) const + const std::filesystem::path &filter_path, + const open_viii::graphics::background::PupuID pupu, + const std::string &ext) const { return path_search::has_path( filter_path, @@ -335,8 +335,9 @@ bool path_search::has_swizzle_path( { for (const auto &texture_page : texture_page_id.values()) { - if (has_swizzle_path( - filter_path, texture_page, palette, ext)) + if ( + has_swizzle_path( + filter_path, texture_page, palette, ext)) { return true; } @@ -412,18 +413,18 @@ bool path_search::has_swizzle_as_one_image_path( } for (const auto &palette : palette_set.values()) { - if (has_path( - filter_path, - { .field_name = field_name, - .ext = ext, - .language_code - = opt_coo.has_value() - && opt_coo.value() - != open_viii::LangT::generic - ? opt_coo - : std::nullopt, - .palette = palette }, - selections)) + if ( + has_path( + filter_path, + { .field_name = field_name, + .ext = ext, + .language_code + = opt_coo.has_value() + && opt_coo.value() != open_viii::LangT::generic + ? opt_coo + : std::nullopt, + .palette = palette }, + selections)) { return true; } @@ -506,8 +507,9 @@ std::vector path_search::generate_paths( } auto temp = cpm.replace_tags(*output_pattern, selections, filter_path); - if (const auto test = safedir{ temp }; - !test.is_dir() && test.is_exists()) + if ( + const auto test = safedir{ temp }; + !test.is_dir() && test.is_exists()) { paths.push_back(std::move(temp)); } diff --git a/src/opengl/main/path_search.hpp b/src/opengl/main/path_search.hpp index c2755491..5c0f0074 100644 --- a/src/opengl/main/path_search.hpp +++ b/src/opengl/main/path_search.hpp @@ -2,10 +2,10 @@ #define D32D9952_25B7_4925_A5EB_B8672C65F70C #include "gui/key_value_data.hpp" #include "gui/Selections.hpp" -#include "PupuID.hpp" #include "unique_values.hpp" #include #include +#include #include #include namespace ff_8 @@ -18,12 +18,13 @@ struct path_search OptCoo opt_coo = {}; std::string field_name = {}; std::filesystem::path filters_deswizzle_value_string = {}; - std::filesystem::path filters_full_filename_value_string = {}; - std::filesystem::path filters_swizzle_value_string = {}; - std::filesystem::path filters_swizzle_as_one_image_string = {}; - std::filesystem::path filters_map_value_string = {}; - std::vector working_unique_pupu = {}; - std::vector current_filenames = {}; + std::filesystem::path filters_full_filename_value_string = {}; + std::filesystem::path filters_swizzle_value_string = {}; + std::filesystem::path filters_swizzle_as_one_image_string = {}; + std::filesystem::path filters_map_value_string = {}; + std::vector working_unique_pupu + = {}; + std::vector current_filenames = {}; std:: map> bpp_palette = {}; @@ -36,8 +37,8 @@ struct path_search const std::filesystem::path &path, const std::string &ext) const; [[nodiscard]] std::vector generate_deswizzle_paths( - const ff_8::PupuID pupu, - const std::string &ext = ".png") const; + const open_viii::graphics::background::PupuID pupu, + const std::string &ext = ".png") const; [[nodiscard]] std::vector generate_full_filename_paths(const std::string &) const; @@ -76,8 +77,8 @@ struct path_search const std::string &ext = ".map", const std::string &secondary_output_pattern = "") const; [[nodiscard]] bool has_deswizzle_path( - const ff_8::PupuID pupu, - const std::string &ext = ".png") const; + const open_viii::graphics::background::PupuID pupu, + const std::string &ext = ".png") const; [[nodiscard]] bool has_deswizzle_path( const std::filesystem::path &filter_path, const std::string &ext = ".png") const; @@ -89,9 +90,9 @@ struct path_search const std::filesystem::path &, const std::string &) const; [[nodiscard]] bool has_deswizzle_path( - const std::filesystem::path &filter_path, - const ff_8::PupuID pupu, - const std::string &ext = ".png") const; + const std::filesystem::path &filter_path, + const open_viii::graphics::background::PupuID pupu, + const std::string &ext = ".png") const; [[nodiscard]] bool has_swizzle_path( const std::uint8_t texture_page, std::uint8_t palette, diff --git a/src/opengl/main/save_image_pbo.cpp b/src/opengl/main/save_image_pbo.cpp index 8fb878ab..70d2587d 100644 --- a/src/opengl/main/save_image_pbo.cpp +++ b/src/opengl/main/save_image_pbo.cpp @@ -3,10 +3,10 @@ // #include "save_image_pbo.hpp" #include "formatters.hpp" -#include "PupuID.hpp" #include #include #include +#include #include #include #include @@ -43,12 +43,12 @@ struct Vec4Less * data is read back. */ std::future save_image_pbo( - std::filesystem::path in_path, - glengine::FrameBuffer in_fbo, - const GLenum attachment, + std::filesystem::path in_path, + glengine::FrameBuffer in_fbo, + const GLenum attachment, std::vector> in_color_ids) + open_viii::graphics::background::PupuID>> in_color_ids) { // Backup currently bound framebuffer (restored by your helper) const auto backup_fbo = in_fbo.backup(); @@ -192,10 +192,12 @@ std::future save_image_pbo( reinterpret_cast(pixels.get()), static_cast(w * h)); // For each unique PupuID, create a vector of masks - std::map> masks; + std::map< + open_viii::graphics::background::PupuID, std::vector> + masks; std::set> logged_colors; static std::map conv_cache; - std::map + std::map best_id_cache;// memoizes best id for each pixel color for (const auto &[i, color_in] : span | std::views::enumerate) @@ -203,7 +205,8 @@ std::future save_image_pbo( if (color_in == fme::colors::Transparent) continue; - const auto best_id = [&]() -> ff_8::PupuID + const auto best_id + = [&]() -> open_viii::graphics::background::PupuID { auto cache_it = best_id_cache.find(color_in); if (cache_it != best_id_cache.end()) @@ -281,7 +284,7 @@ std::future save_image_pbo( path.stem().string(), id, path.extension().string()); - int ok = stbi_write_png( + int ok = stbi_write_png( current_path.string().c_str(), w, h, @@ -312,7 +315,7 @@ std::future save_image_texture_pbo( * channels; // Create PBO - GLuint pbo_id = 0; + GLuint pbo_id = 0; glengine::GlCall{}(glGenBuffers, 1, &pbo_id); glengine::GlCall{}(glBindBuffer, GL_PIXEL_PACK_BUFFER, pbo_id); glengine::GlCall{}( @@ -383,7 +386,7 @@ std::future save_image_texture_pbo( * static_cast(channels); // Save PNG - int ok = stbi_write_png( + int ok = stbi_write_png( path.string().c_str(), w, h, @@ -406,7 +409,7 @@ void copy_image_texture_pbo(const glengine::SubTexture &texture) * channels; // Create PBO - GLuint pbo_id = 0; + GLuint pbo_id = 0; glengine::GlCall{}(glGenBuffers, 1, &pbo_id); glengine::GlCall{}(glBindBuffer, GL_PIXEL_PACK_BUFFER, pbo_id); glengine::GlCall{}( diff --git a/src/opengl/main/save_image_pbo.hpp b/src/opengl/main/save_image_pbo.hpp index 4372975d..db938039 100644 --- a/src/opengl/main/save_image_pbo.hpp +++ b/src/opengl/main/save_image_pbo.hpp @@ -5,12 +5,12 @@ #ifndef FIELD_MAP_EDITOR_SAVE_IMAGE_PBO_HPP #define FIELD_MAP_EDITOR_SAVE_IMAGE_PBO_HPP -#include "PupuID.hpp" #include #include #include #include #include +#include namespace fme { /* @@ -30,13 +30,12 @@ namespace fme */ [[nodiscard]] std::future save_image_pbo( - std::filesystem::path in_path, - glengine::FrameBuffer in_fbo, - const GLenum attachment = GL_COLOR_ATTACHMENT0, + std::filesystem::path in_path, + glengine::FrameBuffer in_fbo, + const GLenum attachment = GL_COLOR_ATTACHMENT0, std::vector> in_pupu_ids - = {}); + open_viii::graphics::background::PupuID>> in_pupu_ids = {}); /* * @brief Asynchronously saves an OpenGL texture to an PNG file using a Pixel diff --git a/src/opengl/main/unique_values.hpp b/src/opengl/main/unique_values.hpp index 2393a140..6d073b3f 100644 --- a/src/opengl/main/unique_values.hpp +++ b/src/opengl/main/unique_values.hpp @@ -5,15 +5,15 @@ #ifndef FIELD_MAP_EDITOR_UNIQUE_VALUES_HPP #define FIELD_MAP_EDITOR_UNIQUE_VALUES_HPP #include "formatters.hpp" -#include "open_viii/graphics/background/BlendModeT.hpp" -#include "open_viii/graphics/BPPT.hpp" -#include "PupuID.hpp" #include "tile_operations.hpp" -#include "UniquifyPupu.hpp" #include #include #include #include +#include +#include +#include +#include #include #include #include From d3e83fec687c03fc8b9a0be8b70d0ee57407fa2e Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 15:03:08 -0400 Subject: [PATCH 2/7] Remove local tile_operations implementations and migrate map editor code to use OpenVIII's TileOperations API. Changes: - Delete duplicated tile_operations.hpp implementations from experimental and main code paths - Replace local tile_operations references with open_viii::graphics::background::tile_operations - Include TileOperations.hpp directly where needed - Update tile filters and predicates to use shared OpenVIII types - Fix MoveTiles operation construction by providing explicit TileT template arguments and value casts - Update swizzle/deswizzle tile function definitions to use shared operation types - Migrate filter, sprite, and map operation code to shared tile operation aliases This consolidates tile operation logic into OpenVIII and removes duplicate implementations from Field Map Editor. --- src/opengl/experimental/ff8/Map.hpp | 115 ++++-- src/opengl/experimental/ff8/MapDeswizzle.hpp | 13 +- src/opengl/experimental/ff8/MapDims.hpp | 15 +- src/opengl/experimental/ff8/MapSwizzle.hpp | 9 +- .../experimental/ff8/MapTileAdjustments.hpp | 20 +- .../experimental/ff8/MapUpscaleDeswizzle.hpp | 13 +- .../experimental/ff8/MapUpscaleSwizzle.hpp | 9 +- src/opengl/experimental/ff8/MouseToTilePos.h | 4 +- .../experimental/ff8/SimilarAdjustments.hpp | 4 +- .../experimental/ff8/UniqueTileValues.hpp | 43 ++- .../experimental/ff8/tile_operations.hpp | 253 ------------- src/opengl/main/filter.hpp | 140 ++++--- src/opengl/main/map_operation.cpp | 92 ++--- src/opengl/main/map_sprite.hpp | 20 +- src/opengl/main/tile_operations.hpp | 342 ------------------ src/opengl/main/unique_values.hpp | 30 +- 16 files changed, 321 insertions(+), 801 deletions(-) delete mode 100644 src/opengl/experimental/ff8/tile_operations.hpp delete mode 100644 src/opengl/main/tile_operations.hpp diff --git a/src/opengl/experimental/ff8/Map.hpp b/src/opengl/experimental/ff8/Map.hpp index f1e2a734..a70bf7ee 100644 --- a/src/opengl/experimental/ff8/Map.hpp +++ b/src/opengl/experimental/ff8/Map.hpp @@ -21,7 +21,6 @@ #include "MouseToTilePos.h" #include "OrthographicCameraController.hpp" #include "SimilarAdjustments.hpp" -#include "tile_operations.hpp" #include "TransformedSortedUniqueCopy.hpp" #include "UniqueTileValues.hpp" #include "Window.hpp" @@ -37,6 +36,7 @@ #include #include #include +#include #include #include namespace ff_8 @@ -67,43 +67,74 @@ class [[nodiscard]] MoveTiles using TileT = std::ranges::range_value_t>; std::vector> operations{}; - if constexpr (std::is_same_v< - typename TileFunctions::X, - tile_operations::X>) + if constexpr ( + std::is_same_v< + typename TileFunctions::X, + open_viii::graphics::background::tile_operations::X>) { operations.push_back( - tile_operations::TranslateWithX{ m_released.x, m_pressed.x }); + open_viii::graphics::background::tile_operations:: + TranslateWithX{ + static_cast>(m_released.x), + static_cast>(m_pressed.x) }); } - if constexpr (std::is_same_v< - typename TileFunctions::Y, - tile_operations::Y>) + if constexpr ( + std::is_same_v< + typename TileFunctions::Y, + open_viii::graphics::background::tile_operations::Y>) { operations.push_back( - tile_operations::TranslateWithY{ m_released.y, m_pressed.y }); + open_viii::graphics::background::tile_operations:: + TranslateWithY{ + static_cast>(m_released.y), + static_cast>(m_pressed.y) }); } - if constexpr (std::is_same_v< - typename TileFunctions::X, - tile_operations::SourceX>) + if constexpr ( + std::is_same_v< + typename TileFunctions::X, + open_viii::graphics::background::tile_operations::SourceX>) { operations.push_back( - tile_operations::TranslateWithSourceX{ m_released.x, - m_pressed.x }); + open_viii::graphics::background::tile_operations:: + TranslateWithSourceX{ + static_cast>( + m_released.x), + static_cast>( + m_pressed.x) }); } - if constexpr (std::is_same_v< - typename TileFunctions::Y, - tile_operations::SourceY>) + if constexpr ( + std::is_same_v< + typename TileFunctions::Y, + open_viii::graphics::background::tile_operations::SourceY>) { operations.push_back( - tile_operations::TranslateWithSourceY{ m_released.y, - m_pressed.y }); + open_viii::graphics::background::tile_operations:: + TranslateWithSourceY{ + static_cast>( + m_released.y), + static_cast>( + m_pressed.y) }); } - if constexpr (std::is_same_v< - typename TileFunctions::TexturePage, - tile_operations::TextureId>) + if constexpr ( + std::is_same_v< + typename TileFunctions::TexturePage, + open_viii::graphics::background::tile_operations::TextureId>) { operations.push_back( - tile_operations::WithTextureId{ m_released.z }); + open_viii::graphics::background::tile_operations:: + WithTextureId{ + static_cast>( + m_released.z) }); } GetMapHistory()->copy_working_perform_operation( m_indexes, @@ -148,9 +179,9 @@ class Map const auto stem = std::filesystem::path(GetMapHistory().path) .parent_path() .stem(); - m_swizzle_path = (std::filesystem::path(m_swizzle_path) - / stem.string().substr(0, 2) / stem) - .string(); + m_swizzle_path = (std::filesystem::path(m_swizzle_path) + / stem.string().substr(0, 2) / stem) + .string(); spdlog::debug( "Swizzle Location: \"{}\"", m_swizzle_path.string()); } @@ -342,11 +373,11 @@ class Map .c_str()); tile_button_state = &m_tile_button_state_hover; - if (visit_unsorted_unfiltered_tiles( - common_operation, - MouseTileOverlap< - TileFunctions, - decltype(m_filters)>(tp, m_filters))) + if ( + visit_unsorted_unfiltered_tiles( + common_operation, + MouseTileOverlap( + tp, m_filters))) { GetWindow().trigger_refresh_image(); // m_changed(); @@ -403,8 +434,9 @@ class Map tile_button_state = &m_tile_button_state; last_pos = ImGui::GetCursorPos(); text_width = ImGui::GetItemRectMax().x; - if (visit_unsorted_unfiltered_tiles( - common_operation, m_filters)) + if ( + visit_unsorted_unfiltered_tiles( + common_operation, m_filters)) { GetWindow().trigger_refresh_image(); // m_changed(); @@ -750,7 +782,7 @@ class Map = glm::vec2{ texture.width(), texture.height() }; const float tile_scale = static_cast(texture.height()) / static_cast(GetMim()->get_height()); - const float tile_size = tile_scale * map_dims_statics::TileSize; + const float tile_size = tile_scale * map_dims_statics::TileSize; // glm::vec2(m_mim.get_width(tile.depth()), m_mim.get_height()); return GetMapHistory()->get_original_version_of_working_tile( tile, @@ -794,7 +826,8 @@ class Map { auto f_tiles = tiles - | std::views::filter(tile_operations::NotInvalidTile{}) + | std::views::filter( + open_viii::graphics::background::NotInvalidTile{}) | std::views::filter( []([[maybe_unused]] const auto &tile) -> bool { @@ -814,7 +847,7 @@ class Map std::ranges::transform( f_tiles, std::back_inserter(unique_z), - tile_operations::Z{}); + open_viii::graphics::background::tile_operations::Z{}); std::ranges::sort(unique_z); auto [begin, end] = std::ranges::unique(unique_z); unique_z.erase(begin, end); @@ -825,7 +858,9 @@ class Map { auto f_tiles_reverse_filter_z = f_tiles | std::views::reverse - | std::views::filter(tile_operations::ZMatch{ z }); + | std::views::filter( + open_viii::graphics::background::tile_operations:: + ZMatch{ z }); for (const auto &tile : f_tiles_reverse_filter_z) { if (!lambda(tile)) @@ -1060,7 +1095,8 @@ class Map { auto f_tiles = tiles - | std::views::filter(tile_operations::NotInvalidTile{}); + | std::views::filter( + open_viii::graphics::background::NotInvalidTile{}); return static_cast(std::ranges::count_if( f_tiles, [](auto &&) { return true; })); }); @@ -1074,7 +1110,8 @@ class Map { auto f_tiles = tiles - | std::views::filter(tile_operations::NotInvalidTile{}) + | std::views::filter( + open_viii::graphics::background::NotInvalidTile{}) | std::views::filter(filter); bool changed = false; VisitState visit_state = {}; diff --git a/src/opengl/experimental/ff8/MapDeswizzle.hpp b/src/opengl/experimental/ff8/MapDeswizzle.hpp index a9c6edcf..1b8536c9 100644 --- a/src/opengl/experimental/ff8/MapDeswizzle.hpp +++ b/src/opengl/experimental/ff8/MapDeswizzle.hpp @@ -5,16 +5,17 @@ #ifndef FIELD_MAP_EDITOR_MAPDESWIZZLE_HPP #define FIELD_MAP_EDITOR_MAPDESWIZZLE_HPP #include "Map.hpp" -#include "tile_operations.hpp" +#include namespace ff_8 { struct TileFunctionsDeswizzle { - using X = tile_operations::X; - using Y = tile_operations::Y; - using TexturePage = tile_operations::TextureIdDefaultValue; - using UseTexturePage = std::true_type; - using UseBlending = std::true_type; + using X = open_viii::graphics::background::tile_operations::X; + using Y = open_viii::graphics::background::tile_operations::Y; + using TexturePage = open_viii::graphics::background::tile_operations:: + TextureIdDefaultValue; + using UseTexturePage = std::true_type; + using UseBlending = std::true_type; static constexpr const char *const label = "Map (Deswizzle)"; }; using MapDeswizzle = Map; diff --git a/src/opengl/experimental/ff8/MapDims.hpp b/src/opengl/experimental/ff8/MapDims.hpp index becc0269..173755db 100644 --- a/src/opengl/experimental/ff8/MapDims.hpp +++ b/src/opengl/experimental/ff8/MapDims.hpp @@ -4,8 +4,8 @@ #ifndef FIELD_MAP_EDITOR_MAPDIMS_HPP #define FIELD_MAP_EDITOR_MAPDIMS_HPP -#include "tile_operations.hpp" #include +#include namespace ff_8 { namespace map_dims_statics @@ -52,9 +52,10 @@ class MapDims [&](const auto &tiles) { { - auto f_tiles = tiles - | std::views::filter( - tile_operations::NotInvalidTile{}); + auto f_tiles + = tiles + | std::views::filter( + open_viii::graphics::background::NotInvalidTile{}); get_x(f_tiles); get_y(f_tiles); get_true_x(f_tiles); @@ -121,7 +122,8 @@ class MapDims template void get_true_x(TilesR &&f_tiles) { - static constexpr tile_operations::X true_x = {}; + static constexpr open_viii::graphics::background::tile_operations::X + true_x = {}; const auto [true_i_min_x, true_i_max_x] = std::ranges::minmax_element(f_tiles, {}, true_x); if (true_i_min_x == true_i_max_x) @@ -134,7 +136,8 @@ class MapDims template void get_true_y(TilesR &&f_tiles) { - static constexpr tile_operations::Y true_y = {}; + static constexpr open_viii::graphics::background::tile_operations::Y + true_y = {}; const auto [true_i_min_y, true_i_max_y] = std::ranges::minmax_element(f_tiles, {}, true_y); if (true_i_min_y == true_i_max_y) diff --git a/src/opengl/experimental/ff8/MapSwizzle.hpp b/src/opengl/experimental/ff8/MapSwizzle.hpp index 354e3f4f..8bb30b54 100644 --- a/src/opengl/experimental/ff8/MapSwizzle.hpp +++ b/src/opengl/experimental/ff8/MapSwizzle.hpp @@ -5,14 +5,15 @@ #ifndef FIELD_MAP_EDITOR_MAPSWIZZLE_HPP #define FIELD_MAP_EDITOR_MAPSWIZZLE_HPP #include "Map.hpp" -#include "tile_operations.hpp" +#include namespace ff_8 { struct TileFunctionsSwizzle { - using X = tile_operations::SourceX; - using Y = tile_operations::SourceY; - using TexturePage = tile_operations::TextureId; + using X = open_viii::graphics::background::tile_operations::SourceX; + using Y = open_viii::graphics::background::tile_operations::SourceY; + using TexturePage + = open_viii::graphics::background::tile_operations::TextureId; using UseTexturePage = std::false_type; using UseBlending = std::false_type; static constexpr const char *const label = "Map (Swizzle)"; diff --git a/src/opengl/experimental/ff8/MapTileAdjustments.hpp b/src/opengl/experimental/ff8/MapTileAdjustments.hpp index f12cd436..50e90475 100644 --- a/src/opengl/experimental/ff8/MapTileAdjustments.hpp +++ b/src/opengl/experimental/ff8/MapTileAdjustments.hpp @@ -7,12 +7,12 @@ #include "MapDims.hpp" #include "MapFilters.hpp" #include "SimilarAdjustments.hpp" -#include "tile_operations.hpp" #include "VisitState.hpp" #include #include #include #include +#include namespace ff_8 { template @@ -111,7 +111,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; bool draw = tile.draw(); if (ImGui::Checkbox("draw?", &draw)) { @@ -287,7 +287,7 @@ class MapTileAdjustments bool &changed, const int current_bpp_selection) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; const float checkbox_width = get_checkbox_width(3U); const std::pair item_width = generate_inner_width(2, checkbox_width); @@ -342,7 +342,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; const float checkbox_width = get_checkbox_width(5U); const std::pair item_width = generate_inner_width(3, checkbox_width); @@ -405,7 +405,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; const auto disabled = glengine::ImGuiDisabled(!has_with_blend_mode); const auto blend_mode = tile.blend_mode(); @@ -447,7 +447,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; using namespace open_viii::graphics::background; int layer_id = tile.layer_id(); const auto disabled @@ -488,7 +488,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; int texture_page_id = static_cast(tile.texture_id()); const float checkbox_width = get_checkbox_width(1U); const float width = ImGui::CalcItemWidth(); @@ -525,7 +525,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; const float checkbox_width = get_checkbox_width(1U); const float width = ImGui::CalcItemWidth(); const auto pop_width @@ -562,7 +562,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; int blend = tile.blend(); const float checkbox_width = get_checkbox_width(1U); const float width = ImGui::CalcItemWidth(); @@ -597,7 +597,7 @@ class MapTileAdjustments const TileT &tile, bool &changed) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; using namespace open_viii::graphics::background; int animation_id = tile.animation_id(); int animation_state = tile.animation_state(); diff --git a/src/opengl/experimental/ff8/MapUpscaleDeswizzle.hpp b/src/opengl/experimental/ff8/MapUpscaleDeswizzle.hpp index a15307ab..01991607 100644 --- a/src/opengl/experimental/ff8/MapUpscaleDeswizzle.hpp +++ b/src/opengl/experimental/ff8/MapUpscaleDeswizzle.hpp @@ -5,16 +5,17 @@ #ifndef FIELD_MAP_EDITOR_MAPUPSCALEDESWIZZLE_HPP #define FIELD_MAP_EDITOR_MAPUPSCALEDESWIZZLE_HPP #include "Map.hpp" -#include "tile_operations.hpp" +#include namespace ff_8 { struct TileFunctionsUpscaleDeswizzle { - using X = tile_operations::X; - using Y = tile_operations::Y; - using TexturePage = tile_operations::TextureIdDefaultValue; - using UseTexturePage = std::true_type; - using UseBlending = std::true_type; + using X = open_viii::graphics::background::tile_operations::X; + using Y = open_viii::graphics::background::tile_operations::Y; + using TexturePage = open_viii::graphics::background::tile_operations:: + TextureIdDefaultValue; + using UseTexturePage = std::true_type; + using UseBlending = std::true_type; static constexpr const char *const label = "Map (Swizzle Deswizzle)"; }; using MapUpscaleDeswizzle = Map; diff --git a/src/opengl/experimental/ff8/MapUpscaleSwizzle.hpp b/src/opengl/experimental/ff8/MapUpscaleSwizzle.hpp index 7ee827e9..806c2fd1 100644 --- a/src/opengl/experimental/ff8/MapUpscaleSwizzle.hpp +++ b/src/opengl/experimental/ff8/MapUpscaleSwizzle.hpp @@ -5,14 +5,15 @@ #ifndef FIELD_MAP_EDITOR_MAPUPSCALESWIZZLE_HPP #define FIELD_MAP_EDITOR_MAPUPSCALESWIZZLE_HPP #include "Map.hpp" -#include "tile_operations.hpp" +#include namespace ff_8 { struct TileFunctionsUpscaleSwizzle { - using X = tile_operations::SourceX; - using Y = tile_operations::SourceY; - using TexturePage = tile_operations::TextureId; + using X = open_viii::graphics::background::tile_operations::SourceX; + using Y = open_viii::graphics::background::tile_operations::SourceY; + using TexturePage + = open_viii::graphics::background::tile_operations::TextureId; using UseTexturePage = std::false_type; using UseBlending = std::false_type; static constexpr const char *const label = "Map (Swizzle Swizzle)"; diff --git a/src/opengl/experimental/ff8/MouseToTilePos.h b/src/opengl/experimental/ff8/MouseToTilePos.h index c5f6ad0d..30c5079f 100644 --- a/src/opengl/experimental/ff8/MouseToTilePos.h +++ b/src/opengl/experimental/ff8/MouseToTilePos.h @@ -5,7 +5,7 @@ #ifndef FIELD_MAP_EDITOR_MOUSETOTILEPOS_H #define FIELD_MAP_EDITOR_MOUSETOTILEPOS_H #include "MapDims.hpp" -#include "tile_operations.hpp" +#include namespace ff_8 { class MouseToTilePos @@ -33,7 +33,7 @@ class MouseToTilePos { static constexpr bool has_texture_page = std::is_same_v< typename TileFunctions::TexturePage, - tile_operations::TextureId>; + open_viii::graphics::background::tile_operations::TextureId>; texture_page = [&]() -> std::uint8_t { if constexpr (has_texture_page) diff --git a/src/opengl/experimental/ff8/SimilarAdjustments.hpp b/src/opengl/experimental/ff8/SimilarAdjustments.hpp index fddbed9d..6ac93ec0 100644 --- a/src/opengl/experimental/ff8/SimilarAdjustments.hpp +++ b/src/opengl/experimental/ff8/SimilarAdjustments.hpp @@ -4,7 +4,7 @@ #ifndef FIELD_MAP_EDITOR_SIMILARADJUSTMENTS_HPP #define FIELD_MAP_EDITOR_SIMILARADJUSTMENTS_HPP -#include "tile_operations.hpp" +#include namespace ff_8 { struct SimilarAdjustments @@ -29,7 +29,7 @@ struct SimilarAdjustments template auto operator()(const TileT &tile) const { - using namespace tile_operations; + using namespace open_viii::graphics::background::tile_operations; static constexpr auto xy_f = XY{}; static constexpr auto z_f = Z{}; return [=, this](const TileT &other_tile) -> bool diff --git a/src/opengl/experimental/ff8/UniqueTileValues.hpp b/src/opengl/experimental/ff8/UniqueTileValues.hpp index 6d67aeaf..f13f3f9a 100644 --- a/src/opengl/experimental/ff8/UniqueTileValues.hpp +++ b/src/opengl/experimental/ff8/UniqueTileValues.hpp @@ -5,10 +5,10 @@ #ifndef FIELD_MAP_EDITOR_UNIQUETILEVALUES_HPP #define FIELD_MAP_EDITOR_UNIQUETILEVALUES_HPP #include "MapHistory.hpp" -#include "tile_operations.hpp" #include "TransformedSortedUniqueCopy.hpp" #include "UniqueValues.hpp" #include +#include namespace ff_8 { struct UniqueTileValues @@ -17,7 +17,9 @@ struct UniqueTileValues using MapT = MapHistory; static auto filtered(const auto &tiles) { - return tiles | std::views::filter(tile_operations::NotInvalidTile{}); + return tiles + | std::views::filter( + open_viii::graphics::background::NotInvalidTile{}); }; static auto visit( const MapT &map, @@ -56,48 +58,63 @@ struct UniqueTileValues std::ranges::sort(pupu_values); const auto not_unique = std::ranges::unique(pupu_values); pupu_values.erase(not_unique.begin(), not_unique.end()); - const auto removal - = std::ranges::remove(pupu_values, open_viii::graphics::background::PupuID{ 0x8000'0000 }); + const auto removal = std::ranges::remove( + pupu_values, + open_viii::graphics::background::PupuID{ 0x8000'0000 }); pupu_values.erase(removal.begin(), removal.end()); return pupu_values; } static auto gen_z(const MapT &map) { - return visit(map, tile_operations::Z{}); + return visit( + map, open_viii::graphics::background::tile_operations::Z{}); } static auto gen_layer_id(const MapT &map) { - return visit(map, tile_operations::LayerId{}); + return visit( + map, open_viii::graphics::background::tile_operations::LayerId{}); } static auto gen_palette_id(const MapT &map) { - return visit(map, tile_operations::PaletteId{}); + return visit( + map, open_viii::graphics::background::tile_operations::PaletteId{}); } static auto gen_texture_page_id(const MapT &map) { - return visit(map, tile_operations::TextureId{}); + return visit( + map, open_viii::graphics::background::tile_operations::TextureId{}); } static auto gen_animation_id(const MapT &map) { - return visit(map, tile_operations::AnimationId{}); + return visit( + map, + open_viii::graphics::background::tile_operations::AnimationId{}); } static auto gen_animation_frame(const MapT &map) { - return visit(map, tile_operations::AnimationState{}); + return visit( + map, + open_viii::graphics::background::tile_operations::AnimationState{}); } static auto gen_blend_other(const MapT &map) { - return visit(map, tile_operations::Blend{}); + return visit( + map, open_viii::graphics::background::tile_operations::Blend{}); } static auto gen_blend_mode(const MapT &map) { return UniqueValues( - visit(map, tile_operations::BlendMode{}), blendmode_to_string); + visit( + map, + open_viii::graphics::background::tile_operations::BlendMode{}), + blendmode_to_string); } static auto gen_bpp(const MapT &map) { return UniqueValues( - visit(map, tile_operations::Depth{}), bpp_to_string); + visit( + map, open_viii::graphics::background::tile_operations::Depth{}), + bpp_to_string); } static void refresh( const MapT &map, diff --git a/src/opengl/experimental/ff8/tile_operations.hpp b/src/opengl/experimental/ff8/tile_operations.hpp deleted file mode 100644 index 4d200cd4..00000000 --- a/src/opengl/experimental/ff8/tile_operations.hpp +++ /dev/null @@ -1,253 +0,0 @@ -// -// Created by pcvii on 6/14/2022. -// - -#ifndef FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP -#define FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP -#include -#include -namespace ff_8 -{ -namespace tile_operations -{ - template - static constexpr TileT MaxTile = []() - { - std::array tmp{}; - // std::fill(tmp.begin(), tmp.end(), 0xFFU); - tmp.fill(0xFFU); - return std::bit_cast(tmp); - }(); -#define TILE_OPERATION(STRING, FUNCTION) \ - template \ - using STRING##T = typename std::remove_cvref_t< \ - std::invoke_result_t>; \ - struct STRING \ - { \ - template \ - constexpr STRING##T \ - operator()(const TileT &tile) const noexcept \ - { \ - return tile.FUNCTION(); \ - } \ - }; \ - template \ - struct STRING##Match \ - { \ - template \ - constexpr STRING##Match(TileT tile) \ - : STRING##Match(tile.FUNCTION()) \ - { \ - } \ - constexpr STRING##Match(ValueT value) \ - requires(!open_viii::graphics::background::is_tile) \ - : m_value(std::move(value)) \ - { \ - } \ - template \ - constexpr bool operator()(const TileT &tile) const noexcept \ - { \ - return static_cast>(m_value) \ - == tile.FUNCTION(); \ - } \ - auto operator<=>(const STRING##Match &) const = default; \ - std::strong_ordering operator<=>(const ValueT &that) const \ - { \ - return m_value <=> that; \ - } \ - template \ - std::strong_ordering operator<=>(const TileT &tile) const \ - { \ - return static_cast>(m_value) \ - <=> tile.FUNCTION(); \ - } \ - \ - private: \ - ValueT m_value = {}; \ - }; \ - struct STRING##DefaultValue \ - { \ - template \ - constexpr STRING##T operator()(const T &) const noexcept \ - { \ - return {}; \ - } \ - }; \ - template \ - concept has_with_##FUNCTION \ - = requires(std::remove_cvref_t t, STRING##T v) { \ - t = t.with_##FUNCTION(v); \ - }; \ - template \ - struct With##STRING \ - { \ - constexpr With##STRING(ValueT value) \ - : m_value(std::move(value)) \ - { \ - } \ - template \ - requires(has_with_##FUNCTION) \ - [[nodiscard]] constexpr TileT \ - operator()(const TileT &tile) const noexcept \ - { \ - spdlog::debug( \ - "Used with_" #FUNCTION " to assign: {}", m_value); \ - return tile.with_##FUNCTION( \ - static_cast>(m_value)); \ - } \ - \ - template \ - requires(!has_with_##FUNCTION) \ - constexpr decltype(auto) \ - operator()(const TileT &tile) const noexcept \ - { /*donno why I can not forward or move when not has_with*/ \ - spdlog::debug("Has no with_" #FUNCTION); \ - return tile; \ - } \ - \ - private: \ - ValueT m_value = {}; \ - }; \ - template \ - struct TranslateWith##STRING \ - { \ - constexpr TranslateWith##STRING( \ - ValueT to, \ - ValueT from) \ - : m_to(std::move(to)) \ - , m_from(std::move(from)) \ - { \ - } \ - template \ - requires(has_with_##FUNCTION) \ - [[nodiscard]] constexpr TileT \ - operator()(const TileT &tile) const noexcept \ - { \ - const auto current = m_to + tile.FUNCTION() - m_from; \ - spdlog::debug( \ - "Used with_" #FUNCTION " to assign: {}", current); \ - return tile.with_##FUNCTION( \ - static_cast>(current)); \ - } \ - \ - template \ - requires(!has_with_##FUNCTION) \ - constexpr decltype(auto) \ - operator()(const TileT &tile) const noexcept \ - { /*donno why I can not forward or move when not has_with*/ \ - spdlog::debug("Has no with_" #FUNCTION); \ - return tile; \ - } \ - \ - private: \ - ValueT m_to = {}; \ - ValueT m_from = {}; /*used to calc offset using original*/ \ - }; \ - template \ - struct STRING##Group \ - { \ - using value_type = STRING##T; \ - using get = STRING; \ - using get_default = STRING##DefaultValue; \ - constexpr STRING##Group() = default; \ - constexpr STRING##Group(value_type value) \ - : current(std::move(value)) \ - { \ - } \ - constexpr STRING##Group(TileT tile) \ - : current(get{}(tile)) \ - { \ - } \ - static constexpr value_type min_value = []() -> value_type \ - { \ - if constexpr (std::signed_integral) \ - { \ - return (std::numeric_limits::min)(); \ - } \ - else \ - { \ - const auto get_f = get{}; \ - return get_f(TileT{}); \ - } \ - }(); \ - static constexpr value_type max_value = []() -> value_type \ - { \ - if constexpr (std::signed_integral) \ - { \ - return (std::numeric_limits::max)(); \ - } \ - else \ - { \ - const auto get_f = get{}; \ - return get_f(MaxTile); \ - } \ - }(); \ - value_type current = {}; \ - constexpr static bool read_only = !has_with_##FUNCTION; \ - using transform_with = With##STRING; \ - using match_with = STRING##Match; \ - } - - TILE_OPERATION( - X, - x); - TILE_OPERATION( - Y, - y); - TILE_OPERATION( - XY, - xy); - TILE_OPERATION( - Z, - z); - TILE_OPERATION( - SourceX, - source_x); - TILE_OPERATION( - SourceY, - source_y); - TILE_OPERATION( - SourceXY, - source_xy); - TILE_OPERATION( - TextureId, - texture_id); - TILE_OPERATION( - BlendMode, - blend_mode); - TILE_OPERATION( - Blend, - blend); - TILE_OPERATION( - Draw, - draw); - TILE_OPERATION( - Depth, - depth); - TILE_OPERATION( - LayerId, - layer_id); - TILE_OPERATION( - PaletteId, - palette_id); - TILE_OPERATION( - AnimationId, - animation_id); - TILE_OPERATION( - AnimationState, - animation_state); -#undef TILE_OPERATION - struct NotInvalidTile - { - template - constexpr bool operator()(const T &tile) const noexcept - { - return (std::cmp_not_equal(tile.x(), s_end_x)); - } - - private: - static constexpr std::uint16_t s_end_x = { 0x7FFFU }; - }; -}// namespace tile_operations -}// namespace ff_8 -#endif// FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP diff --git a/src/opengl/main/filter.hpp b/src/opengl/main/filter.hpp index 59273bd6..1b189dda 100644 --- a/src/opengl/main/filter.hpp +++ b/src/opengl/main/filter.hpp @@ -9,7 +9,6 @@ #include "formatters.hpp" #include "gui/colors.hpp" #include "gui/compact_type.hpp" -#include "tile_operations.hpp" #include "utilities.hpp" #include #include @@ -18,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -209,7 +209,7 @@ struct ConfigKeys return in ? draw_bitT::enabled : draw_bitT::disabled; } using operation_type - = decltype([](auto &&...args) { return to_draw_bitT(ff_8::tile_operations::Draw{}(std::forward(args)...)); }); + = decltype([](auto &&...args) { return to_draw_bitT(open_viii::graphics::background::tile_operations::Draw{}(std::forward(args)...)); }); static constexpr std::string_view key_name = "filter_draw"; static constexpr std::string_view enabled_key_name = "filter_draw_enabled"; }; @@ -217,9 +217,10 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::ZT; - using operation_type = ff_8::tile_operations::Z; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::ZT; + using operation_type = open_viii::graphics::background::tile_operations::Z; static constexpr std::string_view key_name = "filter_z"; static constexpr std::string_view enabled_key_name = "filter_z_enabled"; }; @@ -228,9 +229,10 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::Z; + using TileT = open_viii::graphics::background::Tile1; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::ZT>; + using operation_type = open_viii::graphics::background::tile_operations::Z; static constexpr std::string_view key_name = "filter_multi_z"; static constexpr std::string_view enabled_key_name = "filter_multi_z_enabled"; @@ -239,9 +241,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::PaletteIdT; - using operation_type = ff_8::tile_operations::PaletteId; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::PaletteIdT; + using operation_type + = open_viii::graphics::background::tile_operations::PaletteId; static constexpr std::string_view key_name = "filter_palette"; static constexpr std::string_view enabled_key_name = "filter_palette_enabled"; @@ -251,8 +255,10 @@ template<> struct ConfigKeys { using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::PaletteId; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::PaletteIdT>; + using operation_type + = open_viii::graphics::background::tile_operations::PaletteId; static constexpr std::string_view key_name = "filter_multi_palette"; static constexpr std::string_view enabled_key_name = "filter_multi_palette_enabled"; @@ -261,9 +267,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::AnimationIdT; - using operation_type = ff_8::tile_operations::AnimationId; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::AnimationIdT; + using operation_type + = open_viii::graphics::background::tile_operations::AnimationId; static constexpr std::string_view key_name = "filter_animation_id"; static constexpr std::string_view enabled_key_name = "filter_animation_id_enabled"; @@ -273,8 +281,10 @@ template<> struct ConfigKeys { using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::AnimationId; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::AnimationIdT>; + using operation_type + = open_viii::graphics::background::tile_operations::AnimationId; static constexpr std::string_view key_name = "filter_multi_animation_id"; static constexpr std::string_view enabled_key_name = "filter_multi_animation_id_enabled"; @@ -283,9 +293,12 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::AnimationStateT; - using operation_type = ff_8::tile_operations::AnimationState; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::AnimationStateT< + TileT>; + using operation_type + = open_viii::graphics::background::tile_operations::AnimationState; static constexpr std::string_view key_name = "filter_animation_frame"; static constexpr std::string_view enabled_key_name = "filter_animation_frame_enabled"; @@ -295,10 +308,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type - = std::vector>; - using operation_type = ff_8::tile_operations::AnimationState; + using TileT = open_viii::graphics::background::Tile1; + using value_type = std::vector>; + using operation_type + = open_viii::graphics::background::tile_operations::AnimationState; static constexpr std::string_view key_name = "filter_multi_animation_frame"; static constexpr std::string_view enabled_key_name @@ -308,9 +322,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::LayerIdT; - using operation_type = ff_8::tile_operations::LayerId; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::LayerIdT; + using operation_type + = open_viii::graphics::background::tile_operations::LayerId; static constexpr std::string_view key_name = "filter_layer_id"; static constexpr std::string_view enabled_key_name = "filter_layer_id_enabled"; @@ -320,9 +336,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::LayerId; + using TileT = open_viii::graphics::background::Tile1; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::LayerIdT>; + using operation_type + = open_viii::graphics::background::tile_operations::LayerId; static constexpr std::string_view key_name = "filter_multi_layer_id"; static constexpr std::string_view enabled_key_name = "filter_multi_layer_id_enabled"; @@ -331,9 +349,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::TextureIdT; - using operation_type = ff_8::tile_operations::TextureId; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::TextureIdT; + using operation_type + = open_viii::graphics::background::tile_operations::TextureId; static constexpr std::string_view key_name = "filter_texture_page_id"; static constexpr std::string_view enabled_key_name = "filter_texture_page_id_enabled"; @@ -343,8 +363,10 @@ template<> struct ConfigKeys { using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::TextureId; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::TextureIdT>; + using operation_type + = open_viii::graphics::background::tile_operations::TextureId; static constexpr std::string_view key_name = "filter_multi_texture_page_id"; static constexpr std::string_view enabled_key_name @@ -354,9 +376,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::BlendModeT; - using operation_type = ff_8::tile_operations::BlendMode; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::BlendModeT; + using operation_type + = open_viii::graphics::background::tile_operations::BlendMode; static constexpr std::string_view key_name = "filter_blend_mode"; static constexpr std::string_view enabled_key_name = "filter_blend_mode_enabled"; @@ -366,8 +390,10 @@ template<> struct ConfigKeys { using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::BlendMode; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::BlendModeT>; + using operation_type + = open_viii::graphics::background::tile_operations::BlendMode; static constexpr std::string_view enabled_key_name = "filter_multi_blend_mode_enabled"; static constexpr std::string_view key_name = "filter_multi_blend_mode"; @@ -376,9 +402,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::BlendT; - using operation_type = ff_8::tile_operations::Blend; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::BlendT; + using operation_type + = open_viii::graphics::background::tile_operations::Blend; static constexpr std::string_view key_name = "filter_blend_other"; static constexpr std::string_view enabled_key_name = "filter_blend_other_enabled"; @@ -388,9 +416,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::Blend; + using TileT = open_viii::graphics::background::Tile1; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::BlendT>; + using operation_type + = open_viii::graphics::background::tile_operations::Blend; static constexpr std::string_view key_name = "filter_multi_blend_other"; static constexpr std::string_view enabled_key_name = "filter_multi_blend_other_enabled"; @@ -399,9 +429,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = ff_8::tile_operations::DepthT; - using operation_type = ff_8::tile_operations::Depth; + using TileT = open_viii::graphics::background::Tile1; + using value_type + = open_viii::graphics::background::tile_operations::DepthT; + using operation_type + = open_viii::graphics::background::tile_operations::Depth; static constexpr std::string_view key_name = "filter_bpp"; static constexpr std::string_view enabled_key_name = "filter_bpp_enabled"; }; @@ -409,9 +441,11 @@ struct ConfigKeys template<> struct ConfigKeys { - using TileT = open_viii::graphics::background::Tile1; - using value_type = std::vector>; - using operation_type = ff_8::tile_operations::Depth; + using TileT = open_viii::graphics::background::Tile1; + using value_type = std::vector< + open_viii::graphics::background::tile_operations::DepthT>; + using operation_type + = open_viii::graphics::background::tile_operations::Depth; static constexpr std::string_view key_name = "filter_multi_bpp"; static constexpr std::string_view enabled_key_name = "filter_multi_bpp_enabled"; diff --git a/src/opengl/main/map_operation.cpp b/src/opengl/main/map_operation.cpp index 336b4761..f79c3427 100644 --- a/src/opengl/main/map_operation.cpp +++ b/src/opengl/main/map_operation.cpp @@ -4,16 +4,17 @@ #include "map_operation.hpp" #include "formatters.hpp" -#include "tile_operations.hpp" #include #include #include #include +#include #include namespace ff_8 { -static constexpr auto not_invalid = tile_operations::NotInvalidTile{}; -void flatten_bpp(map_group::Map &map) +static constexpr auto not_invalid + = open_viii::graphics::background::NotInvalidTile{}; +void flatten_bpp(map_group::Map &map) { map.visit_tiles( [](auto &tiles) @@ -63,11 +64,10 @@ void compact_map_order_ffnx(map_group::Map &map) auto filtered_tiles = tiles | std::views::filter(not_invalid); const auto size_of_tiles = std::ranges::distance(filtered_tiles); using tile_t = std::remove_cvref_t< - std::ranges::range_value_t>; + std::ranges::range_value_t>; const auto with_depth_operation - = ff_8::tile_operations::WithDepth{ - open_viii::graphics::BPPT::BPP4_CONST() - }; + = open_viii::graphics::background::tile_operations::WithDepth< + tile_t>{ open_viii::graphics::BPPT::BPP4_CONST() }; for (auto &&[tile_index, tile] : filtered_and_enumerated_tiles) { @@ -79,19 +79,19 @@ void compact_map_order_ffnx(map_group::Map &map) = dest_coords_for_horizontal_tile_index_swizzle( tile_index, size_of_tiles); const auto source_x - = static_cast>( + = static_cast>( new_pos.source_xy.x); const auto source_y - = static_cast>( + = static_cast>( new_pos.source_xy.y); const auto with_texture_id_operation - = ff_8::tile_operations::WithTextureId{ - new_pos.texture_page - }; + = open_viii::graphics::background::tile_operations:: + WithTextureId{ new_pos.texture_page }; const auto with_source_xy_operation - = ff_8::tile_operations::WithSourceXY{ - { source_x, source_y } - }; + = open_viii::graphics::background::tile_operations:: + WithSourceXY{ { source_x, source_y } }; tile = tile | with_depth_operation | with_source_xy_operation | with_texture_id_operation; } @@ -113,11 +113,10 @@ void compact_move_conflicts_only( // auto filtered_tiles = tiles | // std::views::filter(not_invalid); using tile_t = std::remove_cvref_t< - std::ranges::range_value_t>; + std::ranges::range_value_t>; const auto with_depth_operation - = ff_8::tile_operations::WithDepth{ - open_viii::graphics::BPPT::BPP4_CONST() - }; + = open_viii::graphics::background::tile_operations::WithDepth< + tile_t>{ open_viii::graphics::BPPT::BPP4_CONST() }; for (const auto &indieces : range_of_conflicts) { @@ -139,19 +138,25 @@ void compact_move_conflicts_only( // filter out any locations you don't want here. const auto texture_page = static_cast< - ff_8::tile_operations::TextureIdT>( + open_viii::graphics::background:: + tile_operations::TextureIdT>( location.t); const auto source_x = static_cast< - ff_8::tile_operations::SourceXT>( + open_viii::graphics::background:: + tile_operations::SourceXT>( location.x); const auto source_y = static_cast< - ff_8::tile_operations::SourceYT>( + open_viii::graphics::background:: + tile_operations::SourceYT>( location.y); const auto with_texture_id_operation - = ff_8::tile_operations::WithTextureId< - tile_t>{ texture_page }; + = open_viii::graphics::background:: + tile_operations::WithTextureId{ + texture_page + }; const auto with_source_xy_operation - = ff_8::tile_operations::WithSourceXY{ + = open_viii::graphics::background:: + tile_operations::WithSourceXY{ { source_x, source_y } }; tile = tile | with_depth_operation @@ -178,34 +183,34 @@ void compact_map_order(map_group::Map &map) { auto filtered_tiles = tiles | std::views::filter(not_invalid); using tile_t = std::remove_cvref_t< - std::ranges::range_value_t>; + std::ranges::range_value_t>; const auto with_depth_operation - = ff_8::tile_operations::WithDepth{ - open_viii::graphics::BPPT::BPP4_CONST() - }; + = open_viii::graphics::background::tile_operations::WithDepth< + tile_t>{ open_viii::graphics::BPPT::BPP4_CONST() }; for (std::size_t tile_index = {}; tile_t &tile : filtered_tiles) { const auto texture_page - = static_cast>( + = static_cast>( tile_index / 256); const auto file_tile_index = tile_index % 256; const auto source_x - = static_cast>( + = static_cast>( (file_tile_index % ff_8::map_group::TILE_SIZE) * ff_8::map_group::TILE_SIZE); const auto source_y - = static_cast>( + = static_cast>( (file_tile_index / ff_8::map_group::TILE_SIZE) * ff_8::map_group::TILE_SIZE); ++tile_index; const auto with_texture_id_operation - = ff_8::tile_operations::WithTextureId{ - texture_page - }; + = open_viii::graphics::background::tile_operations:: + WithTextureId{ texture_page }; const auto with_source_xy_operation - = ff_8::tile_operations::WithSourceXY{ - { source_x, source_y } - }; + = open_viii::graphics::background::tile_operations:: + WithSourceXY{ { source_x, source_y } }; tile = tile | with_depth_operation | with_source_xy_operation | with_texture_id_operation; } @@ -290,8 +295,8 @@ template< row_weight = {}; } - if (std::cmp_greater_equal( - row, ff_8::map_group::TILE_SIZE)) + if ( + std::cmp_greater_equal(row, ff_8::map_group::TILE_SIZE)) { ++page; row = {}; @@ -427,9 +432,10 @@ bool test_if_map_same( saved_map.visit_tiles( [&](const auto &saved_tiles) { - if constexpr (std::is_same_v< - std::remove_cvref_t, - std::remove_cvref_t>) + if constexpr ( + std::is_same_v< + std::remove_cvref_t, + std::remove_cvref_t>) { if ( std::ranges::size(raw_tiles) diff --git a/src/opengl/main/map_sprite.hpp b/src/opengl/main/map_sprite.hpp index 9af9f3de..6c7e6dbd 100644 --- a/src/opengl/main/map_sprite.hpp +++ b/src/opengl/main/map_sprite.hpp @@ -911,12 +911,20 @@ struct [[nodiscard]] map_sprite// final auto find_conflicting_tiles(const TilesT &tiles) const { using TileT = std::ranges::range_value_t>; - using TextureIdT = ff_8::tile_operations::TextureIdT; - using PaletteIdT = ff_8::tile_operations::PaletteIdT; - static constexpr auto SourceX = ff_8::tile_operations::SourceX{}; - static constexpr auto SourceY = ff_8::tile_operations::SourceY{}; - static constexpr auto TextureId = ff_8::tile_operations::TextureId{}; - static constexpr auto PaletteId = ff_8::tile_operations::PaletteId{}; + using TextureIdT + = open_viii::graphics::background::tile_operations::TextureIdT< + TileT>; + using PaletteIdT + = open_viii::graphics::background::tile_operations::PaletteIdT< + TileT>; + static constexpr auto SourceX + = open_viii::graphics::background::tile_operations::SourceX{}; + static constexpr auto SourceY + = open_viii::graphics::background::tile_operations::SourceY{}; + static constexpr auto TextureId + = open_viii::graphics::background::tile_operations::TextureId{}; + static constexpr auto PaletteId + = open_viii::graphics::background::tile_operations::PaletteId{}; std::map> conflicts; // Process each pair of matching tiles and insert their palette IDs diff --git a/src/opengl/main/tile_operations.hpp b/src/opengl/main/tile_operations.hpp deleted file mode 100644 index dd9b2a2e..00000000 --- a/src/opengl/main/tile_operations.hpp +++ /dev/null @@ -1,342 +0,0 @@ -// -// Created by pcvii on 6/14/2022. -// - -#ifndef FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP -#define FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP -#include -#include -namespace ff_8::tile_operations -{ -template -static constexpr TileT MaxTile = []() -{ - std::array tmp{}; - // std::fill(tmp.begin(), tmp.end(), 0xFFU); - tmp.fill((std::numeric_limits::max)()); - return std::bit_cast(tmp); -}(); -#define CONCAT(a, b) a##b -#define TILE_OPERATION(STRING, FUNCTION) \ - template \ - using CONCAT(STRING, T) = typename std::remove_cvref_t< \ - std::invoke_result_t>; \ - struct STRING \ - { \ - template \ - constexpr CONCAT( \ - STRING, \ - T) \ - operator()(const TileT &tile) const noexcept \ - { \ - return tile.FUNCTION(); \ - } \ - }; \ - template \ - struct CONCAT(STRING, Match) \ - { \ - template \ - constexpr explicit CONCAT( \ - STRING, \ - Match)(TileT tile) \ - : CONCAT( \ - STRING, \ - Match)(tile.FUNCTION()) \ - { \ - } \ - constexpr explicit CONCAT( \ - STRING, \ - Match)(ValueT value) \ - requires(!open_viii::graphics::background::is_tile) \ - : m_value(std::move(value)) \ - { \ - } \ - template \ - constexpr bool operator()(const TileT &tile) const noexcept \ - { \ - return static_cast < CONCAT(STRING, T) < TileT >> (m_value) \ - == tile.FUNCTION(); \ - } \ - auto operator<=>(const CONCAT( \ - STRING, \ - Match) &) const \ - = default; \ - bool operator==(const ValueT &that) const \ - { \ - return m_value == that; \ - } \ - std::strong_ordering operator<=>(const ValueT &that) const \ - { \ - return m_value <=> that; \ - } \ - template \ - bool operator==(const TileT &tile) const \ - { \ - return static_cast < CONCAT(STRING, T) < TileT >> (m_value) \ - == tile.FUNCTION(); \ - } \ - template \ - std::strong_ordering operator<=>(const TileT &tile) const \ - { \ - return static_cast < CONCAT(STRING, T) < TileT \ - >> (m_value) <=> tile.FUNCTION(); \ - } \ - \ - private: \ - ValueT m_value = {}; \ - }; \ - template \ - CONCAT(STRING, Match)(const TileT &)->CONCAT(STRING, Match) \ - < CONCAT(STRING, T) < TileT >> ; \ - struct CONCAT(STRING, DefaultValue) \ - { \ - template \ - constexpr CONCAT( \ - STRING, \ - T) \ - operator()(const T &) const noexcept \ - { \ - return {}; \ - } \ - }; \ - template \ - concept CONCAT(has_with_, FUNCTION) = requires( \ - std::remove_cvref_t tile, CONCAT(STRING, T) < TileT > value) { \ - tile = tile.CONCAT(with_, FUNCTION)(value); \ - }; \ - template \ - struct CONCAT(With, STRING) \ - { \ - constexpr explicit CONCAT( \ - With, \ - STRING)( \ - CONCAT( \ - STRING, \ - T) \ - < TileT > value) \ - : m_value(std::move(value)) \ - { \ - } \ - \ - [[nodiscard]] constexpr TileT \ - operator()(const TileT &tile) const noexcept \ - requires( \ - CONCAT( \ - has_with_, \ - FUNCTION) \ - < TileT >) \ - { \ - spdlog::trace( \ - "Used with_" #FUNCTION " to assign: {}", m_value); \ - return tile.CONCAT(with_, FUNCTION)( \ - static_cast < CONCAT(STRING, T) < TileT >> (m_value)); \ - } \ - constexpr decltype(auto) \ - operator()(const TileT &tile) const noexcept \ - requires( \ - !CONCAT( \ - has_with_, \ - FUNCTION) \ - < TileT >) \ - { /*donno why I can not forward or move when not has_with*/ \ - spdlog::debug("Has no with_" #FUNCTION); \ - return tile; \ - } \ - friend constexpr TileT operator|( \ - const TileT &tile, \ - const CONCAT( \ - With, \ - STRING) \ - & operation) \ - { \ - return operation.operator()(tile); \ - } \ - \ - private: \ - CONCAT( \ - STRING, \ - T) m_value \ - = {}; \ - }; \ - template \ - struct CONCAT(TranslateWith, STRING) \ - { \ - using ValueT = CONCAT( \ - STRING, \ - T); \ - constexpr explicit CONCAT( \ - TranslateWith, \ - STRING)( \ - const TileT &tile, \ - ValueT to_value) \ - : m_to(std::move(to_value)) \ - , m_from(tile.FUNCTION()) \ - { \ - } \ - constexpr explicit CONCAT( \ - TranslateWith, \ - STRING)( \ - ValueT from_value, \ - ValueT to_value) \ - : m_to(std::move(to_value)) \ - , m_from(std::move(from_value)) \ - { \ - } \ - \ - \ - [[nodiscard]] constexpr TileT \ - operator()(const TileT &tile) const noexcept \ - requires( \ - CONCAT( \ - has_with_, \ - FUNCTION) \ - < TileT >) \ - { \ - const auto current = m_to + tile.FUNCTION() - m_from; \ - spdlog::trace( \ - "Used with_" #FUNCTION " to assign: {}", current); \ - return tile.CONCAT(with_, FUNCTION)( \ - static_cast(current)); \ - } \ - \ - \ - constexpr decltype(auto) \ - operator()(const TileT &tile) const noexcept \ - requires( \ - !CONCAT( \ - has_with_, \ - FUNCTION) \ - < TileT >) \ - { /*donno why I can not forward or move when not has_with*/ \ - spdlog::debug("Has no with_" #FUNCTION); \ - return tile; \ - } \ - \ - private: \ - ValueT m_to = {}; \ - ValueT m_from = {}; /*used to calc offset using original*/ \ - }; \ - template \ - struct CONCAT(STRING, Group) \ - { \ - using value_type = CONCAT( \ - STRING, \ - T); \ - using get = STRING; \ - using get_default = CONCAT( \ - STRING, \ - DefaultValue); \ - constexpr CONCAT( \ - STRING, \ - Group)() \ - = default; \ - constexpr explicit CONCAT( \ - STRING, \ - Group)(value_type value) \ - : current(std::move(value)) \ - { \ - } \ - constexpr explicit CONCAT( \ - STRING, \ - Group)(TileT tile) \ - : current(get{}(tile)) \ - { \ - } \ - static constexpr value_type min_value = []() -> value_type \ - { \ - if constexpr (std::signed_integral) \ - { \ - return (std::numeric_limits::min)(); \ - } \ - else \ - { \ - const auto get_f = get{}; \ - return get_f(TileT{}); \ - } \ - }(); \ - static constexpr value_type max_value = []() -> value_type \ - { \ - if constexpr (std::signed_integral) \ - { \ - return (std::numeric_limits::max)(); \ - } \ - else \ - { \ - const auto get_f = get{}; \ - return get_f(MaxTile); \ - } \ - }(); \ - value_type current = {}; \ - constexpr static bool read_only \ - = !CONCAT(has_with_, FUNCTION); \ - using transform_with = CONCAT( \ - With, \ - STRING); \ - using match_with = CONCAT( \ - STRING, \ - Match); \ - } - -TILE_OPERATION( - X, - x); -TILE_OPERATION( - Y, - y); -TILE_OPERATION( - XY, - xy); -TILE_OPERATION( - Z, - z); -TILE_OPERATION( - SourceX, - source_x); -TILE_OPERATION( - SourceY, - source_y); -TILE_OPERATION( - SourceXY, - source_xy); -TILE_OPERATION( - TextureId, - texture_id); -TILE_OPERATION( - BlendMode, - blend_mode); -TILE_OPERATION( - Blend, - blend); -TILE_OPERATION( - Draw, - draw); -TILE_OPERATION( - Depth, - depth); -TILE_OPERATION( - LayerId, - layer_id); -TILE_OPERATION( - PaletteId, - palette_id); -TILE_OPERATION( - AnimationId, - animation_id); -TILE_OPERATION( - AnimationState, - animation_state); -#undef TILE_OPERATION -#undef CONCAT -struct NotInvalidTile -{ - template - constexpr bool operator()(const T &tile) const noexcept - { - return (std::cmp_not_equal(tile.x(), s_end_x)); - } - - private: - static constexpr std::uint16_t s_end_x = { 0x7FFFU }; -}; -}// namespace ff_8::tile_operations -#endif// FIELD_MAP_EDITOR_TILE_OPERATIONS_HPP diff --git a/src/opengl/main/unique_values.hpp b/src/opengl/main/unique_values.hpp index 6d073b3f..5c9b7b8b 100644 --- a/src/opengl/main/unique_values.hpp +++ b/src/opengl/main/unique_values.hpp @@ -5,13 +5,13 @@ #ifndef FIELD_MAP_EDITOR_UNIQUE_VALUES_HPP #define FIELD_MAP_EDITOR_UNIQUE_VALUES_HPP #include "formatters.hpp" -#include "tile_operations.hpp" #include #include #include #include #include #include +#include #include #include #include @@ -153,39 +153,41 @@ struct all_unique_values_and_strings explicit all_unique_values_and_strings(const tilesT &tiles) : m_z( tiles, - ff_8::tile_operations::Z{}, + open_viii::graphics::background::tile_operations::Z{}, std::greater<>{}) , m_layer_id( tiles, - ff_8::tile_operations::LayerId{}) + open_viii::graphics::background::tile_operations::LayerId{}) , m_texture_page_id( tiles, - ff_8::tile_operations::TextureId{}) + open_viii::graphics::background::tile_operations::TextureId{}) , m_animation_id( tiles, - ff_8::tile_operations::AnimationId{}) + open_viii::graphics::background::tile_operations::AnimationId{}) , m_blend_other( tiles, - ff_8::tile_operations::Blend{}) + open_viii::graphics::background::tile_operations::Blend{}) , m_blend_mode( tiles, - ff_8::tile_operations::BlendMode{}) + open_viii::graphics::background::tile_operations::BlendMode{}) , m_bpp( tiles, - ff_8::tile_operations::Depth{}) + open_viii::graphics::background::tile_operations::Depth{}) , m_animation_frame( get_map< std::uint8_t, std::uint8_t>( tiles, m_animation_id, - ff_8::tile_operations::AnimationState{}, + open_viii::graphics::background::tile_operations::AnimationState{}, {}, []( const auto key, const auto &tile) -> bool { - return ff_8::tile_operations::AnimationIdMatch{ key } == tile; + return open_viii::graphics::background::tile_operations:: + AnimationIdMatch{ key } + == tile; })) , m_palette( get_map< @@ -193,12 +195,16 @@ struct all_unique_values_and_strings open_viii::graphics::BPPT>( tiles, m_bpp, - ff_8::tile_operations::PaletteId{}, + open_viii::graphics::background::tile_operations::PaletteId{}, {}, []( const auto key, const auto &tile) -> bool - { return ff_8::tile_operations::DepthMatch{ tile } == key; })) + { + return open_viii::graphics::background::tile_operations:: + DepthMatch{ tile } + == key; + })) { } [[nodiscard]] const auto &z() const From 3d1161cfb610e53e54a8aaef98e3daa525e5902a Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 15:32:29 -0400 Subject: [PATCH 3/7] Enable MSVC preview toolset for Visual Studio builds Use the preview MSVC toolset when building with Visual Studio to work around a compiler regression affecting std::source_location::current() default arguments. This is a temporary workaround until the fix is available in a stable MSVC release. --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56db4e8e..11d33f80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,10 @@ cmake_policy(SET CMP0042 NEW) cmake_policy(SET CMP0074 NEW) cmake_policy(SET CMP0091 NEW) +if(MSVC) + set(CMAKE_GENERATOR_TOOLSET "preview") +endif() + set(VCPKG_DISABLE_COMPILER_TRACKING 1) set(VCPKG_INSTALL_OPTIONS "--clean-after-build") set(X_VCPKG_APPLOCAL_DEPS_INSTALL ON) From deb4d4e148da385efe1924441440e6575719caa8 Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 16:16:44 -0400 Subject: [PATCH 4/7] print out msvc version when building. --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11d33f80..9704a2b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,8 @@ cmake_policy(SET CMP0091 NEW) if(MSVC) set(CMAKE_GENERATOR_TOOLSET "preview") + message(STATUS "MSVC_VERSION=${MSVC_VERSION}") + message(STATUS "MSVC_TOOLSET_VERSION=${MSVC_TOOLSET_VERSION}") endif() set(VCPKG_DISABLE_COMPILER_TRACKING 1) From bdc4b583764274a924009b25fb89c15601a38ff3 Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 17:08:51 -0400 Subject: [PATCH 5/7] change status to warning --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9704a2b3..33279276 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,8 @@ cmake_policy(SET CMP0091 NEW) if(MSVC) set(CMAKE_GENERATOR_TOOLSET "preview") - message(STATUS "MSVC_VERSION=${MSVC_VERSION}") - message(STATUS "MSVC_TOOLSET_VERSION=${MSVC_TOOLSET_VERSION}") + message(WARNING "MSVC_VERSION=${MSVC_VERSION}") + message(WARNING "MSVC_TOOLSET_VERSION=${MSVC_TOOLSET_VERSION}") endif() set(VCPKG_DISABLE_COMPILER_TRACKING 1) From b2a33d768b9b8b577b2adaa1c37eef79a4b2f9c2 Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 17:40:42 -0400 Subject: [PATCH 6/7] verbose and run on windows-2025 --- .github/workflows/build.ps1 | 2 +- .github/workflows/main-1.0.0.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.ps1 b/.github/workflows/build.ps1 index c097ebd0..f75b0382 100644 --- a/.github/workflows/build.ps1 +++ b/.github/workflows/build.ps1 @@ -114,7 +114,7 @@ vcpkg integrate install # Start the build cmake --preset "${env:_RELEASE_CONFIGURATION_PRESET}" -cmake --build --preset "${env:_RELEASE_CONFIGURATION_PRESET}" +cmake --build --preset "${env:_RELEASE_CONFIGURATION_PRESET}" --verbose # Start the packaging 7z a ".\.dist\${env:_RELEASE_NAME}-${env:_RELEASE_VERSION}.zip" ".\$releasePath\bin\${env:_RELEASE_CONFIGURATION_RAW}\*" diff --git a/.github/workflows/main-1.0.0.yaml b/.github/workflows/main-1.0.0.yaml index 1772f6e5..ef5aa685 100644 --- a/.github/workflows/main-1.0.0.yaml +++ b/.github/workflows/main-1.0.0.yaml @@ -257,7 +257,7 @@ jobs: windows-build: - runs-on: windows-latest + runs-on: windows-2025 needs: [prepare, linux-build] env: _RELEASE_CONFIGURATION_PRESET: Release-windows # override for Windows From f969c5eedeb2411fa45de7997dc69cd7f1c9d84b Mon Sep 17 00:00:00 2001 From: Sebanisu Date: Thu, 18 Jun 2026 20:08:50 -0400 Subject: [PATCH 7/7] windows-2022 --- .github/workflows/main-1.0.0.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main-1.0.0.yaml b/.github/workflows/main-1.0.0.yaml index ef5aa685..96607643 100644 --- a/.github/workflows/main-1.0.0.yaml +++ b/.github/workflows/main-1.0.0.yaml @@ -257,7 +257,7 @@ jobs: windows-build: - runs-on: windows-2025 + runs-on: windows-2022 needs: [prepare, linux-build] env: _RELEASE_CONFIGURATION_PRESET: Release-windows # override for Windows