Move Tracker namespace to its own file (#7135)

Reuse for item tracker BeginFloatingWindows
This commit is contained in:
Philip Dubé
2026-08-30 14:32:27 +00:00
committed by GitHub
parent 8bf26365be
commit 896bf97a43
7 changed files with 106 additions and 101 deletions
@@ -10,6 +10,7 @@
#include "randomizer_check_tracker.h"
#include "randomizer_entrance_tracker.h"
#include "randomizer_item_tracker.h"
#include "randomizer_tracker_windows.h"
#include "randomizerTypes.h"
#include "soh/Enhancements/randomizer/randomizerEnums.h"
#include "soh/Enhancements/randomizer/static_data.h"
@@ -1300,7 +1301,7 @@ void CheckTrackerWindow::DrawElement() {
ImGui::SetNextWindowSize(ImVec2(400, 540), ImGuiCond_FirstUseEver);
}
if (Trackers::BeginFloatWindows(
"Check Tracker", mIsVisible, Color_Background,
"Check Tracker", &mIsVisible, Color_Background,
static_cast<TrackerWindowType>(CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW)),
CVarGetInteger(CVAR_TRACKER_CHECK("Draggable"), 1), ImGuiWindowFlags_NoScrollbar)) {
if (!GameInteractor::IsSaveLoaded() || !initialized) {
@@ -1,4 +1,5 @@
#include "randomizer_entrance_tracker.h"
#include "randomizer_tracker_windows.h"
#include "soh/OTRGlobals.h"
#include "soh/SohGui/SohGui.hpp"
@@ -840,7 +841,7 @@ void EntranceTrackerWindow::DrawElement() {
ImGui::SetNextWindowSize(ImVec2(600, 375), ImGuiCond_FirstUseEver);
}
if (Trackers::BeginFloatWindows(
"Entrance Tracker", mIsVisible, Color_Background,
"Entrance Tracker", &mIsVisible, Color_Background,
static_cast<TrackerWindowType>(CVarGetInteger(CVAR_TRACKER_ENTRANCE("WindowType"), TRACKER_WINDOW_WINDOW)),
CVarGetInteger(CVAR_TRACKER_ENTRANCE("Draggable"), 1), ImGuiWindowFlags_NoScrollbar)) {
if (!GameInteractor::IsSaveLoaded()) {
@@ -1090,43 +1091,3 @@ void RegisterCheckTrackerWidgets() {
static RegisterMenuInitFunc menuInitFunc(RegisterCheckTrackerWidgets);
} // namespace EntranceTracker
namespace Trackers {
// Windowing stuff
bool BeginFloatWindows(std::string UniqueName, bool& open, Color_RGBA8& bgCol, TrackerWindowType windowType,
bool draggable, ImGuiWindowFlags flags) {
ImGuiWindowFlags windowFlags = flags;
if (windowFlags == 0) {
windowFlags |= ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_NoFocusOnAppearing;
}
if (windowType == TRACKER_WINDOW_FLOATING) {
ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID);
windowFlags |= ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar;
if (!draggable) {
windowFlags |= ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove;
}
}
auto maybeParent = ImGui::GetCurrentWindow();
ImGuiWindow* window = ImGui::FindWindowByName(UniqueName.c_str());
ImVec4 bgColVec = VecFromRGBA8(bgCol);
if (window != NULL && window->DockTabIsVisible && window->ParentWindow != NULL &&
std::string(window->ParentWindow->Name).compare(0, strlen("Main - Deck"), "Main - Deck") == 0) {
bgColVec.w = 1.0f;
}
ImGui::PushStyleColor(ImGuiCol_WindowBg, bgColVec);
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f);
return ImGui::Begin(UniqueName.c_str(), &open, windowFlags);
}
void EndFloatWindows() {
ImGui::PopStyleVar();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::End();
} // namespace Trackers
} // namespace Trackers
@@ -136,9 +136,3 @@ class EntranceTrackerWindow final : public Ship::GuiWindow {
void UpdateElement() override{};
};
} // namespace EntranceTracker
namespace Trackers {
bool BeginFloatWindows(std::string UniqueName, bool& open, Color_RGBA8& bgCol, TrackerWindowType windowType,
bool draggable, ImGuiWindowFlags flags = 0);
void EndFloatWindows();
} // namespace Trackers
@@ -19,7 +19,7 @@
#include "soh/Enhancements/randomizer/item_category_adj.h"
#include "soh/Enhancements/randomizer/randomizer_check_objects.h"
#include "soh/Enhancements/randomizer/randomizer_check_tracker.h"
#include "soh/Enhancements/randomizer/randomizer_entrance_tracker.h"
#include "soh/Enhancements/randomizer/randomizer_tracker_windows.h"
#include "soh/Enhancements/randomizer/SeedContext.h"
#include "soh/Enhancements/randomizer/static_data.h"
@@ -664,7 +664,7 @@ void HintTrackerWindow::DrawElement() {
ImGui::SetNextWindowSize(ImVec2(500, 600), ImGuiCond_FirstUseEver);
if (Trackers::BeginFloatWindows(
"Hint Tracker", mIsVisible, Color_Background,
"Hint Tracker", &mIsVisible, Color_Background,
static_cast<TrackerWindowType>(CVarGetInteger(CVAR_TRACKER_HINT("WindowType"), TRACKER_WINDOW_WINDOW)),
CVarGetInteger(CVAR_TRACKER_HINT("Draggable"), 1))) {
ImGui::SetWindowFontScale(CVarGetFloat(CVAR_TRACKER_HINT("FontSize"), 1.0f));
@@ -8,6 +8,7 @@
#include "randomizer_check_objects.h"
#include "randomizer_check_tracker.h"
#include "randomizer_item_tracker.h"
#include "randomizer_tracker_windows.h"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/randomizer/dungeon.h"
#include "soh/Enhancements/randomizer/item.h"
@@ -1359,46 +1360,20 @@ void DrawTotalChecks() {
}
// Windowing stuff
void BeginFloatingWindows(std::string UniqueName, ImGuiWindowFlags flags = 0) {
ImGuiWindowFlags windowFlags = flags;
if (windowFlags == 0) {
windowFlags |=
ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize;
static void BeginFloatingWindows(const std::string& UniqueName, ImGuiWindowFlags flags = 0) {
if (flags == 0) {
flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize;
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING) {
ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID);
windowFlags |= ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar;
if (!CVarGetInteger(CVAR_TRACKER_ITEM("Draggable"), 0)) {
windowFlags |= ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove;
}
}
auto color = VecFromRGBA8(CVarGetColor(CVAR_TRACKER_ITEM("BgColor.Value"), { 0, 0, 0, 0 }));
auto maybeParent = ImGui::GetCurrentWindow();
ImGuiWindow* window = ImGui::FindWindowByName(UniqueName.c_str());
if (window != NULL && window->DockTabIsVisible && window->ParentWindow != NULL &&
std::string(window->ParentWindow->Name).compare(0, strlen("Main - Deck"), "Main - Deck") == 0) {
color.w = 1.0f;
}
ImGui::PushStyleColor(ImGuiCol_WindowBg, color);
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f);
if (presetLoaded && presetPos.contains(UniqueName)) {
ImGui::SetNextWindowSize(presetSize[UniqueName]);
ImGui::SetNextWindowPos(presetPos[UniqueName]);
presetSize.erase(UniqueName);
presetPos.erase(UniqueName);
}
ImGui::Begin(UniqueName.c_str(), nullptr, windowFlags);
}
void EndFloatingWindows() {
ImGui::PopStyleVar();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::End();
Trackers::BeginFloatWindows(
UniqueName, nullptr, CVarGetColor(CVAR_TRACKER_ITEM("BgColor.Value"), { 0, 0, 0, 0 }),
static_cast<TrackerWindowType>(CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING)),
CVarGetInteger(CVAR_TRACKER_ITEM("Draggable"), 0), flags);
}
/**
@@ -1813,28 +1788,28 @@ void ItemTrackerWindow::DrawElement() {
SECTION_DISPLAY_MAIN_WINDOW) {
DrawNotes();
}
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Inventory"), SECTION_DISPLAY_MAIN_WINDOW) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Inventory Items Tracker");
DrawItemsInRows(inventoryItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Equipment"), SECTION_DISPLAY_MAIN_WINDOW) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Equipment Items Tracker");
DrawItemsInRows(equipmentItems, 3);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Misc"), SECTION_DISPLAY_MAIN_WINDOW) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Misc Items Tracker");
DrawItemsInRows(miscItems, 4);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) ==
@@ -1850,14 +1825,14 @@ void ItemTrackerWindow::DrawElement() {
} else {
DrawItemsInRows(dungeonRewards, 3);
}
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Songs"), SECTION_DISPLAY_MAIN_WINDOW) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Songs Tracker");
DrawItemsInRows(songItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) ==
@@ -1872,56 +1847,56 @@ void ItemTrackerWindow::DrawElement() {
} else {
DrawItemsInRows(dungeonItems);
}
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Greg"), SECTION_DISPLAY_EXTENDED_HIDDEN) ==
SECTION_DISPLAY_EXTENDED_SEPARATE) {
BeginFloatingWindows("Greg Tracker");
DrawItemsInRows(gregItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Triforce Piece Tracker");
DrawItemsInRows(triforcePieces);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.BeanSouls"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Bean Soul Tracker");
DrawItemsInRows(beanSoulItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.BossSouls"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Boss Soul Tracker");
DrawItemsInRows(bossSoulItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.JabberNuts"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Jabber Nut Tracker");
DrawItemsInRows(jabbernutItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Ocarina Button Tracker");
DrawItemsInRows(ocarinaButtonItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.OverworldKeys"), SECTION_DISPLAY_HIDDEN) ==
SECTION_DISPLAY_SEPARATE) {
BeginFloatingWindows("Overworld Key Tracker");
DrawItemsInRows(overworldKeyItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.SilverRupees"), SECTION_DISPLAY_HIDDEN) ==
@@ -1930,14 +1905,14 @@ void ItemTrackerWindow::DrawElement() {
TrackSilverRupees(&questMatchingSilverRupeeItems);
BeginFloatingWindows("Silver Rupee Tracker");
DrawItemsInRows(questMatchingSilverRupeeItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) ==
SECTION_DISPLAY_EXTENDED_SEPARATE) {
BeginFloatingWindows("Fishing Pole Tracker");
DrawItemsInRows(fishingPoleItems);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) ==
@@ -1949,7 +1924,7 @@ void ItemTrackerWindow::DrawElement() {
ImGui::SetNextWindowSize(ImVec2(400, 300), ImGuiCond_FirstUseEver);
BeginFloatingWindows("Personal Notes", ImGuiWindowFlags_NoFocusOnAppearing);
DrawNotes(true);
EndFloatingWindows();
Trackers::EndFloatWindows();
}
if (CVarGetInteger("gTrackers.ItemTracker.TotalChecks.DisplayType", SECTION_DISPLAY_MINIMAL_HIDDEN) ==
@@ -1957,7 +1932,7 @@ void ItemTrackerWindow::DrawElement() {
ImGui::SetNextWindowSize(ImVec2(450, 300), ImGuiCond_FirstUseEver);
BeginFloatingWindows("Total Checks");
DrawTotalChecks();
EndFloatingWindows();
Trackers::EndFloatWindows();
}
}
if (presetLoaded) {
@@ -0,0 +1,59 @@
#include "randomizer_tracker_windows.h"
#include <cstring>
#include <imgui_internal.h>
#include "soh/SohGui/UIWidgets.hpp"
namespace Trackers {
bool IsDockedToMainDeck(const std::string& UniqueName) {
ImGuiWindow* window = ImGui::FindWindowByName(UniqueName.c_str());
if (window == NULL) {
return false;
}
ImGuiDockNode* node = window->DockNode;
if (node == NULL && window->DockId != 0) {
node = ImGui::DockBuilderGetNode(window->DockId);
}
if (node == NULL) {
return false;
}
ImGuiWindow* host = ImGui::DockNodeGetRootNode(node)->HostWindow;
return host != NULL && strncmp(host->Name, "Main - Deck", strlen("Main - Deck")) == 0;
}
bool BeginFloatWindows(const std::string& UniqueName, bool* open, const Color_RGBA8& bgCol,
TrackerWindowType windowType, bool draggable, ImGuiWindowFlags flags) {
ImGuiWindowFlags windowFlags = flags;
if (windowFlags == 0) {
windowFlags |= ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_NoFocusOnAppearing;
}
if (windowType == TRACKER_WINDOW_FLOATING) {
ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID);
windowFlags |= ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar;
if (!draggable) {
windowFlags |= ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove;
}
}
ImVec4 bgColVec = VecFromRGBA8(bgCol);
if (IsDockedToMainDeck(UniqueName)) {
bgColVec.w = 1.0f;
}
ImGui::PushStyleColor(ImGuiCol_WindowBg, bgColVec);
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f);
return ImGui::Begin(UniqueName.c_str(), open, windowFlags);
}
void EndFloatWindows() {
ImGui::PopStyleVar();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::End();
}
} // namespace Trackers
@@ -0,0 +1,15 @@
#pragma once
#include <string>
#include <imgui.h>
#include <libultraship/color.h>
#include "randomizerEnums.h"
namespace Trackers {
bool IsDockedToMainDeck(const std::string& UniqueName);
bool BeginFloatWindows(const std::string& UniqueName, bool* open, const Color_RGBA8& bgCol,
TrackerWindowType windowType, bool draggable, ImGuiWindowFlags flags = 0);
void EndFloatWindows();
} // namespace Trackers