Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Апр 2025
- Сообщения
- 46
- Реакции
- 2
C++:
inline bool Speedometer = false;
inline float localSpeed;
inline float localSpeed_m[100];
inline int CurrentSpeedIndex = 0;
C++:
float x = stLocalBaseEntity.m_vecAbsVelocity[0];
float y = stLocalBaseEntity.m_vecAbsVelocity[1];
float z = stLocalBaseEntity.m_vecAbsVelocity[2];
localSpeed = sqrt(x * x + y * y + z * z);
Функция для обновления данных в массиве
C++:
void UpdateSpeedData(float newSpeed)
{
localSpeed = newSpeed;
localSpeed_m[CurrentSpeedIndex] = localSpeed;
CurrentSpeedIndex++;
if (CurrentSpeedIndex >= 100)
CurrentSpeedIndex = 0;
}
Отрисовка в имгуе
C++:
if (Speedometer)
{
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 5.0f, 5.0f });
ImGui::PushStyleColor(ImGuiCol_WindowBg, { 0.0f, 0.0f, 0.0f, 0.3f });
ImGui::Begin("SpeedWidget", nullptr,
ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_AlwaysAutoResize);
UpdateSpeedData(localSpeed);
ImGui::PushStyleColor(ImGuiCol_PlotLines, ImVec4(1.0f, 0.5f, 0.0f, 1.0f));
ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.0f, 0.0f, 0.0f, 0.2f));
ImGui::PlotLines("##speed",
localSpeed_m,
100,
CurrentSpeedIndex,
NULL,
0.0f,
500.0f,
ImVec2(0, 120.0f));
ImGui::PopStyleColor(2);
ImGui::Text("Speed: %.1f", localSpeed);
ImGui::End();
ImGui::PopStyleColor();
ImGui::PopStyleVar(2);
}
Результат