void RenderLoadingScreen()
{
ImGui::SetNextWindowPos(ImVec2(-100, 0), ImGuiCond_Always);
//ImVec2 newSize = ImVec2(ImGui::GetIO().DisplaySize.x - 100, ImGui::GetIO().DisplaySize.y + 100);
ImVec2 newSize = ImVec2(3000, 3000);
ImGui::SetNextWindowSize(newSize, ImGuiCond_Always);
ImGui::Begin("Loading Screen", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoBackground);
// Получаем доступ к ImDrawList
ImDrawList* draw_list = ImGui::GetWindowDrawList();
// Размер экрана
ImVec2 screen_size = ImGui::GetIO().DisplaySize;
// Рисуем полупрозрачный чёрный фон на весь экран
ImU32 bg_color = IM_COL32(0, 0, 0, 128); // Полупрозрачный чёрный
float offsetX = 100.0f; // Отступ по оси X
float offsetY = 100.0f; // Отступ по оси Y
// Создаем прямоугольник с отступами
draw_list->AddRectFilled(ImVec2(0, 0), ImVec2(screen_size.x + offsetX, screen_size.y + offsetY), bg_color);
// Центрируем текст "Loading..." по экрану
ImVec2 text_size = ImGui::CalcTextSize("Loading...");
ImVec2 text_pos = ImVec2((screen_size.x - text_size.x) / 2, (screen_size.y - text_size.y) / 2);
// Рисуем текст "Loading..." белым цветом
draw_list->AddText(text_pos, IM_COL32(255, 255, 255, 220), "Loading...");
// Параметры анимации
static float time = 0.0f;
time += 0.05f; // Скорость вращения (регулируйте по вашему желанию)
// Радиус и толщина круга
float radius = 30.0f;
float thickness = 4.0f;
// Количество сегментов (больше сегментов - плавнее вращение)
const int num_segments = 30;
const float angle_step = 2.0f * 3.14159265359f / num_segments;
// Центр анимации (незначительно выше текста)
ImVec2 center = ImVec2(screen_size.x / 2, screen_size.y / 2 - text_size.y / 2 - 40); // Центрируем анимацию выше текста
// Рисуем частичный круг (3/4 круга)
const float start_angle = 0.0f; // Начальный угол (с чего начать рисовать)
const float end_angle = 3.0f * 3.14159265359f / 2.0f; // Конечный угол (три четверти круга)
// Рисуем вращающийся сегмент (сдвигаем углы на время)
for (float angle = start_angle; angle < end_angle; angle += angle_step) {
float next_angle = angle + angle_step;
float current_angle = angle + time; // Добавляем time для вращения
ImVec2 start(center.x + radius * cos(current_angle), center.y + radius * sin(current_angle));
ImVec2 end(center.x + radius * cos(current_angle + angle_step), center.y + radius * sin(current_angle + angle_step));
// Рисуем сегмент
draw_list->AddLine(start, end, IM_COL32(255, 255, 255, 220), thickness);
}
ImGui::End();
}