Skip to content

Commit

Permalink
Merge pull request #31 from RaidcoreGG/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
DeltaGW2 committed Mar 17, 2024
2 parents 70487fa + 903a817 commit 4a89ccb
Show file tree
Hide file tree
Showing 17 changed files with 432 additions and 134 deletions.
8 changes: 8 additions & 0 deletions src/Events/EventHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#include "Consts.h"
#include "Shared.h"

#include "Loader/Loader.h"

namespace Events
{
std::mutex Mutex;
Expand Down Expand Up @@ -43,6 +45,12 @@ namespace Events
const std::lock_guard<std::mutex> lock(Mutex);
{
Registry[str].push_back(aConsumeEventCallback);

/* dirty hack for arcdps (I hate my life) */
if ((str == "EV_ARCDPS_COMBATEVENT_LOCAL_RAW" || str == "EV_ARCDPS_COMBATEVENT_SQUAD_RAW") && !Loader::IsArcdpsLoaded)
{
Loader::DetectArcdps();
}
}
}

Expand Down
67 changes: 41 additions & 26 deletions src/GUI/GUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -640,18 +640,33 @@ namespace GUI

std::filesystem::path fontPath{};

ImVector<ImWchar> ranges;

ImFontGlyphRangesBuilder rb{};
ImWchar rangesLatinExt[] =
{
0x0100, 0x017F,
0x0180, 0x024F,
0,
};
rb.AddRanges(io.Fonts->GetGlyphRangesDefault());
rb.AddRanges(rangesLatinExt);
rb.AddRanges(io.Fonts->GetGlyphRangesCyrillic());
rb.AddRanges(io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
rb.BuildRanges(&ranges);

/* add user font, or fallback to default */
if (!LinkArcDPSStyle && std::filesystem::exists(Path::F_FONT))
{
fontPath = Path::F_FONT;
std::string strFont = Path::F_FONT.string();
io.Fonts->AddFontFromFileTTF(strFont.c_str(), FontSize, nullptr, io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
io.Fonts->AddFontFromFileTTF(strFont.c_str(), FontSize, nullptr, ranges.Data);
}
else if (LinkArcDPSStyle && std::filesystem::exists(Path::D_GW2_ADDONS / "arcdps" / "arcdps_font.ttf"))
{
fontPath = Path::D_GW2_ADDONS / "arcdps" / "arcdps_font.ttf";
std::string strFont = (Path::D_GW2_ADDONS / "arcdps" / "arcdps_font.ttf").string();
io.Fonts->AddFontFromFileTTF(strFont.c_str(), FontSize, nullptr, io.Fonts->GetGlyphRangesChineseSimplifiedCommon());
io.Fonts->AddFontFromFileTTF(strFont.c_str(), FontSize, nullptr, ranges.Data);
}
else
{
Expand All @@ -672,36 +687,36 @@ namespace GUI
config.MergeMode = true;

/* small UI*/
FontIndex.emplace(EFont::Menomonia_Small, io.Fonts->AddFontFromMemoryTTF(resM, szM, 16.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 16.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::MenomoniaBig_Small, io.Fonts->AddFontFromMemoryTTF(resM, szM, 22.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 22.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Trebuchet_Small, io.Fonts->AddFontFromMemoryTTF(resT, szT, 15.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 15.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Menomonia_Small, io.Fonts->AddFontFromMemoryTTF(resM, szM, 16.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 16.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::MenomoniaBig_Small, io.Fonts->AddFontFromMemoryTTF(resM, szM, 22.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 22.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::Trebuchet_Small, io.Fonts->AddFontFromMemoryTTF(resT, szT, 15.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 15.0f, &config, ranges.Data); }

/* normal UI*/
FontIndex.emplace(EFont::Menomonia_Normal, io.Fonts->AddFontFromMemoryTTF(resM, szM, 18.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 18.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::MenomoniaBig_Normal, io.Fonts->AddFontFromMemoryTTF(resM, szM, 24.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 24.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Trebuchet_Normal, io.Fonts->AddFontFromMemoryTTF(resT, szT, 16.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 16.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Menomonia_Normal, io.Fonts->AddFontFromMemoryTTF(resM, szM, 18.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 18.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::MenomoniaBig_Normal, io.Fonts->AddFontFromMemoryTTF(resM, szM, 24.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 24.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::Trebuchet_Normal, io.Fonts->AddFontFromMemoryTTF(resT, szT, 16.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 16.0f, &config, ranges.Data); }

/* large UI*/
FontIndex.emplace(EFont::Menomonia_Large, io.Fonts->AddFontFromMemoryTTF(resM, szM, 20.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 20.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::MenomoniaBig_Large, io.Fonts->AddFontFromMemoryTTF(resM, szM, 26.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 26.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Trebuchet_Large, io.Fonts->AddFontFromMemoryTTF(resT, szT, 17.5f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 17.5f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Menomonia_Large, io.Fonts->AddFontFromMemoryTTF(resM, szM, 20.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 20.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::MenomoniaBig_Large, io.Fonts->AddFontFromMemoryTTF(resM, szM, 26.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 26.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::Trebuchet_Large, io.Fonts->AddFontFromMemoryTTF(resT, szT, 17.5f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 17.5f, &config, ranges.Data); }

/* larger UI*/
FontIndex.emplace(EFont::Menomonia_Larger, io.Fonts->AddFontFromMemoryTTF(resM, szM, 22.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 22.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::MenomoniaBig_Larger, io.Fonts->AddFontFromMemoryTTF(resM, szM, 28.0f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 28.0f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Trebuchet_Larger, io.Fonts->AddFontFromMemoryTTF(resT, szT, 19.5f));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 19.5f, &config, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); }
FontIndex.emplace(EFont::Menomonia_Larger, io.Fonts->AddFontFromMemoryTTF(resM, szM, 22.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 22.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::MenomoniaBig_Larger, io.Fonts->AddFontFromMemoryTTF(resM, szM, 28.0f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 28.0f, &config, ranges.Data); }
FontIndex.emplace(EFont::Trebuchet_Larger, io.Fonts->AddFontFromMemoryTTF(resT, szT, 19.5f, 0, ranges.Data));
if (!fontPath.empty()) { io.Fonts->AddFontFromFileTTF(fontPath.string().c_str(), 19.5f, &config, ranges.Data); }
}

io.Fonts->Build();
Expand Down
47 changes: 27 additions & 20 deletions src/GUI/Widgets/Addons/AddonItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,30 +115,37 @@ namespace GUI
ImGui::ImageButton(BtnOptions->Resource, ImVec2(size * Renderer::Scaling, size * Renderer::Scaling));
if (ImGui::BeginPopupContextItem("##AddonItemActionsMore"))
{
if (ImGui::GW2::ContextMenuItem(("Update##" + sig).c_str(), Language.Translate("((000011))"), CtxMenuBullet->Resource, CtxMenuHighlight->Resource, ImVec2(btnWidth * ImGui::GetFontSize(), btnHeight)))
if (ImGui::GW2::ContextMenuItem(("Update##" + sig).c_str(), !aAddon->IsCheckingForUpdates ? Language.Translate("((000011))") : Language.Translate("((000071))"), CtxMenuBullet->Resource, CtxMenuHighlight->Resource, ImVec2(btnWidth * ImGui::GetFontSize(), btnHeight)))
{
for (auto& it : Loader::Addons)
if (!aAddon->IsCheckingForUpdates)
{
if (it.second->Definitions == aAddon->Definitions)
for (auto& it : Loader::Addons)
{
std::filesystem::path tmpPath = it.first.string();
signed int tmpSig = aAddon->Definitions->Signature;
std::string tmpName = aAddon->Definitions->Name;
AddonVersion tmpVers = aAddon->Definitions->Version;
EUpdateProvider tmpProv = aAddon->Definitions->Provider;
std::string tmpLink = aAddon->Definitions->UpdateLink != nullptr ? aAddon->Definitions->UpdateLink : "";

std::thread([tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink]()
{
if (Loader::UpdateAddon(tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink))
if (it.second->Definitions == aAddon->Definitions)
{
aAddon->IsCheckingForUpdates = true;

std::filesystem::path tmpPath = it.first.string();
signed int tmpSig = aAddon->Definitions->Signature;
std::string tmpName = aAddon->Definitions->Name;
AddonVersion tmpVers = aAddon->Definitions->Version;
EUpdateProvider tmpProv = aAddon->Definitions->Provider;
std::string tmpLink = aAddon->Definitions->UpdateLink != nullptr ? aAddon->Definitions->UpdateLink : "";

std::thread([aAddon, tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink]()
{
Loader::QueueAddon(ELoaderAction::Reload, tmpPath);
}
})
.detach();

//LogDebug(CH_GUI, "Update called: %s", it.second->Definitions->Name);
break;
if (Loader::UpdateAddon(tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink))
{
Loader::QueueAddon(ELoaderAction::Reload, tmpPath);
}
Sleep(1000); // arbitrary sleep otherwise the user never even sees "is checking..."
aAddon->IsCheckingForUpdates = false;
})
.detach();

//LogDebug(CH_GUI, "Update called: %s", it.second->Definitions->Name);
break;
}
}
}
}
Expand Down
77 changes: 55 additions & 22 deletions src/GUI/Widgets/Addons/CAddonsWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ namespace GUI
bool showInstalled = false;
bool refreshHovered = false;

int queuedForCheck = 0;
int checkedForUpdates = -1;

CAddonsWindow::CAddonsWindow(std::string aName)
{
Name = aName;
Expand Down Expand Up @@ -103,8 +106,12 @@ namespace GUI

ImVec2 text1sz = ImGui::CalcTextSize(Language.Translate("((000031))"));
ImVec2 text2sz = ImGui::CalcTextSize(Language.Translate("((000032))"));
ImVec2 text1offset = ImVec2(((92.0f * Renderer::Scaling) - text1sz.x) / 2, ((24.0f * Renderer::Scaling) - text1sz.y) / 2);
ImVec2 text2offset = ImVec2(((92.0f * Renderer::Scaling) - text2sz.x) / 2, ((24.0f * Renderer::Scaling) - text2sz.y) / 2);

float tab1width = 92.0f > text1sz.x ? 92.0f : text1sz.x + 50.0f;
float tab2width = 92.0f > text2sz.x ? 92.0f : text2sz.x + 50.0f;

ImVec2 text1offset = ImVec2(((tab1width * Renderer::Scaling) - text1sz.x) / 2, ((24.0f * Renderer::Scaling) - text1sz.y) / 2);
ImVec2 text2offset = ImVec2(((tab2width * Renderer::Scaling) - text2sz.x) / 2, ((24.0f * Renderer::Scaling) - text2sz.y) / 2);

ImVec2 tab1origin = ImGui::GetCursorPos(); // 28.0f, 28.0f

Expand All @@ -113,7 +120,7 @@ namespace GUI
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0));
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0));

if (ImGui::ImageButton(!Tab1Hovered ? TabBtn->Resource : TabBtnHover->Resource, ImVec2(92.0f * Renderer::Scaling, 24.0f * Renderer::Scaling)))
if (ImGui::ImageButton(!Tab1Hovered ? TabBtn->Resource : TabBtnHover->Resource, ImVec2(tab1width * Renderer::Scaling, 24.0f * Renderer::Scaling)))
{
TabIndex = 0;
}
Expand All @@ -123,7 +130,7 @@ namespace GUI

ImVec2 tab2origin = ImGui::GetCursorPos();

if (ImGui::ImageButton(!Tab2Hovered ? TabBtn->Resource : TabBtnHover->Resource, ImVec2(92.0f * Renderer::Scaling, 24.0f * Renderer::Scaling)))
if (ImGui::ImageButton(!Tab2Hovered ? TabBtn->Resource : TabBtnHover->Resource, ImVec2(tab2width * Renderer::Scaling, 24.0f * Renderer::Scaling)))
{
TabIndex = 1;
}
Expand Down Expand Up @@ -189,29 +196,52 @@ namespace GUI
ShellExecuteA(NULL, "explore", strAddons.c_str(), NULL, NULL, SW_SHOW);
}
ImGui::SameLine();
if (ImGui::GW2::Button(Language.Translate("((000035))"), ImVec2(ImGui::CalcTextSize(Language.Translate("((000035))")).x + 16.0f, btnHeight)))
float btnUpdateCheckWidth = ImGui::CalcTextSize(Language.Translate("((000035))")).x;
float btnUpdateCheckingWidth = ImGui::CalcTextSize(Language.Translate("((000071))")).x;
float btnUCWidth = btnUpdateCheckingWidth > btnUpdateCheckWidth ? btnUpdateCheckingWidth : btnUpdateCheckWidth;

if (ImGui::GW2::Button(checkedForUpdates == -1 ? Language.Translate("((000035))") : Language.Translate("((000071))"), ImVec2(btnUCWidth + 16.0f, btnHeight)))
{
const std::lock_guard<std::mutex> lock(Loader::Mutex);
if (checkedForUpdates == -1)
{
for (auto& [path, addon] : Loader::Addons)
const std::lock_guard<std::mutex> lock(Loader::Mutex);
{
if (nullptr == addon->Definitions) { continue; }
checkedForUpdates = 0;
queuedForCheck = 0;
/* pre-iterate to get the count of how many need to be checked, else one call might finish before the count can be incremented */
for (auto& [path, addon] : Loader::Addons)
{
if (nullptr == addon->Definitions) { continue; }
queuedForCheck++;
}

std::filesystem::path tmpPath = path.string();
signed int tmpSig = addon->Definitions->Signature;
std::string tmpName = addon->Definitions->Name;
AddonVersion tmpVers = addon->Definitions->Version;
EUpdateProvider tmpProv = addon->Definitions->Provider;
std::string tmpLink = addon->Definitions->UpdateLink != nullptr ? addon->Definitions->UpdateLink : "";
for (auto& [path, addon] : Loader::Addons)
{
if (nullptr == addon->Definitions) { continue; }

std::thread([tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink]()
{
if (Loader::UpdateAddon(tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink))
std::filesystem::path tmpPath = path.string();
signed int tmpSig = addon->Definitions->Signature;
std::string tmpName = addon->Definitions->Name;
AddonVersion tmpVers = addon->Definitions->Version;
EUpdateProvider tmpProv = addon->Definitions->Provider;
std::string tmpLink = addon->Definitions->UpdateLink != nullptr ? addon->Definitions->UpdateLink : "";

std::thread([tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink]()
{
Loader::QueueAddon(ELoaderAction::Reload, tmpPath);
}
})
.detach();
if (Loader::UpdateAddon(tmpPath, tmpSig, tmpName, tmpVers, tmpProv, tmpLink))
{
Loader::QueueAddon(ELoaderAction::Reload, tmpPath);
}
checkedForUpdates++;

if (checkedForUpdates == queuedForCheck)
{
checkedForUpdates = -1;
queuedForCheck = 0;
}
})
.detach();
}
}
}
}
Expand All @@ -232,7 +262,10 @@ namespace GUI
{
for (auto& [path, addon] : Loader::Addons)
{
if (addon->Definitions != nullptr && addon->Definitions->Signature == libAddon->Signature)
// if libAddon already exist in installed addons
// or if arcdps is loaded another way and the libAddon is arc
if ((addon->Definitions != nullptr && addon->Definitions->Signature == libAddon->Signature) ||
(Loader::IsArcdpsLoaded && libAddon->Signature == 0xFFF694D1))
{
exists = true;
break;
Expand Down
30 changes: 26 additions & 4 deletions src/GUI/Widgets/Options/COptionsWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace GUI
std::string CurrentlyEditing;
char CurrentAPIKey[73]{};

const char* qaLocations[] = { "Extend", "Under", "Bottom", "Custom" };
const char* qaLocations[] = { "((000067))", "((000068))", "((000069))", "((000070))" };
const char** languages;
int languagesIndex;
int languagesSize;
Expand All @@ -42,6 +42,14 @@ namespace GUI
void KeybindsTab();
void APITab();

static bool LocalizedItemsGetter(void* data, int idx, const char** out_text)
{
const char* const* items = (const char* const*)data;
if (out_text)
*out_text = items[idx];
return true;
}

COptionsWindow::COptionsWindow(std::string aName)
{
Name = aName;
Expand Down Expand Up @@ -136,10 +144,24 @@ namespace GUI
}

ImGui::Text(Language.Translate("((000050))"));
if (ImGui::Combo("##qalocation", (int*)&QuickAccess::Location, qaLocations, IM_ARRAYSIZE(qaLocations)))
if (ImGui::BeginCombo("##qalocation", Language.Translate(qaLocations[(int)QuickAccess::Location])))
{
Settings::Settings[OPT_QALOCATION] = QuickAccess::Location;
Settings::Save();
for (int n = 0; n < IM_ARRAYSIZE(qaLocations); n++)
{
bool is_selected = ((int)QuickAccess::Location == n); // You can store your selection however you want, outside or inside your objects
if (ImGui::Selectable(Language.Translate(qaLocations[n]), is_selected))
{
QuickAccess::Location = (EQAPosition)n;
Settings::Settings[OPT_QALOCATION] = QuickAccess::Location;
Settings::Save();
}
if (is_selected)
{
ImGui::SetItemDefaultFocus(); // You may set the initial focus when opening the combo (scrolling + for keyboard navigation support)
}
}

ImGui::EndCombo();
}
ImGui::Text(Language.Translate("((000051))"));
if (ImGui::InputFloat2("##qaoffset", (float*)&QuickAccess::Offset))
Expand Down
28 changes: 28 additions & 0 deletions src/GUI/Widgets/Overlay/CMumbleOverlay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,34 @@ namespace GUI
}
}
ImGui::End();

ImGui::SetNextWindowBgAlpha(0.35f);
pos.x += size.x + 16.0f;
ImGui::SetNextWindowPos(pos);
ImGui::SetNextWindowSize(size);
if (ImGui::Begin("NexusLinkData", &Visible, WindowFlags_Overlay))
{
ImGui::Text("Nexus Mumble Extensions");
ImGui::Separator();
if (ImGui::BeginTable("table_nexus", 2))
{
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::Text("frame");
ImGui::TableSetColumnIndex(1); ImGui::Text("%d", FrameCounter);
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::Text("isMoving");
ImGui::TableSetColumnIndex(1); ImGui::Text("%s", IsMoving ? "true" : "false");
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::Text("isCameraMoving");
ImGui::TableSetColumnIndex(1); ImGui::Text("%s", IsCameraMoving ? "true" : "false");
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::Text("isGameplay");
ImGui::TableSetColumnIndex(1); ImGui::Text("%s", IsGameplay ? "true" : "false");

ImGui::EndTable();
}
}
ImGui::End();
}
else
{
Expand Down
Loading

0 comments on commit 4a89ccb

Please sign in to comment.