Files
Shiip-of-Hakinian-Espanol/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp
2025-06-30 11:40:20 +02:00

102 lines
4.9 KiB
C++

#include "ArchipelagoSettingsWindow.h"
#include "Archipelago.h"
#include "soh/SohGui/UIWidgets.hpp"
#include "soh/SohGui/SohGui.hpp"
#include "soh/Network/Archipelago/ArchipelagoConsoleWindow.h"
#include "soh/SaveManager.h"
void ArchipelagoSettingsWindow::DrawElement() {
ArchipelagoClient& AP_client = ArchipelagoClient::GetInstance();
ImGui::SeparatorText("Connection info");
UIWidgets::PushStyleCombobox(THEME_COLOR);
ImGui::PushStyleColor(ImGuiCol_Border, UIWidgets::ColorValues.at(THEME_COLOR));
ImGui::Text("Server Address");
UIWidgets::CVarInputString("##ArchipelagoServerAddress", CVAR_REMOTE_ARCHIPELAGO("ServerAddress"),
UIWidgets::InputOptions()
.Color(THEME_COLOR)
.PlaceholderText("archipelago.gg:38281")
.DefaultValue("archipelago.gg:38281")
.Size(ImVec2(ImGui::GetFontSize() * 15, 0))
.LabelPosition(UIWidgets::LabelPositions::None));
ImGui::Text("Slot Name");
UIWidgets::CVarInputString("##ArchipelagoSlotName", CVAR_REMOTE_ARCHIPELAGO("SlotName"),
UIWidgets::InputOptions()
.Color(THEME_COLOR)
.Size(ImVec2(ImGui::GetFontSize() * 15, 0))
.LabelPosition(UIWidgets::LabelPositions::None));
ImGui::Text("Password (leave blank for no password)");
UIWidgets::CVarInputString("##ArchipelagoPassword", CVAR_REMOTE_ARCHIPELAGO("Password"),
UIWidgets::InputOptions()
.Color(THEME_COLOR)
.Size(ImVec2(ImGui::GetFontSize() * 15, 0))
.LabelPosition(UIWidgets::LabelPositions::None));
ImGui::PopStyleColor();
UIWidgets::PopStyleCombobox();
if (UIWidgets::Button("Connect", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
bool success = AP_client.StartClient();
ArchipelagoConsole_SendMessage("[LOG] Trying to connect...", true);
}
ImGui::SameLine();
ImGui::Text(ArchipelagoClient::GetInstance().GetConnectionStatus());
UIWidgets::CVarCheckbox(
"Debug Enabled", CVAR_REMOTE_ARCHIPELAGO("DebugEnabled"),
UIWidgets::CheckboxOptions().Color(THEME_COLOR).Tooltip("Enable Archipelago debug tools and extra logging."));
// Temporary developer helpers
UIWidgets::Separator();
if (CVarGetInteger(CVAR_REMOTE_ARCHIPELAGO("DebugEnabled"), 0)) {
ImGui::SeparatorText("Developer Tools");
if (UIWidgets::Button("Scout", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
AP_client.StartLocationScouts();
}
ImGui::SameLine();
if (UIWidgets::Button("Link up", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
CVarSetInteger(CVAR_REMOTE_ARCHIPELAGO("Connected"), 1);
}
ImGui::SameLine();
if (UIWidgets::Button("Give Blue Rupee",
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
ArchipelagoClient::ApItem apItem;
apItem.itemName = "Blue Rupee";
apItem.locationName = "Nowhere";
apItem.playerName = "Nobody";
apItem.flags = 0b001;
apItem.index = 999999;
ArchipelagoClient::GetInstance().OnItemReceived(apItem);
}
ImGui::SameLine();
if (UIWidgets::Button("Send Game Won", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
ArchipelagoClient::GetInstance().SendGameWon();
}
if (UIWidgets::Button("Get Mido br chest",
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) {
ArchipelagoClient::GetInstance().QueueExternalCheck(16711707);
}
}
static bool sArchipelagoTexturesLoaded = false;
if (!sArchipelagoTexturesLoaded) {
Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
"Archipelago Progressive Icon", "textures/parameter_static/gArchipelagoProgressive.png");
Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
"Archipelago Useful Icon", "textures/parameter_static/gArchipelagoUseful.png");
Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
"Archipelago Junk Icon", "textures/parameter_static/gArchipelagoJunk.png");
sArchipelagoTexturesLoaded = true;
}
};
void ArchipelagoSettingsWindow::InitElement() {
SaveManager::Instance->AddLoadFunction("archipelagoData", 1, LoadArchipelagoData);
SaveManager::Instance->AddSaveFunction("archipelagoData", 1, SaveArchipelagoData, true, SECTION_PARENT_NONE);
SaveManager::Instance->AddInitFunction(InitArchipelagoData);
}