В общем я решил пастить осирис и столкнулся с одной проблемой-если ставить авторесайз окна для спектатор листа то случается это Весь текст начинает рендерится по вертикали. Как это исправить? Снизу код без авторесайза
Код:
void Misc::spectatorList() noexcept
{
if (!miscConfig.spectatorList.enabled)
return;
GameData::Lock lock;
const auto& observers = GameData::observers();
if (std::ranges::none_of(observers, [](const auto& obs) { return obs.targetIsLocalPlayer; }) && !gui->isOpen())
return;
if (miscConfig.spectatorList.pos != ImVec2{}) {
ImGui::SetNextWindowPos(miscConfig.spectatorList.pos);
miscConfig.spectatorList.pos = {};
}
if (miscConfig.spectatorList.size != ImVec2{}) {
ImGui::SetNextWindowSize(ImClamp(miscConfig.spectatorList.size, {}, ImGui::GetIO().DisplaySize));
miscConfig.spectatorList.size = {};
}
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoCollapse;
if (!gui->isOpen())
windowFlags |= ImGuiWindowFlags_NoInputs;
if (miscConfig.spectatorList.noTitleBar)
windowFlags |= ImGuiWindowFlags_NoTitleBar;
if (!gui->isOpen())
ImGui::PushStyleColor(ImGuiCol_TitleBg, ImGui::GetColorU32(ImGuiCol_TitleBgActive));
ImGui::PushStyleVar(ImGuiStyleVar_WindowTitleAlign, { 0.5f, 0.5f });
ImGui::Begin("Spectator list", nullptr, windowFlags);
ImGui::PopStyleVar();
if (!gui->isOpen())
ImGui::PopStyleColor();
for (const auto& observer : observers) {
if (!observer.targetIsLocalPlayer)
continue;
if (const auto it = std::ranges::find(GameData::players(), observer.playerHandle, &PlayerData::handle); it != GameData::players().cend()) {
if (const auto texture = it->getAvatarTexture()) {
const auto textSize = ImGui::CalcTextSize(it->name.c_str());
ImGui::Image(texture, ImVec2(textSize.y, textSize.y), ImVec2(0, 0), ImVec2(1, 1), ImVec4(1, 1, 1, 1), ImVec4(1, 1, 1, 0.3f));
ImGui::SameLine();
ImGui::TextWrapped("%s", it->name.c_str());
}
}
}
ImGui::End();
}