mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-31 18:17:33 -04:00
Move Tracker namespace to its own file (#7135)
Reuse for item tracker BeginFloatingWindows
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user