diff --git a/soh/soh/Network/Archipelago/Archipelago.cpp b/soh/soh/Network/Archipelago/Archipelago.cpp index fd70afd22..c8928869b 100644 --- a/soh/soh/Network/Archipelago/Archipelago.cpp +++ b/soh/soh/Network/Archipelago/Archipelago.cpp @@ -20,8 +20,6 @@ ArchipelagoClient::ArchipelagoClient() { namespace apc = AP_Client_consts; CVarSetInteger("ArchipelagoConnected", 0); - strncpy(serverAddress, CVarGetString(apc::SETTING_ADDRESS, apc::DEFAULT_SERVER_NAME), apc::MAX_ADDRESS_LENGTH); - strncpy(slotName, CVarGetString(apc::SETTING_NAME, ""), apc::MAX_PLAYER_NAME_LENGHT); // call poll every frame GameInteractor::Instance->RegisterGameHook([](){ArchipelagoClient::GetInstance().Poll();}); @@ -37,12 +35,15 @@ bool ArchipelagoClient::StartClient() { apClient.reset(); } - apClient = std::unique_ptr(new APClient(uuid, AP_Client_consts::AP_GAME_NAME, serverAddress)); + apClient = std::unique_ptr( + new APClient(uuid, AP_Client_consts::AP_GAME_NAME, CVarGetString(CVAR_REMOTE_ARCHIPELAGO("ServerAddress"), "localhost:38281"))); apClient->set_room_info_handler([&]() { std::list tags; // tags.push_back("DeathLink"); // todo, implement deathlink - apClient->ConnectSlot(slotName, password, 0b001, tags); + apClient->ConnectSlot(CVarGetString(CVAR_REMOTE_ARCHIPELAGO("SlotName"), ""), + CVarGetString(CVAR_REMOTE_ARCHIPELAGO("Password"), ""), + 0b001, tags); }); apClient->set_items_received_handler([&](const std::list& items) { @@ -76,7 +77,6 @@ bool ArchipelagoClient::StartClient() { // todo implement me }); - SaveData(); return true; } @@ -93,11 +93,6 @@ void ArchipelagoClient::StartLocationScouts() { apClient->LocationScouts(location_list); } -void ArchipelagoClient::SaveData() { - CVarSetString(AP_Client_consts::SETTING_ADDRESS, serverAddress); - CVarSetString(AP_Client_consts::SETTING_NAME, slotName); -} - bool ArchipelagoClient::IsConnected() { return apClient->get_state() == APClient::State::SLOT_CONNECTED; } @@ -169,16 +164,6 @@ const std::string& ArchipelagoClient::GetSlotName() const { return apClient->get_slot(); } -char* ArchipelagoClient::GetServerAddressBuffer() { - return serverAddress; -} -char* ArchipelagoClient::GetSlotNameBuffer() { - return slotName; -} -char* ArchipelagoClient::GetPasswordBuffer() { - return password; -} - const std::map& ArchipelagoClient::GetSlotData() { return slotData; } diff --git a/soh/soh/Network/Archipelago/Archipelago.h b/soh/soh/Network/Archipelago/Archipelago.h index a36778a46..c5f6d9819 100644 --- a/soh/soh/Network/Archipelago/Archipelago.h +++ b/soh/soh/Network/Archipelago/Archipelago.h @@ -10,12 +10,8 @@ namespace AP_Client_consts { static constexpr int MAX_ADDRESS_LENGTH = 64; static constexpr int MAX_PLAYER_NAME_LENGHT = 17; static constexpr int MAX_PASSWORD_LENGTH = 32; - static constexpr char const* DEFAULT_SERVER_NAME = "archipelago.gg:"; - static constexpr char const* SETTING_ADDRESS = "AP_server_address"; - static constexpr char const* SETTING_NAME = "AP_slot_name"; - - static constexpr char const* AP_GAME_NAME = "Ocarina of Time (SoH)"; + static constexpr char const* AP_GAME_NAME = "Ship of Harkinian"; } class ArchipelagoClient{ @@ -38,9 +34,6 @@ class ArchipelagoClient{ // getters const std::string& GetSlotName() const; - char* GetServerAddressBuffer(); - char* GetSlotNameBuffer(); - char* GetPasswordBuffer(); const char* GetConnectionStatus(); const std::map& GetSlotData(); const std::vector& GetScoutedItems(); @@ -72,17 +65,11 @@ class ArchipelagoClient{ static std::shared_ptr instance; // is this even used? static bool initialized; - char serverAddress[AP_Client_consts::MAX_ADDRESS_LENGTH]; - char slotName[AP_Client_consts::MAX_PLAYER_NAME_LENGHT]; - char password[AP_Client_consts::MAX_PLAYER_NAME_LENGHT]; - bool game_won; std::map slotData; std::set locations; std::vector scoutedItems; - - void SaveData(); // callback functions void OnConnected(); diff --git a/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp index c5fddfb3a..744099ebe 100644 --- a/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp +++ b/soh/soh/Network/Archipelago/ArchipelagoConsoleWindow.cpp @@ -9,7 +9,7 @@ bool autoScroll = true; using namespace UIWidgets; -void ArchipelagoConsole_SendMessage(const char* fmt, ...) IM_FMTARGS(2) { +void ArchipelagoConsole_SendMessage(const char* fmt, ...) { char buf[1024]; va_list args; va_start(args, fmt); diff --git a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp index fe22a45f4..d252384ff 100644 --- a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp +++ b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp @@ -14,13 +14,25 @@ void ArchipelagoSettingsWindow::DrawElement() { ImGui::PushStyleColor(ImGuiCol_Border, UIWidgets::ColorValues.at(THEME_COLOR)); ImGui::Text("Server Address"); - ImGui::InputText("##serveraddress", AP_client.GetServerAddressBuffer(), AP_Client_consts::MAX_ADDRESS_LENGTH); + 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"); - ImGui::InputText("##slotname", AP_client.GetSlotNameBuffer(), AP_Client_consts::MAX_PLAYER_NAME_LENGHT); + 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)"); - ImGui::InputText("##password", AP_client.GetPasswordBuffer(), - AP_Client_consts::MAX_PASSWORD_LENGTH, ImGuiInputTextFlags_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(); @@ -46,4 +58,4 @@ void ArchipelagoSettingsWindow::DrawElement() { ArchipelagoClient::GetInstance().OnItemReceived(66077, true); } -}; \ No newline at end of file +}; diff --git a/soh/soh/cvar_prefixes.h b/soh/soh/cvar_prefixes.h index 375833cb1..8c53fd76e 100644 --- a/soh/soh/cvar_prefixes.h +++ b/soh/soh/cvar_prefixes.h @@ -15,5 +15,6 @@ #define CVAR_REMOTE(var) CVAR_PREFIX_REMOTE "." var #define CVAR_REMOTE_CROWD_CONTROL(var) CVAR_REMOTE("CrowdControl." var) #define CVAR_REMOTE_SAIL(var) CVAR_REMOTE("Sail." var) +#define CVAR_REMOTE_ARCHIPELAGO(var) CVAR_REMOTE("Archipelago." var) #define CVAR_GAMEPLAY_STATS(var) CVAR_PREFIX_GAMEPLAY_STATS "." var #define CVAR_TIME_DISPLAY(var) CVAR_PREFIX_TIME_DISPLAY "." var \ No newline at end of file