Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Как сделать плавное появление меню? (CSGOSIMPLE)

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вопрос в заголовкe
Код:
Expand Collapse Copy
#include "imgui_internal.h"

void ToggleButton(const char* str_id, bool* v)
{
    ImVec2 p = ImGui::GetCursorScreenPos();
    ImDrawList* draw_list = ImGui::GetWindowDrawList();

    float height = ImGui::GetFrameHeight();
    float width = height * 1.55f;
    float radius = height * 0.50f;

    ImGui::InvisibleButton(str_id, ImVec2(width, height));
    if (ImGui::IsItemClicked())
        *v = !*v;

    float t = *v ? 1.0f : 0.0f;

    ImGuiContext& g = *GImGui;
    float ANIM_SPEED = 0.08f;
    if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED)
    {
        float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED);
        t = *v ? (t_anim) : (1.0f - t_anim);
    }

    ImU32 col_bg;
    if (ImGui::IsItemHovered())
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t));
    else
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t));

    draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f);
    draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255));
}
по такому же принципу сделай на if (Menu::Render)
 
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();
Код:
Expand Collapse Copy
#include "imgui_internal.h"

void ToggleButton(const char* str_id, bool* v)
{
    ImVec2 p = ImGui::GetCursorScreenPos();
    ImDrawList* draw_list = ImGui::GetWindowDrawList();

    float height = ImGui::GetFrameHeight();
    float width = height * 1.55f;
    float radius = height * 0.50f;

    ImGui::InvisibleButton(str_id, ImVec2(width, height));
    if (ImGui::IsItemClicked())
        *v = !*v;

    float t = *v ? 1.0f : 0.0f;

    ImGuiContext& g = *GImGui;
    float ANIM_SPEED = 0.08f;
    if (g.LastActiveId == g.CurrentWindow->GetID(str_id))// && g.LastActiveIdTimer < ANIM_SPEED)
    {
        float t_anim = ImSaturate(g.LastActiveIdTimer / ANIM_SPEED);
        t = *v ? (t_anim) : (1.0f - t_anim);
    }

    ImU32 col_bg;
    if (ImGui::IsItemHovered())
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.78f, 0.78f, 0.78f, 1.0f), ImVec4(0.64f, 0.83f, 0.34f, 1.0f), t));
    else
        col_bg = ImGui::GetColorU32(ImLerp(ImVec4(0.85f, 0.85f, 0.85f, 1.0f), ImVec4(0.56f, 0.83f, 0.26f, 1.0f), t));

    draw_list->AddRectFilled(p, ImVec2(p.x + width, p.y + height), col_bg, height * 0.5f);
    draw_list->AddCircleFilled(ImVec2(p.x + radius + t * (width - radius * 2.0f), p.y + radius), radius - 1.5f, IM_COL32(255, 255, 255, 255));
}
по такому же принципу сделай на if (Menu::Render)
Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что за бред блять, зачем ты скинул говно анимацию
Объективно код анимации тут нормальный, и вполне можно заюзать для бегина, а вот то что отправил ты - можно сделать намного лучше
 
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();

Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
Че то не воркает, я вроде все правильно сделал
1650025539387.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Блять, я вроде все правильно делаю но или крашит или меню не закрывается
Блять, я вроде все правильно делаю но или крашит или меню не закрывается
Хоть помогите с затемнением заднего фона меню
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Блять, я вроде все правильно делаю но или крашит или меню не закрывается

Хоть помогите с затемнением заднего фона меню
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть
перед
}
ImGui::EndChild() вставь и все
ну потому что это хуйня, у тебя после ImGui::End() заканчивается меню. У тебя там ничего не должно быть

перед
}
ImGui::EndChild() вставь и все
Пожалуйста, авторизуйтесь для просмотра ссылки.
Тут все есть, посмотри внимательнее
 
после ImGui::End()
а не в начало меню

Посмотреть вложение 199759
ДО ImgUI::End нужно уже ресетнуть все стайл вары.
static float alpha = 0.0f;
if (alpha < 1.f)
alpha += 0.2f;
else if (alpha > 0.f)
alpha -= 0.2f;

ImGui::PushStyleVar(ImGui_StyleVarAlpha,alpha);
// render menu
ImGui::PopStyleVar();

Что за бред блять, зачем ты скинул говно анимацию, для сраного элемента, если ему нужно анимировать сам begin
Просто добавлять или отнимать числа плохая идея ибо скорость будет зависеть от фпс, если 400 то очень быстро если 10 то очень медленно.

static float alpha = std::clamp(alpha + ImGui::GetIO().DeltaTime * 2.f * (_visible ? 1.f : -1.f), 0.f, 1.f);

и удали
Посмотреть вложение 199758

тот код что я написал выше неправильный, я там чек забыл
Это уже лучше, но если хочешь удалять чек на закрытое меню то хотя бы сделайте проверку по типу if ( alpha <= 0) return;
 
Блять что за хуйня вы че анимацию то сделать не можете...
C++:
Expand Collapse Copy
    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f);
    }

    if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f);
    }

    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f)
        return;
 
Блять что за хуйня вы че анимацию то сделать не можете...
C++:
Expand Collapse Copy
    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha > 0.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha - fc / 255.f, 0.f, 1.f);
    }

    if (m_bIsMenuOpened && ImGui::GetStyle().Alpha < 1.f) {
        float fc = 255.f / 0.2f * ImGui::GetIO().DeltaTime;
        ImGui::GetStyle().Alpha = std::clamp(ImGui::GetStyle().Alpha + fc / 255.f, 0.f, 1.f);
    }

    if (!m_bIsMenuOpened && ImGui::GetStyle().Alpha <= 0.f)
        return;
ого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!

где-то до if (!_visible)
C++:
Expand Collapse Copy
auto menu_alpha = 0.f;
menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);


и замени
C++:
Expand Collapse Copy
if (!_visible)
    return;
на
C++:
Expand Collapse Copy
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha);
if (menu_alpha < 0.01f)
    return;

после ImGui::End(); добавь
ImGui::PopStyleVar();
 
ого, теперь ты изменяешь весь стайл имгуи, ты превзошёл комментаторов выше!

где-то до if (!_visible)
C++:
Expand Collapse Copy
auto menu_alpha = 0.f;
menu_alpha = ImLerp(menu_alpha, _visible ? 1.f : 0.f, ImGui::GetIO().DeltaTime * 8.f);


и замени
C++:
Expand Collapse Copy
if (!_visible)
    return;
на
C++:
Expand Collapse Copy
ImGui::PushStyleVar(ImGuiStyleVar_Alpha, menu_alpha);
if (menu_alpha < 0.01f)
    return;

после ImGui::End(); добавь
ImGui::PopStyleVar();
мерцает меню
 
Назад
Сверху Снизу