Начинающий
-
Автор темы
- #1
s/o y3px
s/o antosha pixelware
s/o antosha pixelware
C++:
std::string TrimString(const std::string& str, float max_width)
{
Vector2D text_size = render::get_text_size(g_Draw.specpl, str.c_str()); // определяем размер строки в пикселях
if (text_size.x <= max_width)
{
return str; // строка уже короткая, возвращаем её без изменений
}
// обрезаем строку, чтобы её длина была меньше или равна max_width
float ellipsis_width = ImGui::CalcTextSize("").x; // размер многоточия в пикселях
float remaining_width = max_width - ellipsis_width; // сколько пикселей осталось для оставшейся строки
std::string result;
for (int i = 0; i < str.size(); i++)
{
Vector2D char_size = render::get_text_size(g_Draw.specpl, str.substr(i, 1).c_str()); // размер текущего символа в пикселях
if (remaining_width - char_size.x >= 0)
{
result += str[i]; // символ помещается в оставшееся пространство, добавляем его в результат
remaining_width -= char_size.x; // уменьшаем оставшееся пространство
}
else
{
result += ""; // добавляем многоточие, чтобы показать, что строка была обрезана
break;
}
}
return result;
}
void Visuals::SpectatorList()
{
std::string str[100] = { };
size_t a = 0;
size_t c = 0;
int gdsf = 0;
m_vecPos.x = g_Options.spectator_list_x;
m_vecPos.y = g_Options.spectator_list_y;
if (!g_Options.spectator_list)
return;
for (int i = 0; i < g_EngineClient->GetMaxClients(); i++)
{
C_BasePlayer* entity = C_BasePlayer::GetPlayerByIndex(i);
if (!entity)
continue;
if (entity->IsAlive())
continue;
if (entity->IsDormant())
continue;
player_info_t entityinfo1 = entity->GetPlayerInfo();
int specscol[3];
std::string spectators;
if (strstr(entityinfo1.szName, "GOTV"))
continue;
if (entity->m_hObserverTarget())
{
C_BasePlayer* target = entity->m_hObserverTarget();
player_info_t entityinfo = entity->GetPlayerInfo();
player_info_t targetinfo = target->GetPlayerInfo();
if (strstr(entityinfo1.szName, "GOTV"))
continue;
if (!target->IsPlayer())
continue;
spectators = std::string(entityinfo.szName) + " -> " + targetinfo.szName;
bool checkplayer = false;
int index = spectators.find(u8"∞");
if (index != std::string::npos) {
checkplayer = true;
}
if (target == g_LocalPlayer)
{
specscol[0] = g_Options.spectator_list_color.r();
specscol[1] = g_Options.spectator_list_color.g();
specscol[2] = g_Options.spectator_list_color.b();
}
else
{
specscol[0] = 240;
specscol[1] = 240;
specscol[2] = 240;
}
}
else
{
if (entityinfo1.fakeplayer)
{
specscol[0] = g_Options.spectator_list_color.r();
specscol[1] = g_Options.spectator_list_color.g();
specscol[2] = g_Options.spectator_list_color.b();
}
else
{
specscol[0] = 240;
specscol[1] = 240;
specscol[2] = 240;
}
spectators = std::string(entityinfo1.szName);
}
std::string aboba2;
if (g_Options.big_spectator_list)
{
aboba2 = TrimString(spectators, 650);
}
else
{
aboba2 = TrimString(spectators, 197);
}
str[i] = spectators;
gdsf += 1;
render::draw_text_string(g_Draw.specpl, false, m_vecPos.x + 4 + 1, m_vecPos.y + 25 - 20 + (m_iTotalSpectators++ * 20), specscol[0], specscol[1], specscol[2], 255,spectators.c_str());
}
for (int i = 0; i < 100; i++)
{
size_t b = strlen(str[i].c_str());
if (a > b)
continue;
a = b;
c = i;
}
textsizespec = render::get_text_size(g_Draw.specpl, str[c]);
}
void Visuals::SpectatorFrame()
{
if (!g_Options.spectator_list)
return;
static int x = 157;
m_vecSize = { Vector(x , (int)m_iTotalSpectators * 20 ,0) };
static auto vecPos = m_vecPos;
if (g_Options.big_spectator_list)
{
x = 200;
}
else
{
x = 157;
}
std::string szName = ("SPECTATOR LIST");
static int iHeight = 20;
static int iHeight2 = 21; // + 1
int iWidth = m_vecSize.x + 42;
int iWidth2 = m_vecSize.x + 43; // + 1
int kappi = 0;
int oke = m_iTotalSpectators % 2;
if (oke == 0)
{
kappi * 18;
}
render::draw_filled_rect(m_vecPos.x, m_vecPos.y + 24 - 24, m_vecSize.x + 43, m_vecSize.y, Color(69, 69, 69, 255));
render::draw_rect(m_vecPos.x, m_vecPos.y + 24 - 24, m_vecSize.x + 43, m_vecSize.y, Color(78, 76, 76, 255));
for (int i = 0; i <= iHeight; i++)
{
g_VGuiSurface->set_drawing_color(52, 52, 52, 255);
g_VGuiSurface->draw_line(m_vecPos.x + i, m_vecPos.y, m_vecPos.x + iHeight + i, m_vecPos.y - iHeight);
g_VGuiSurface->draw_line(m_vecPos.x + iWidth + iHeight - i, m_vecPos.y - iHeight, m_vecPos.x + iWidth - i, m_vecPos.y);
if (i == iHeight)
{
render::draw_filled_rect(m_vecPos.x + iHeight, m_vecPos.y - iHeight, iWidth - iHeight, iHeight + 1, Color(52, 52, 52, 255));
}
}
static int specscol[3];
specscol[0] = g_Options.spectator_list_color.r();
specscol[1] = g_Options.spectator_list_color.g();
specscol[2] = g_Options.spectator_list_color.b();
g_VGuiSurface->set_drawing_color(78, 76, 76, 255);
g_VGuiSurface->draw_line(m_vecPos.x, m_vecPos.y, m_vecPos.x + iHeight, m_vecPos.y - iHeight);
g_VGuiSurface->draw_line(m_vecPos.x + iHeight, m_vecPos.y - iHeight, m_vecPos.x + iWidth + iHeight + 1, m_vecPos.y - iHeight);
g_VGuiSurface->draw_line(m_vecPos.x + iWidth, m_vecPos.y, m_vecPos.x + iWidth + iHeight, m_vecPos.y - iHeight);
g_VGuiSurface->draw_line(m_vecPos.x, m_vecPos.y, m_vecPos.x + iWidth, m_vecPos.y);
render::draw_text_string(g_Draw.spec, true, m_vecPos.x + (iWidth + iHeight) * 0.5 - 10, m_vecPos.y + 1 - iHeight + 2.5 + 1, g_Options.spectator_list_color.r(), g_Options.spectator_list_color.g(), g_Options.spectator_list_color.b(), 255, szName.c_str());
for (int i = 0; i < m_iTotalSpectators; i += 2) {
render::draw_filled_rect(m_vecPos.x, m_vecPos.y + (i * 20) + kappi, m_vecSize.x + 43, 20, Color(41, 41, 41, 255));
render::draw_rect(m_vecPos.x, m_vecPos.y + 24 - 24, m_vecSize.x + 43, m_vecSize.y, Color(78, 76, 76, 255));
}
kappi++;
}